Честно говоря, с Инстаграммом не работал никогда (и не зарегистрирован даже), не хочется врать. Но не думаю, что там что-то сильно отличается.
Для примера взял Twitter и всё-таки Gearman.
Процесс-задачник берёт твиттер-аккаунты из базы, ставит задачи на скачку их твитов. Процесс-работник берёт задачи на скачку и скачивает твиты в формате JSON. Просто задача мне близка: я собираю базу твитов белгородских пользователей твиттера, и делаю всякую разную статистику: кто сколько и когда твитит, сколько каких смайликов используется, кто кого фолловит больше всего и прочие бесполезные цифры :-)
Работник анализирует заголовки ответа твиттер-сервера, и если там сказано, что лимит исчерпан,
ждёт необходимое количество секунд (указано в ответном HTTP-заголовке X-Rate-Limit-Reset
).
В консоли при этом выводится сообщение от работника, наподобие такого:
Sleeping for 325 seconds… To: 14:49:04
Код представлен в трёх файлах:
add-user.php
— добавление задачи (пользователя);get-tweets.php
— выполнение задачи (получение твитов);config.php
— общие настройки.
Каталоги:
lib/
— библиотека для доступа к REST API Твиттера;data/
— скачанные твиты.
Код максимально изолирован от всех фреймворков преднамеренно, чтобы быть более «скриптовым». Обычно используется Yii2 и Composer, конечно. Из зависимостей только пакеты, перечисленные ниже для установки. Версия PHP ≥ 5.4.
Всё работает многопоточно, можно запускать несколько задачников и несколько работников.
В терминах Инстаграм-задачи: задачник — получение списка фоток для лайканья, работник — лайканье. Если нужно прям Инстаграм-Инстаграм, нужно будет денёк-пару поразбираться в документации, но я, откровенно говоря, не особо верю, что там что-то сверхъестественное.
Настройки авторизации к REST API находятся в файле config.php
.
Если нужно авторизовываться из разных приложений прописываем разные настройки в разных настроечных файлах и запускаем работников.
Распаковать архив в рабочий каталог.
Поставить нужные пакеты:
sudo apt-get install php5 gearman-job-server php5-gearman php5-curl
Поставить задачи на выполнение (желательно выбрать большое количество многопишущих пользователей):
php add-user.php almaximal sijeko OldLentach …
Запустить сколько угодно работников:
php get-tweets.php
При желании можно зарегистрировать разные приложения для расширения лимитов и запустить несколько работников с разными конфигами:
// Доступ к приложению OAuth
// Можно делать много разных приложений для расширения лимитов
$oauthParams = [
'consumer_key' => '…',
'consumer_secret' => '…',
'user_token' => '…',
'user_secret' => '…',
];
Точно так же можно создать несколько серверов очередей задач и запускать работников на разных серверах.
% php add-user.php sijeko almaximal
Adding user: sijeko
Adding user: almaximal
# Первый работник
% php get-tweets.php
Getting tweets for user @almaximal (queued at 2015-05-25T15:02:31+03:00)…
Getting tweet: https://twitter.com/almaximal/status/602634163041259520 …
…
Getting tweet: https://twitter.com/almaximal/status/516967868010078208 …
Sleeping for 325 seconds… To: 15:15:04
Getting tweet: https://twitter.com/almaximal/status/516945702229123072 …
…
Getting tweet: https://twitter.com/almaximal/status/304884802375516161 …
Job done.
…
# Второй работник
% php get-tweets.php
Getting tweets for user @sijeko (queued at 2015-05-25T15:02:31+03:00)…
Getting tweet: https://twitter.com/sijeko/status/602084404131930112 …
…
Getting tweet: https://twitter.com/sijeko/status/88199752516243456 …
Job done.
…
/**
* Параллельная работа с длительными задачами и REST API
*
* @author MaximAL
* @date 2015-05-25
* @version 1.0
* @since 2015-05-25 Первая версия документа.
* @copyright © MaximAL 2015
**/