Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
whakru opened this issue Dec 25, 2019 · 6 comments
Open

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

whakru opened this issue Dec 25, 2019 · 6 comments

Comments

@whakru
Copy link

whakru commented Dec 25, 2019

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

@catthecreator
Copy link

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

@Ashgo-ru
Copy link

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

@batFormat
Copy link

+1

@Ashgo-ru
Copy link

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

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

@beehunt9r
Copy link

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

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

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

@beehunt9r
Copy link

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

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 точки входа соответственно.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants