Работа с API VK в YII2

Работа с VK API в YII2

В процесса создания одно из проектов требовалось много работать с API Вконтакте. Основные механизмы я вынес в отдельный репозиторий и сейчас поделюсь с Вами что так такого особенного.

Компонент создавался на основе yii\authclient\clients\VKontakte

Ссылки:

Вконтаке есть множество ограничений и с этим пришлось побороться. Одни из тех которые мне мешали:

  • Ограничение на количество запросов
  • Однотипные запросы
  • Постоянные капчи

Так же было нужно выполнять запросы по cron-у. Для этого в первую очередь необходимо было сохранить токен в базу, но yii2 затирает его, по этому я переопределить метод initUserAttributes. Поправьте меня если я не прав.

Конфигурация

Обычная конфигурация 

Расширенная конфигурация с указанием компонента распознавания капчи и авторизатора через соц.сети

Использование

При первой авторизации через соц. сеть добавляем токен в базу

Запросы от текущего пользователя

Или же при работе с кроном надо для начало залогинется под нужным пользователем (под тем от кого мы будем выполнять запросы)

У ВК API есть такой метод как execute. Он позволяет выполнять множество инструкций(можно использовать и языковые конструкции if, for и другие синтаксии как у js) одним хопом, я его использовал для построения очередей. Добавляем запросы в очередь, а затем группами выполняем их с интервалами.

Можно так же сохранить эти инструкции в json для последующего выполнения в будущем, я это использовал для описания фотографий. Мне требовалось изменять их массово, а у ВК это вызывает ошибку «Однотипные запросы». Для этого решил их записать отдельно, а в последующем вызываю их cron-ом с интервалом в 2 минуты на одну инструкцию, может долго, но зато работает, с интервалом можно поэкспериментировать.

 

Стандартная загрузка изображений муторная немного, по этому вот...

Для распознавания капчи используется компонент Yii2 Captch.

Если Вы знаете какой функционал можно добавить, пишите в комментариях или на githab-е в разделе issues.

Теги: api, vk, вконтакте, вк, апи, yii2