Instagram загрузить видео с ПК - PullRequest
8 голосов
/ 06 января 2020

Я пытаюсь автоматизировать процесс загрузки видео / изображений в 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, он закрывает файловый менеджер и ничего не делает, например, он игнорирует то, что вы пытаетесь загрузить что-то.

Чтобы воспроизвести

  • go в Instagram
  • сделать логин
  • нажмите F12 для откройте dev tools
  • нажмите CTRL + SHIFT + M для переключения эмуляции устройства
  • выберите любое устройство или измените размер страницы для переключения мобильного просмотра сайта
  • перезагрузите сайт
  • попробуйте загрузить что-нибудь, нажав нижнюю кнопку +.

(видео составляет 6 МБ (<15 МБ, что является максимальным) и 40 секунд (<60 с, что является максимальным) </p>

Ответы [ 2 ]

1 голос
/ 14 января 2020

Если вы хотите опубликовать sh видео через API, вам нужно выполнить следующие два шага:

  • создать контейнер медиа-объекта с помощью POST /{ig-user-id}/media конечной точки
  • publi sh контейнер с 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 . Если это не решает проблему, вы можете проверить, имеет ли ваше видео следующие характеристики:

  • Скорость передачи видео 3500 кбит / с
  • Код H.264 * Формат 1033 * / MP4
  • длительность от 3 до 60 секунд
  • максимальная ширина 1080 пикселей (1080P)
  • 29,96 кадров в секунду
  • AA C аудиокод c при 44,1 кГц моно
0 голосов
/ 10 января 2020

Я думаю приватный клиент API Instagram справится лучше, чем ваш подход

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...