PCからのInstagramのアップロードビデオ


8

Instagramに動画/画像をアップロードするプロセスを自動化しようとしています(プライベートAPIを使用せずに)。とりあえず、画像のアップロードを自動化し、ビデオに対して同じことをしようとしています。これをelectronとでやっていNodejsます。

アップロードボタンをクリックして画像を選択するために、実際に問題なく動作するこのコードを実行します。

const fs = require('fs'),
      {remote} = require('electron'),
      clipboardy    = require('clipboardy'),
      BrowserWindow = remote.BrowserWindow;

const LOAD_IMAGE = '.UP43G',
      NEW_POST = '.glyphsSpriteNew_post__outline__24__grey_9.u-__7';

function get_files(path){
    return fs.readdirSync(path, { withFileTypes: true })
    .filter(dirent => dirent.isFile())
    .map(dirent => __dirname + '/../../' + path + '/' + dirent.name);
}

function randomRange(min, max) {
    min = Math.ceil(min);
    max = Math.floor(max);
    return Math.floor(Math.random() * (max - min + 1)) + min;
}

function sleep(ms) {
    return new Promise(resolve => setTimeout(resolve, ms));
}

function createWindow (session_id, hidden) {
    win = new BrowserWindow({
        width: 500,
        height: 500
    });
    win.loadURL('https://www.instagram.com');
    return win;
}

////select the files to upload////

var files = UPLOAD_POST_FOLDER_CUSTOM
var file_to_upload = files[randomRange(0, files.length - 1)];

///////////////////////////////////////

function async upload_image(){
    // click the upload button on the page
    await electron_window.webContents.executeJavaScript(`
        async function click_upload_button(){
            let new_post_button = document.querySelector('${NEW_POST}');
            await sleep(1000);
            new_post_button.click()
        }
        click_upload_button();
    `);
    // write the path of the file and press enter in the file selector
    await sleep(500);
    let previous_clipboard = clipboardy.readSync();
    clipboardy.writeSync(file_to_upload);
    await fake_input.keyTap('l', 'control');
    await fake_input.keyTap('v', 'control');
    await fake_input.keyTap('enter');
    clipboardy.writeSync(previous_clipboard);       
    await sleep(2000);

}

このコードは画像に適しています.jpg。私が直面している問題は、アップロード中に、何かを選択して投稿するためのファイルセレクターを開いたときに、動画が認識されないことです。私は可能なすべてのビデオ拡張機能を試しました。

また、ファイルセレクターでファイルパスを書き込もうとしたが、手動で選択したが、.jpg/ 以外の.mp4ファイルを書き込むと、警告が表示され画像のみが許可されることがわかった。代わりに、.jpgファイルへのパスを書き込むと、画像がアップロードされるファイルを.mp4そこに書き込んだ場合、ファイルマネージャーが閉じて何も行われません。何かをアップロードしようとしていることは無視されます。

再現する

  • Instagramに行く
  • ログインする
  • クリックF12して開発ツールを開きます
  • クリックCTRL + SHIFT + Mしてデバイスエミュレーションを切り替えます
  • デバイスを選択するか、ページのサイズを変更して、サイトのモバイルビューを切り替えます
  • サイトをリロードします
  • 下の+ボタンをクリックして何かをアップロードしてみてください。

(ビデオは6mb(<15mbが最大)で、40秒(<60sが最大です)

回答:


0

おもう InstagramのプライベートAPIクライアントは、あなたのアプローチよりも良い仕事をします


プライベートAPIからログインするたびに、新しいアクセスが実行されたというメールが送信されるため、ブラウザで直接操作し、リクエストモジュールやこのようなものではなく、少し退屈です。
Mat.C

セッションデータを保存して再利用し、ログインが実行されたという電子メールを受信しないようにすることができます。これがgithub.com/dilame/instagram-private-api/blob/master/examples/…
lazyd3v

また、現在のアプローチはハッシュを含むcssセレクターに依存しており、それらが時々変更されることは100%確実であり、これらのセレクターの更新ははるかに退屈になるでしょう
lazyd3v

2つのファクトリ認証とも相互作用できますか?
Mat.C


1

API経由で動画を公開する場合は、次の2つの手順を実行する必要があります。

  • POST /{ig-user-id}/mediaエンドポイントを使用してメディアオブジェクトコンテナーを作成する
  • コンテナを公開する POST /{ig-user-id}/media_publish

リクエストの例:

POST graph.facebook.com/89751400008469714/media
  ?media_type=VIDEO
  &video_url=https//www.example.com/videos/my-video.mov
  &caption=#myfirstvideo!

.movファイルを使用してみてください。これで問題が解決しない場合は、ビデオに次の特性があるかどうかを確認できます。

  • 3,500 kbpsビデオビットレート
  • H.264コーデック/ MP4形式
  • 3〜60秒の持続時間
  • 最大幅1080ピクセル(1080P)
  • 1秒あたり29.96フレーム
  • 44.1 kHzモノラルのAACオーディオコーデック

サンプルリクエストは、コンテナのID(例:012345)を返します。次に、このIDを次のコードサンプルで公開する必要があります。POST graph.facebook.com/89751400008469714/media_publish?creation_id = 012345
muellerra
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.