Пакет предоставляет удобный способ выполнения запросов к API социальной сети Vk.Сom.
Запросы выполняются в фоновом режиме, используя систему очередей Laravel. На каждый ответ от API генерируется событие, на которое можно подписаться, обработать/сохранить полученные данные и, при необходимости, добавить новые запросы.
Благодаря такому подходу можно гибко выстраивать цепочки из нескольких взаимосвязанных запросов, добавляя в очередь "дочерние" запросы при получении ответа от "родительского".
# Получить группы по списку ID - groups.getByIds # Для каждой группы получить участников - groups.getMembers # Каждого участника добавить себе в друзья - friends.add # Для каждой группы получить посты - wall.get # Для каждого поста получить комментарии - wall.getComments А благодаря автоматическому оборачиванию запросов в "execute-запросы" (по 25 в каждом), выполнение происходит в разы быстрее и понижается вероятность превышения лимитов Vk.Com на кол-во и частоту запросов.
Конечно можно! В состав пакета входит простой и удобный API-клиент - atehnix/vk-client, о возможностях которого можно узнать в его документации.
Впрочем, можно и вовсе установить только его, если вам не нужны очереди запросов :).
А если нужны, то продолжим:
Для установки через Composer, выполнить:
composer require atehnix/laravel-vk-requester ATehnix\LaravelVkRequester\VkRequesterServiceProvider::class,php artisan vendor:publish --provider="ATehnix\LaravelVkRequester\VkRequesterServiceProvider" php artisan migrate Внимание! Предполагается, что в вашем Laravel проекте уже настроены очереди и планировщик задач (Cron).
<?php use ATehnix\LaravelVkRequester\Models\VkRequest; VkRequest::create([ 'method' => 'wall.get', 'parameters' => ['owner_id' => 1], 'token' => 'some_token', ]);Раз в минуту (по Cron'у) из таблицы временного хранения все новые запросы переносятся в основную очередь Laravel.
Для уменьшения кол-ва реальных обращений к API, все запросы будут автоматически обернуты в "execute-запросы" по 25 в каждом.
В качестве удобного способа подписки на ответы API рекомендуется использовать классы, наследованные от ATehnix\LaravelVkRequester\Contracts\Subscriber.
Метод onSuccess($request, $response) будет вызываться при успешном выполнении запроса, а метод onFail($request, $error) при неудачном.
<?php use ATehnix\LaravelVkRequester\Contracts\Subscriber; use ATehnix\LaravelVkRequester\Models\VkRequest; class WallGetSubscriber extends Subscriber { /** @var string Метод API запроса */ protected $apiMethod = 'wall.get'; /** @var string Тэг запроса */ protected $tag = 'default'; public function onSuccess(VkRequest $request, $response) { foreach ($response['items'] as $item) { // do something... } } public function onFail(VkRequest $request, array $error) { \Log::alert('Request failed!'); } }Все Subscriber'ы необходимо добавить в массив $subscribe провайдера EventServiceProvider.
<?php class EventServiceProvider extends ServiceProvider { protected $subscribe = [ WallGetSubscriber::class, ]; // ... }Конечно же, слушать ответы API можно и без создания Subscriber'а. Все запросы генерируют события определенного формата, которые вы можете "слушать" как описано в разделе "Events" документации Laravel.
vk-requester.success: wall.get #default vk-requester.fail: wall.get #default По-умолчанию, в имени события присутствует тэг #default. При добавлении запроса вы можете в атрибуте tag указать любое другое значение тега. Тэг позволяет добавить запросам дополнительный "признак", когда требуется отличать их от других запросов с тем же методом.
Кроме того, через атрибут запроса context можно передать массив с любыми дополнительными данными, которые вы сможете получить при обработке события ($request->context).
Перед тем как начать отправлять запросы, необходимо получить API Token. Ниже представлен один из способов его получить.
<?php return [ // ... 'vkontakte' => [ 'client_id' => env('VKONTAKTE_KEY'), 'client_secret' => env('VKONTAKTE_SECRET'), 'redirect' => env('VKONTAKTE_REDIRECT_URI'), ], ];В файле .env укажите соответствующие параметры авторизации вашего VK-приложения.
<?php Route::get('vkauth', function (\ATehnix\VkClient\Auth $auth) { echo "<a href='{$auth->getUrl()}'> Войти через VK.Com </a><hr>"; if (Request::exists('code')) { echo 'Token: '.$auth->getToken(Request::get('code')); } });Пример демонстрирует лишь сам принцип получения токена. Как и где вы будете его получать и хранить вы решаете сами.