dimastik1986
@dimastik1986
учусь

Как сформировать запрос методом execute в VK api?

Прошу пояснить, никак не могу понять! Пробую себя в VK api, знания php поверхностные...

Загружаю информацию с помощью curl, пример:
$GroupInfo['url'] = 'https://api.vk.com/method/groups.getById';
$GroupInfo['post'] .= 'group_id='.$group_id;
$GroupInfo['post'] .= '&fields=members_count';
$GroupInfo['post'] .= '&access_token='.mc_decrypt($_SESSION['UserInfo']['access_token'], ENCRYPTION_KEY);
$GroupInfo['post'] .= '&v='.$System['api']['version'];
$GroupInfo['ch'] = curl_init($GroupInfo['url']);
curl_setopt ($GroupInfo['ch'], CURLOPT_URL, $GroupInfo['url']);
curl_setopt ($GroupInfo['ch'], CURLOPT_HEADER, 0);
curl_setopt ($GroupInfo['ch'], CURLOPT_NOBODY, 0);
curl_setopt ($GroupInfo['ch'], CURLOPT_RETURNTRANSFER, true);
curl_setopt ($GroupInfo['ch'], CURLOPT_POST, true);
curl_setopt ($GroupInfo['ch'], CURLOPT_POSTFIELDS, $GroupInfo['post']);
curl_setopt ($GroupInfo['ch'], CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt ($GroupInfo['ch'], CURLOPT_SSL_VERIFYHOST, 0);
$GroupInfo['out']=curl_exec($GroupInfo['ch']);
curl_close($GroupInfo['ch']);
$GroupInfo['get'] = json_decode($GroupInfo['out'], true);

Аналогичных запросов к разным методам может быть несколько на одной стр.
Я так понимаю, что это дело лучше оптимизировать!?

Мой вопрос - как мне с моими запросами использовать execute?
Из описания в документации я понял ровно ничего :(
Если можете пример привести, буду очень признателен.
Спасибо!
  • Вопрос задан
  • 1244 просмотра
Решения вопроса 1
dimastik1986
@dimastik1986 Автор вопроса
учусь
нашел в инете внятный пример, почти разобрался!
единственный момент - вот я сформировал запросы:
$code .= 'var out = API.users.get({...});'; 
$code .= 'var out = out + API.groups.getById({...});'; 
$code .= 'var out = out + API.stats.get({...});'; 
$code .= 'return out;';

отправил все это дело
$execute = json_decode(GetVK('https://api.vk.com/method/execute', array(
    'code' => $code,
    'access_token' => mc_decrypt($_SESSION['UserInfo']['access_token'], ENCRYPTION_KEY),
    'v' => $System['api']['version']
)), true);

на выходе получил массив $execute['response'], получается на следующем уровне у меня 3 массива, которые соответствуют 3 моим запросам в порядке очереди!? Правильно?

------
выкладываю для тех, кому может пригодиться
1. удобная функция для запросов
function vk_query($url, $params) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($ch, CURLOPT_HEADER, false);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_IPRESOLVE, CURLOPT_IPRESOLVE_V4);
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_REFERER, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params));
    $result = curl_exec($ch);
    curl_close($ch);
    return $result;
}


2. пример запроса
$members_all = array();
for ($i=0; $i<$query_count; $i++){
  $offset_out = $i*25000;
    $query = "
      var members = API.groups.getMembers({\"group_id\": $group_vk_id, \"count\":1000, \"fields\": \"sex, bdate\", \"offset\": $offset_out}).items;
      var offset = 1000;
      while (offset < 25000 && (offset+$offset_out < $group_vk_count)){
      members = members + API.groups.getMembers({\"group_id\": $group_vk_id, \"count\":1000, \"fields\": \"sex, bdate\",\"offset\": ($offset_out + offset)}).items;
      offset = offset + 1000;
      };
      return members;
    ";
  $result = json_decode(vk_query('https://api.vk.com/method/execute', array(
    'access_token' => $_SESSION['access_token'],
    'code' => "$query",
    'v' => '5.37'
  )), true);
  //echo '<pre>';
  //print_r($result);
  $members_all[] = $result;
}


источник
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы