Требуется помощь Как постить в инстаграм несколько картинок в одной публикации с помощью php

SergeyBocharov

Premium Lite
Регистрация
18 Янв 2021
Сообщения
1
Реакции
0
Всем привет)
У меня есть сайт, на котором я реализовал работу нескольких скриптов php. Они выполняют разные функции, которые облегчают мою жизнь и работу. Одна из которых является планировщиком постов в инстаграме. Реализована она с помощью api телеграмма и инстаграма. Я в телеграмм своему боту отправляю текст поста, потом фото к этому посту и дату со временем, когда это все опубликовать. Потом эти данные сохраняются в базу данных на моем сервере (дата и время, текст поста и айди картинки).
Так же у меня стоит крон задача, которая каждую минуту запускает скрипт. В нем выполняется функция, которая сравнивает текущее время и дату с записями времен и дат в базе данных и если находит совпадение выполняет следущее: по айди картинки получает расположение этой картинки на серверах телеграмма и скачивает ее на мой сервер. Потом запускается скрипт, который постит в инстограм текст из базы данных и картинку с моего сервера.
Вот этот скрипт для постинга в инстаграм писал не я (не смог до конца разобраться с api инстаграма), взял его от сюда tioffs/InstaLite. Он отлично работает, но с его помощью в одной публикации можно отправить только одно фото, а мне хотелось бы в одной публикации отправлять до 10 фоток. Я в принципе понимаю, что за это отвечает вот эта часть кода:


Код:
public function uploadPhoto(string $photo, string $message): ?string

    {

        if (!file_exists($photo)) {

            throw new Exception("File [$photo] not found");

        }

        $photo_id = round(microtime(true) * 1000);

        $file_temp = DIR . '/' . $this->uuid4();

        list($width, $height, $image_type) = getimagesize(realpath($photo));

        $srcImage = ImageCreateFromJPEG($photo);

        $resImage = ImageCreateTrueColor($width, $height);

        ImageCopyResampled($resImage, $srcImage, 0, 0, 0, 0, $width, $height, $width, $height);

        ImageJPEG($srcImage, $file_temp, 100);

        ImageDestroy($srcImage);



        $response = Request::post($this->web . 'rupload_igphoto/fb_uploader_' . $photo_id)

            ->addHead('content-type', 'image/jpg')

            ->addHead('x-entity-name', 'fb_uploader_' . $photo_id)

            ->addHead('offset', 0)

            ->addHead('user-agent', 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_4_1 like Mac OS X; ru-RU) AppleWebKit/537.36 (KHTML, like Gecko)  Version/11.4.1 Mobile/15G77 Safari/537.36 Puffin/5.2.2IP')

            ->addHead('x-entity-length', filesize($file_temp))

            ->addHead('x-instagram-rupload-params', '{"media_type":1,"upload_id":"' . $photo_id . '","upload_media_height":' . $height . ',"upload_media_width":' . $width . '}')

            ->addFile($file_temp)

            ->json(true);

        unlink($file_temp);

        if (!isset($response['upload_id'], $response['status']) && $response['status'] != 'ok') {

            throw new Exception("Error upload file: " . \json_encode($response));

        }

        $this->__log('upload file success: ' . \json_encode($response));

        $response = Request::post($this->web . 'create/configure/')

            ->addHead('content-type', 'application/x-www-form-urlencoded')

            ->addHead('user-agent', 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_4_1 like Mac OS X; ru-RU) AppleWebKit/537.36 (KHTML, like Gecko)  Version/11.4.1 Mobile/15G77 Safari/537.36 Puffin/5.2.2IP')

            ->addParam('upload_id', $response['upload_id'])

            ->addParam('caption', $message)

            ->addParam('usertags', '')

            ->addParam('custom_accessibility_caption', '')

            ->addParam('retry_timeout', '')

            ->json(true);

        if (!isset($response['media']['id']) && $response['status'] != 'ok') {

            throw new Exception("Error save post: " . \json_encode($response));

        }

        $this->__log('save post success: ' . \json_encode($response));

        return $response['media']['id'];

    }

Понимаю что скорее всего нужно создавать массив данных и отправлять как то так:
Код:
->addHead('x-instagram-rupload-para
ms', '{"media_type":1,"upload_id":"' . $photo_id . '","upload_media_height":' . $height . ',"upload_media_width":' . $width . '}')
заменив "media_type":1 скорее всего на "media_type":3

Но у меня у самого пока что ничего не получается, т.к я не профессионал в этом деле, а просто гуглитель.
Прошу вашей помощи господа)
 

заменив "media_type":1 скорее всего на "media_type":3

Это ничего не даст, т.к. что такое media_type - енот его знает. Это точно не количество фоток, более того, судя по коду (сильно не вчитывался, но насколько я понял), этот метод в принципе не заточен на загрузку нескольких кратинок одним махом. Копать надо либо в сторону самой апихи Инсты (а именно - изучать вот этот маршрут: rupload_igphoto/fb_uploader_ ), либо в принципе переезжать на другую либу

Что касается поля media_type - скорее всего, это идентификатор загружаемого файла - картинка или видео. Этот метод передает ширину, высоту и параметры картинки, и он нигде не отправляет массив/json, и цикла для сборки данных у него тоже нет
 

Обратите внимание

Назад
Сверху