Пакет предоставляет удобный способ выполнения запросов к API Vk.Сom.
PHP
Clone or download
Permalink
Failed to load latest commit information.
publish FIX #4 Dec 1, 2016
src Fix #6 Support for scalar responses Mar 3, 2017
.gitignore Laravel 5.4 compatibility Feb 3, 2017
LICENSE init Aug 1, 2016
README.md Update README.md Feb 8, 2018
composer.json Update composer dependencies Mar 21, 2018

README.md

Laravel VK Requester

Packagist Version GitHub license

Пакет предоставляет удобный способ выполнения запросов к 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
Добавить в массив providers в файле config/app.php:
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

В качестве удобного способа подписки на ответы 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 токен?

Перед тем как начать отправлять запросы, необходимо получить API Token. Ниже представлен один из способов его получить.

Добавьте в config/services.php:
<?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'));
    }
});

Пример демонстрирует лишь сам принцип получения токена. Как и где вы будете его получать и хранить вы решаете сами.

License

MIT