vk-php-sdk
vk-php-sdk copied to clipboard
Как реализовать метод execute?
Как реализовать метод execute?
Аналогичный вопрос интересует
Все еще актуальный вопрос...
+1
Короче. Разобрался... На примере получения товаров из Маркета
some.php
<?
$owner_id = 'xxxxxxxxx'; // ID вашего сообщества
$vkapiversion = "5.107"; // Версия API
$access_token = 'xxxxxxxxxxxxx'; // Ваш токен, полученный ранее
$proc = "marketGetAll"; // Название процедуры придумываете сами
$result = json_decode(file_get_contents("https://api.vk.com/method/execute.".$proc."?access_token=".$access_token."&v=".$vkapiversion."&ownerid=".$owner_id),true);
var_dump($result);
Далее идем в https://vk.com/apps?act=manage Там выбираем наше приложение => Редактировать => Хранимые процедуры => Добавить новую процедуру. Название пишем то же, что и в переменной $proc в нашем php.
Помним: Ограничение execute - 25 запросов, ограничение метода market.get - 200 товаров за запрос. Таким образом одним запросом execute можем получить за раз 200*25 = 5000 товаров. Если нужно больше, то уже повторяем запрос execute. Про это речи не было.
Содержимое:
var ownerid = Args.ownerid;
Через Args. можно получить данные переданной в запросе переменной. Выше - это наше сообщество, которое мы передали методу
var offset = 0;
Сдвиг. Начинаем с начала, поэтому 0.
var requests = 1;
Для счетчика на количество запросов.
var goods = API.market.get({"owner_id":Args.ownerid, "count":"200", "extended":"1", "offset": offset});
оппа... делаем запрос через метод market.get
var result = goods.items;
Здесь определили сколько у нас всего товаров в магазе
offset = offset + 200;
Ставим сдвиг на 200, почему 200 - смотри выше
Запускаем цикл, пока количество товаров больше, чем сдвиг и запросов меньше 25 выполняем, используя метод market.get
while(goods.count > offset && requests < 25){
goods = API.market.get({"owner_id":Args.ownerid, "count":"200", "extended":"1", "offset": offset});
result = result+goods.items;
Складываем результаты в кучу и увеличиваем сдвиг для следующего цикла, Увеличиваем счетчик запросов execute
offset = offset + 200;
requests = requests + 1;
};
return {count: goods.count, items: result};
В конце с помощью return отправляем в наш php json
Дублирую процедуру без комментов:
var ownerid = Args.ownerid;
var offset = 0;
var requests = 1;
var goods = API.market.get({"owner_id":Args.ownerid, "count":"200", "extended":"1", "offset": offset});
var result = goods.items;
offset = offset + 200;
while(goods.count > offset && requests < 25){
goods = API.market.get({"owner_id":Args.ownerid, "count":"200", "extended":"1", "offset": offset});
result = result+goods.items;
offset = offset + 200;
requests = requests + 1;
};
return {count: goods.count, items: result};
Все элементарно просто, $accessToken это access_token, а $code - код процедуры соотвественно.
$client = new VK\Client\VKApiClient();
$accessToken = '***';
$code = '***';
$response = $client->getRequest()->post('execute', $accessToken, ['code' => $code]);
Короче. Разобрался... На примере получения товаров из Маркета
some.php
<? $owner_id = 'xxxxxxxxx'; // ID вашего сообщества $vkapiversion = "5.107"; // Версия API $access_token = 'xxxxxxxxxxxxx'; // Ваш токен, полученный ранее $proc = "marketGetAll"; // Название процедуры придумываете сами $result = json_decode(file_get_contents("https://api.vk.com/method/execute.".$proc."?access_token=".$access_token."&v=".$vkapiversion."&ownerid=".$owner_id),true); var_dump($result);
Далее идем в https://vk.com/apps?act=manage Там выбираем наше приложение => Редактировать => Хранимые процедуры => Добавить новую процедуру. Название пишем то же, что и в переменной $proc в нашем php.
Помним: Ограничение execute - 25 запросов, ограничение метода market.get - 200 товаров за запрос. Таким образом одним запросом execute можем получить за раз 200*25 = 5000 товаров. Если нужно больше, то уже повторяем запрос execute. Про это речи не было.
Содержимое:
var ownerid = Args.ownerid;
Через Args. можно получить данные переданной в запросе переменной. Выше - это наше сообщество, которое мы передали методуvar offset = 0;
Сдвиг. Начинаем с начала, поэтому 0.var requests = 1;
Для счетчика на количество запросов.var goods = API.market.get({"owner_id":Args.ownerid, "count":"200", "extended":"1", "offset": offset});
оппа... делаем запрос через метод market.getvar result = goods.items;
Здесь определили сколько у нас всего товаров в магазеoffset = offset + 200;
Ставим сдвиг на 200, почему 200 - смотри выше Запускаем цикл, пока количество товаров больше, чем сдвиг и запросов меньше 25 выполняем, используя метод market.getwhile(goods.count > offset && requests < 25){ goods = API.market.get({"owner_id":Args.ownerid, "count":"200", "extended":"1", "offset": offset});
result = result+goods.items;
Складываем результаты в кучу и увеличиваем сдвиг для следующего цикла, Увеличиваем счетчик запросов executeoffset = offset + 200; requests = requests + 1; }; return {count: goods.count, items: result};
В конце с помощью return отправляем в наш php json
Дублирую процедуру без комментов:
var ownerid = Args.ownerid; var offset = 0; var requests = 1; var goods = API.market.get({"owner_id":Args.ownerid, "count":"200", "extended":"1", "offset": offset}); var result = goods.items; offset = offset + 200; while(goods.count > offset && requests < 25){ goods = API.market.get({"owner_id":Args.ownerid, "count":"200", "extended":"1", "offset": offset}); result = result+goods.items; offset = offset + 200; requests = requests + 1; }; return {count: goods.count, items: result};
Не особо хорошее решение, учитывая то, что здесь никак не используется SDK, и получается 2 точки входа соответственно.