vk-php-sdk icon indicating copy to clipboard operation
vk-php-sdk copied to clipboard

Как реализовать метод execute?

Open whakru opened this issue 5 years ago • 6 comments

Как реализовать метод execute?

whakru avatar Dec 25 '19 15:12 whakru

Аналогичный вопрос интересует

catthecreator avatar Apr 30 '20 18:04 catthecreator

Все еще актуальный вопрос...

Ashgo-ru avatar May 17 '20 19:05 Ashgo-ru

+1

batFormat avatar May 27 '20 12:05 batFormat

Короче. Разобрался... На примере получения товаров из Маркета

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};

Ashgo-ru avatar May 27 '20 13:05 Ashgo-ru

Все элементарно просто, $accessToken это access_token, а $code - код процедуры соотвественно.

$client = new VK\Client\VKApiClient();
$accessToken = '***';
$code = '***';

$response = $client->getRequest()->post('execute', $accessToken, ['code' => $code]);

beehunt9r avatar Jan 28 '22 13:01 beehunt9r

Короче. Разобрался... На примере получения товаров из Маркета

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};

Не особо хорошее решение, учитывая то, что здесь никак не используется SDK, и получается 2 точки входа соответственно.

beehunt9r avatar Jan 28 '22 13:01 beehunt9r