Социальные сети стали неотъемлемым инструментом продвижения сайтов. Для раскрутку сайта через соц. сети следует создать группу или страничку данного сайта. Набирать подписчиков, выкладывать новости на стену и много чего ещё (это тема отдельной заметки). Многие эти процессы можно автоматизировать используя API (интерфейс прикладного программирования) соответствующей социальной сети. В этой заметке я разберу как подключиться к vk api (вконтакте), как начать работать c вк апи, а так же приведу несколько примеров работы с api вконтакте.
Создание приложения вконтакте
И так приступим. Vk api имеет много методов, но одним из основных их различий является то, что для выполнения запросов к вк апи через некоторые методы требуется специальный ключ доступа - токен (access_token). Получить его можно создав своё приложение. Нам предлагают несколько видов приложений, но я выбираю тип Standalone. Мне его хватает. Для начала создания приложения переходим по ссылке и попадаем в следующее окно.
Здесь мы выбираем тип и название нашего приложения. Нажимаем подключить приложение и получаем на номер телефона, привязанному к аккаунту вк из которого мы создаём приложение, смс с кодом. Вводим его и переходим в следующее окно. В этом окне переходим в вкладку настройки.
В вкладке настройки мы видим поля с названием ID приложения и защитный ключ. Записываем куда нибудь эти данные. Больше ничего в вкладках я не делал. Состояние приложения оставил в положении отключено. Жмём сохранить настройки. Всё, мы создали приложение вконтакте.
Получение токена (access_token) api вк
Https://oauth.vk.com/authorize?client_id= &display=[вид окна] &redirect_uri=https://oauth.vk.com/blank.html&scope=[права приложения] &response_type=token&v=5.52
- client_id - ID нашего приложения, полученный раньше.
- display - вид окна, в котором будет происходить авторизация. Может быть page, popup, touch и wap
- scope - права доступа нашего приложения относительно данных пользователя. О правах поподробнее ниже.
Права приложения вк относительно заданного пользователя могут задаваться в текстовом и цифровом виде. В текстовом это будет выглядеть так scope=friends,messages,groups . Этой строкой кода мы разрешили приложению vk доступ к друзьям, сообщениям и группам пользователя. Так же права задаются и в цифровом виде. Для каждого правила есть битовая маска и сумма этих масок и будет разрешать приложению определённые действия. Например право friends(+2), messages(+4096), groups(+262144), в итоге сумма битовых масок будет 266242 и код scope=266242 будет аналогом scope=friends,messages,groups . Отдельное внимание хочу уделить праву offline . Установка этого права делает получаемый нами токен бесконечным. Если это право не задать через определённое время токен нужно будет получать снова. Подробнее о правах приложения вк можно почитать здесь . В итоге давайте составим адрес для получения токена приложению с правами доступа к друзьям, сообщениям и группам пользователя, а так же с бессмертным токеном. Id приложения пусть будет 123456. Данный адрес будет выглядеть так:
Https://oauth.vk.com/authorize?client_id=123456&display=page&redirect_uri=https://oauth.vk.com/blank.html& scope=friends,messages,groups,offline&response_type=token&v=5.52
Подтверждаем действие и попадаем на страницу с предупреждением, из адресной строки браузера берём наш полученный токен. Это будет после #access_token= , код expires_in=0 говорит нам что токена (access_token) api вк бессмертный. Соответственно user_id= это id пользователя, для которого мы получили токен.
Зайдём в настройки аккаунта во вкладку настройки приложений и увидим наше приложение.
Теперь у нас всё готово для работы с апи вконтакте.
Примеры работы с api vk
Для работы с api вк я использую язык программирования php. Поэтому и примеры я буду приводить на php. Для того, что бы выполнить какое либо действие, нам нужно послать запрос к api vk. Запрос мы можем послать и через адресную строку браузера. Тоесть запрос это есть определённый урл адрес с заданными в нём определёнными параметрами. Синтаксис составления такого урл описан ниже.
Https://api.vkontakte.ru/ method/[ВЫЗЫВАЕМЫЙ МЕТОД]?[ПАРАМЕТРЫ ВЫЗЫВАЕМОГО МЕТОДА]
Список методов api vk находится здесь .Больше пока заострять на этом внимания не будем, потом на реальных примерах всё станет ясно. Осталось только разобраться как запрос к апи вконтакте отправить средствами php. Для этого будем использовать php функцию file_get_contents , а так же функцию json_decode так как ответ от сервера мы получим в формате json. Вот шаблон выполнения запроса к вк на php.
$result=json_decode(file_get_contents("https://api.vkontakte.ru/ method/[ВЫЗЫВАЕМЫЙ МЕТОД]?[ПАРАМЕТРЫ ВЫЗЫВАЕМОГО МЕТОДА]"));
ну а теперь несколько примеров работы с апи vk
$userid=12345; $mytoken=56789; /*вернёт объект с значениями пола и дня рождения пользователя*/ $request_params = array("user_id" => $userid, "fields" => "sex", "fields" => "bdate"); $get_params = http_build_query($request_params); $result = json_decode(file_get_contents("https://api.vk.com/method/users.get?". $get_params)); /*проверка пользователя на бан вк*/ $request_params = array("user_id" => $user_id, "fields" => "deactivated"); $get_params = http_build_query($request_params); $result = json_decode(file_get_contents("https://api.vk.com/method/users.get?". $get_params)); if(isset($result->response->deactivated)){ echo "Страница заморожена или удалена"; } /*отправим сообщение пользователю с user_id=222222*/ $mesage="Привет, как дела?"; //кодируем строку $msg=urlencode($mesage); $result = json_decode(file_get_contents("https://api.vkontakte.ru/method/ messages.send?user_id=222222& message=".$msg."&access_token=".$mytoken)); /*приглосим в друзья пользователя с user_id=222222*/ $mesage="Давайте дружить"; $msg=urlencode($mesage); $result=json_decode(file_get_contents("https://api.vkontakte.ru/ method/friends.adduser_id=222222& text=".$msg."&access_token=".$mytoken));
Методов у апи много, так что советую читать документацию. Конечно запросы не всегда выполняются правильно и возвращают коды ошибок. Ошибки можно посмотреть здесь . Так что вот так вот просто можно подключиться к api vk и автоматизировать свои действия в контакте.
Работать с API ВКонтакте доводилось многим из нас, и каждый может сказать: работать с ним напрямую неудобно. Разумеется, было написано множество библиотек, предоставляющих удобный интерфейс работы с ним. Их можно и даже нужно использовать для облегчения работы и ускорения разработки. Сегодня tproger представляет подборку библиотек, набравших на GitHub больше всего звездочек и форков, для почти всех самых популярных ныне языков.
Java
Недавно Вконтакте выпустили официальный SDK для работы с API средствами Java. Страница проекта на GitHub содержит множество примеров, вот один из них, для публикации фотографии на странице пользователя:
PhotoUpload serverResponse = vk.photos().getWallUploadServer(actor).execute();
WallUploadResponse uploadResponse = vk.upload().photoWall(serverResponse.getUploadUrl(), file).execute();
List
C#
InTouch - кроссплатформенная библиотека для С#, которая весьма активно развивается . На момент публикации заявлена полная совместимость с версией 5.57 VK API. Вот пример работы с библиотекой:
Var clientId = 12345; // API client Id var clientSecret = "super_secret"; // API client secret var client = new InTouch(clientId, clientSecret); // Authorization works only in Windows (and WinPhone) Store Apps // otherwise you"ll need to set received "access_token" manually // using SetSessionData method. await client.Authorize(); // Gets a list of a user"s friends. var friends = await client.Friends.Get(); if (friends.IsError == false) { ShowFriendsList(friends.Data.Items.Where(friend => friend.Online)); } client.Dispose();
Или даже короче:
Using (var client = new InTouch(12345, "super_secret")) { await client.Authorize(); var friends = await client.Friends.Get(); // ... }
Node.js
Node-vkapi - современная библиотека для JavaScript, основанная на промисах. Она доступна так же в npm:
Npm install node-vkapi --only=prod --save
Вот пример кода, который публикует текст на стену пользователя с помощью node-vkapi:
Const VKApi = require("node-vkapi"); const VK = new VKApi({ app: { id: 1234567890, secret: "app-secret-key" }, auth: { login: "+79871234567", pass: "password123" } }); VK.auth.user({ scope: ["audio", "photos", "friends", "wall", "offline"] }).then(token => { return VK.call("wall.post", { owner_id: token.user_id, friends_only: 0, message: "Post to wall via node-vkapi" }).then(res => { // wall.post response return "https://vk.com/wall" + token.user_id + "_" + res.post_id; }); }).then(link => { // returned data from previous .then console.log("Post was published: " + link); }).catch(error => { // catching errors console.log(error); });
С++
VK API Lib - небольшая библиотека для работы API, написанная на чистом C++. Из зависимостей требуется только Curl. Библиотека предоставляет базовый класс VK::Client с методами авторизации и выполнения запросов к API.
На основе его вы можете создавать свои классы для работы с разделами. В примере приведен класс VK::Messages . Базовый пример использования:
#include "src/api.h" ... VK::Client api; if(api.auth(login, pass, access_token)) { cout << "Auth ok" << endl; cout << "Access token: " << api.access_token() << endl << endl; cout << api.call("wall.post", "owner_id=12345&message=Test"); } else{ cout << "Auth fail" << endl; }
Python
В настоящее время библиотека достаточно активно развивается, однако до этого в её разработке был перерыв примерно на год. Всегда хочется использовать актуальные инструменты, поэтому стоит упомянуть и другую библиотеку для Python . Вот как выглядит загрузка фотографии на сервер с её помощью (комментарии сохранены):
Import vk_api def main(): """ Пример: загрузка фото """ login, password = "[email protected]", "mypassword" vk_session = vk_api.VkApi(login, password) try: vk_session.authorization() except vk_api.AuthorizationError as error_msg: print(error_msg) return """ В VkUpload реализованы методы загрузки файлов в ВК. (Не все, если что-то понадобится - могу дописать) """ upload = vk_api.VkUpload(vk_session) photo = upload.photo(# Подставьте свои данные "D:/downloads/tube.jpg", album_id=200851098, group_id=74030368) vk_photo_url = "https://vk.com/photo{}_{}".format(photo["owner_id"], photo["id"]) print(photo, "\nLink: ", vk_photo_url) if __name__ == "__main__": main()
PHP
Библиотека на PHP, использующая, по словам автора, «сахалинские технологии», чтобы облегчить труд разработчика. Написана в ООП-стиле. Одна из самых крутых ее фич - генерация на основе запроса на PHP готового кода для специального метода ВК execute.
Пример просмотра последних 200 сообщений:
//MESSAGES
$data = $vk->request("messages.get", ["count" => 200]);
$userMap = ;
$userCache = ;
$user = new \getjump\Vk\Wrapper\User($vk);
$fetchData = function($id) use($user, &$userMap, &$userCache)
{
if(!isset($userMap[$id]))
{
$userMap[$id] = sizeof($userCache);
$userCache = $user->get($id)->response->get();
}
return $userCache[$userMap[$id]];
};
//REQUEST WILL ISSUE JUST HERE! SINCE __get overrided
$data->each(function($key, $value) use($fetchData) {
$user = $fetchData($value->user_id);
printf("[%s] %s
", $user->getName(), $value->body);
return;
});
Ruby
vkontakte_api - ruby-адаптер для ВКонтакте API. Он позволяет вызывать методы API, загружать файлы на сервера ВКонтакте, а также поддерживает все 3 доступных способа авторизации (при этом позволяя использовать стороннее решение).
Работать с ним можно, например, так:
# создаем клиент @vk = VkontakteApi::Client.new # и вызываем методы API @vk.users.get(uid: 1) # в ruby принято использовать snake_case в названиях методов, # поэтому likes.getList становится likes.get_list @vk.likes.get_list # также названия методов, которые возвращают "1" или "0", # заканчиваются на "?", а возвращаемые значения приводятся # к true или false @vk.is_app_user? # => false # если ВКонтакте ожидает получить параметр в виде списка, # разделенного запятыми, то его можно передать массивом users = @vk.users.get(uids: ) # большинство методов возвращает структуры Hashie::Mash # и массивы из них users.first.uid # => 1 users.first.first_name # => "Павел" users.first.last_name # => "Дуров" # если метод, возвращающий массив, вызывается с блоком, # то блок будет выполнен для каждого элемента, # и метод вернет обработанный массив fields = [:first_name, :last_name, :screen_name] @vk.friends.get(uid: 2, fields: fields) do |friend| "#{friend.first_name} "#{friend.screen_name}" #{friend.last_name}" end # => ["Павел "durov" Дуров"]
Perl
Простенькая, полностью асинхронная библиотека AnyEvent::VK , выполняющая все запросы по https. По сути является клиентом. Автор рекомендует использовать Async::Chain для комбинирования вложенных колбеков.
Use AnyEvent; use AnyEvent::VK; use Data::Dumper; my $vk = AnyEvent::VK->new(app_id => "Your APP ID", email => "Email/Mobile of user", password => "User Password", scope => "Application permissions",); # or my $vk = AnyEvent::VK->new(app_id => "Your APP ID", email => "Email/Mobile of user", password => "User Password", scope => "Application permissions", token => "Your access_token", expires => "Token expires timestamp", user_id => "user_id",); my $cv = AE::cv; $cv->begin; $vk->auth(sub { my $success = shift; if ($success) { my ($token, $expires_in, $user_id) = @_; $vk->request("users.get", { user_ids => "1", fields => "bdate,sex,city,verified", }, sub { my $response = shift; if ($response) { my $meta = shift; say Dumper($response); } else { my $meta = shift; warn "Request failed"; say Dumper($meta); } $cv->end; }); } else { my ($stage, $headers, $body, $cookie) = @_; warn "Auth failed"; say Dumper(@_); } $cv->end; }); $cv->recv;
Для мобильной разработки
Android (Java)
Еще одна официальная библиотека , на этот раз - для Android. Написана на Java и позволяет сильно упростить работу с API ВКонтакте из этого языка.
Пример отправки запроса:
Request.executeWithListener(new VKRequestListener() { @Override public void onComplete(VKResponse response) { //Do complete stuff } @Override public void onError(VKError error) { //Do error stuff } @Override public void onProgress(VKRequest.VKProgressType progressType, long bytesLoaded, long bytesTotal) { //I don"t really believe in progress } @Override public void attemptFailed(VKRequest request, int attemptNumber, int totalAttempts) { //More luck next time } });
Windows Phone (C#)
Последняя в этом списке официальная разработка: написанная на C# базовая библиотека для разработки на WP, похожая по функциональности на свои аналоги под Android и iOS.
Отправка запроса на список друзей:
Private void GetUserInfoButton_Click(object sender, RoutedEventArgs e)
{
VKRequest.Dispatch>(new VKRequestParameters("users.get",
"fields", "photo_200, city, country"),
(res) =>
{
if (res.ResultCode == VKResultCode.Succeeded)
{
VKExecute.ExecuteOnUIThread(() =>
{
var user = res.Data;
userImage.Source = new BitmapImage(new Uri(user.photo_200, UriKind.Absolute));
userInfo.Text = user.first_name + " " + user.last_name;
});
}
});
}
iOS (Objective C)
Официальная библиотека от ВКонтакте, предназначенная для написания приложений под iOS. Написана на Objective-C.
Пример кода с отправкой запроса:
; } else { NSLog(@"VK error: %@", error); } }];
Для хипстеров
Rust
На Github есть библиотека и для этого языка - vkrs . Она не слишком активно развивается, но это уже хоть что-то. Вот так она выглядит в деле:
Extern crate vkrs;
use std::{env, io};
use vkrs::*;
fn main() {
let api = api::Client::new();
let oauth = api.auth(env::var("VK_APP_ID").unwrap(),
env::var("VK_APP_SECRET").unwrap());
let auth_uri = oauth.auth_uri(auth::Permission::Audio).unwrap();
// Or if you want to get permissions for specific request:
// let auth_uri = oauth.auth_uri_for::
Социальные сети уже давно стали частью нашей жизни. Практически у каждого пользователя есть персональная страничка в таких сервисах как вконтакте, фейсбук, твиттер и другие. И поскольку такие сервисы очень популярны в наше время, они сделали специальное API . При помощи методов которые предоставляет API конкретной системы, вы можете получить список пользователей, список фотографий, даже найти всех пользователей в определенной области на карте, список действий очень большой.
Однако, не каждый пользователь может получить доступ к этим данным. Большинство сервисов требуют регистрации и создания специального приложение, которое и будет работать с методами определенного сервиса.
Итак, сегодня мы рассмотрим пример работы с VK API, в котором будем получать список пользователей c именем «Маша» в городе «Москва». Будем искать Маш в Москве.:)
Первым делом нам нужно создать приложение. Для создания приложения переходим по ссылке (https://new.vk.com/dev -> Создать приложение ).
Вводим название и поскольку мы разбираем пример на PHP используя веб-сервер, выбираем тип приложения — «Веб-сайт «. Указываем адрес вашего сайта и базовый домен(если делаете на локальном веб-сервере, пишем http://localhost ). Нажимаем кнопку «Подключить сайт» и ваше приложение создано, часть пути пройдена.
Приступаем к программированию. Существует множество классов для работы с API сайтов, однако мы будем писать все сами, чтобы понять основные принципы работы.
Для получения доступа к методам API, нужно выполнить несколько шагов:
- Авторизировать пользователя;
- Получить ключ доступа;
- Получить access_token;
- Выполнить запрос к методу;
4 простых шага, но на деле немного сложнее.
Авторизируем пользователя:
session_start(); $client_id = "1234567"; $redirect_uri = "http://localhost"; $display = "page"; $scope = "friends,groups"; $response_type = "code"; $auth_uri = "https://oauth.vk.com/authorize?client_id={$client_id}&display={$display}& redirect_uri={$redirect_uri}&scope={$scope}&response_type={$response_type}&v=5.52";Разбираем по пунктам, что же тут написано:
- $client_id — идентификатор вашего приложения, присвоенный системой;
- $redirect_uri — страница на которую будет перенаправлен пользователь после успешной авторизации;
- $display — как отображается страница входа, в данном случае это будет отдельная страница;
- $scope — разрешения для приложения, указывать через запятую. Полный список ;
- $response_type — тип ответа, в данном случае будет предоставлен JSON;
- $auth_uri — формируем строку для авторизации пользователя, передвая нужные параметры;
Получаем access_token:
if(isset($_GET["code"])){ $code = $_GET["code"]; $client_secret = "you_application_password"; $acces_uri = "https://oauth.vk.com/access_token"; $fields = array("client_id" => $client_id, "client_secret" => $client_secret, "redirect_uri" => $redirect_uri, "code" => $code); $acces_uri .= "?client_id={$fields["client_id"]}&"; $acces_uri .= "client_secret={$fields["client_secret"]}&"; $acces_uri .= "redirect_uri={$fields["redirect_uri"]}&"; $acces_uri .= "code={$fields["code"]}"; $res = file_get_contents($acces_uri); $response_string = json_decode($res,true); $_SESSION["token"] = $response_string["access_token"];Тут все довольно просто, записываем полученный код в переменную $code , формируем ссылку с нужными нам данными — $access_uri . Далее при помощи функции file_get_contents выполняем запрос и в ответ получаем JSON объект который сразу же декодируем в массив. В конце просто полученный токен записываем в переменную сессии. Не очень хороший подход, лучше сразу писать в базу данных, однако цель этого руководства не в этом.
$client_secret — «Защищенный ключ » вашего приложения, без него работать не будет 🙂
Вот теперь у нас уже все готово для того, чтобы получить список пользователей с определенного города. Алгоритм работы очень простой: сформировать запрос, выполнить, получить данные.
Формируем:
If (isset($_SESSION["token"])) { $name = "Маша"; $url = $url = "https://api.vk.com/method/users.search?city_id=1&q={$name}&count=1000&access_token={$_SESSION["token"]}"; $res = file_get_contents($url); $users_data = json_decode($res,true); $users_count = array_shift($users_data["response"]); $users_list = $users_data["response"]; }
Данный запрос вернет нам 1000 пользователей с Москвы. На выходе мы получим количество затронутых записей и ассоциативный массив с пользователями записанный в переменную $users_list , который уже можем использовать на свое усмотрение.
Единственный нюанс в том, что API не позволяет выбрать большее количество пользователей, даже если использовать параметр offset в строке запроса. К сожалению такое ограничение в VK API.
Полный список параметров VK API для запроса можете посмотреть в
Привет, Хабр!
В своё время, бороздя просторы интернета на предмет рационального использования API Вконтакте, я не смог найти чего-то вразумительного, единственные библиотеки, которые были найдены мной были реализованы без использования каких-либо общепринятых практик и без красивого кода. Я решил исправить, сложившееся недоразумение и написал свою библиотеку для работы с API Вконтакте.
Животрепещущие подробности и подходы под хабракатом.
Так уж сложилось, что API Вк, реализован довольно хорошо, за исключением некоторых не логичных моментов, о которых я упомяну позднее. Но речь, сегодня не о качестве, а о конкретном применении.
Сразу необходимо сделать оговорку, помимо описания, я буду приводить куски рабочего кода к моей библиотеке, ссылку на которую я приведу в конце статьи. Библиотека работает на последней стабильной версии 5.5, если вырезать генераторы из пакетного получения, то должно работать на 5.4.
- Серверная авторизация(т.н. авторизация сайтов)
- Клиентская авторизация(Standalone)
- Авторизация сервера приложения
Алгоритм получения в первом случае сводится к выполнению следующих пунктов:
- Мы выводим ссылку для авторизации пользователя, которую форматируем в соответствии с документацией
- Пользователь переходит по ней и авторизуется
- Пользователя перенаправляют на REDIRECT_URI нашего приложения с GET параметром code
- Наше приложение должно выполнить запрос к API содержащий code, чтобы получить ключ доступа пользователя
- API отвечает, либо с объектом, содержащим ключ доступа, либо ошибкой.
Пример кода, с помощью которого можно провернуть это не хитрое дело.
$auth = getjump\Vk\Auth::getInstance(); $auth->setAppId("3470411")->setScope("SCOPE")->setSecret("SECRET CODE")->setRedirectUri("http://localhost/test.php"); $token=$auth->startCallback(); printf("LINK", $auth->getUrl());
Предполагается, что наш домен это localhost, а текущий файл test.php. Если, всё прошло хорошо, то в нашей переменной $token, будет содержаться ключ доступа пользователя, который прошёл авторизацию.
С момента, когда мы имеем ключ доступа, мы можем выполнять запросы к API . Общая логика запросов проста, вы передаёте специально сформированный запрос на URL API. Запрос должен содержать, название метода и аргументы.
api.vk.com/method/METHOD_NAME?PARAMETERS&access_token=ACCESS_TOKEN
Список методов , это одна из богатых вещей API. В нём вы можете встретить методы, которые не требуют ключ доступа для своей работы, следовательно вызывать их вы можете, не получая его.
При использовании библиотеки нам необходимо создать базовый объект, например так:
$vk = getjump\Vk\Core::getInstance()->apiVersion("5.5")->setToken($token);
Пара примеров запросов с использованием библиотеки:
Через анонимную функцию в each, пройдёт ровно 100 объектов, содержащих данные о пользователях от 1 до 100. Заметьте, если мы уберём вызов функции, то не произойдёт никакого запроса, всё потому что вернётся объект, у которого переопределены магические методы __call и __get, что позволяет нам делать запрос, когда нам это действительно необходимо.
$vk->request("users.get", ["user_ids" => range(1, 100)])->each(function($i, $v) {
if($v->last_name == "") return;
print $v->last_name . "
";
});
Одна из вещей, что открывает, нам использование генераторов - пакетное получение. То есть, мы получаем данные только тогда, когда они нам нужны. Следующий пример, позволит нам получить ВСЕ наши сообщения, запросами по 100. Будьте внимательны, метод требует от вас прав для messages, Standalone приложения, такой-же авторизации и соответственно передачи ключа доступа.
foreach($vk->request("messages.get")->batch(100) as $data)
{
$data->each(function($i, $m) {
if(isset($m->body)) print $m->body . PHP_EOL;
});
}
Хороший метод, который можно отыскать в API - execute . Он принимает параметр code в качестве аргумента, code - некий псевдо JavaScript, который позволяет нам выполнять наш код на стороне сервера, так-же он позволяет выполнять хранимые процедуры, которые мы можем создать при редактировании нашего приложения.
Эту вещь я не смог обойти стороной и реализовал её в библиотеке. В двух словах, она позволяет выполнить несколько запросов, как один. Смотрите следующий пример кода.
$js1 = $vk->request("messages.get", ["count" => 200, "offset" =>0 * 200])->toJs(); // Вернёт объект типа VkJs $js2 = $vk->request("messages.get", ["count" => 200, "offset" =>1 * 200])->toJs(); $js3 = $vk->request("messages.get", ["count" => 200, "offset" =>2 * 200])->toJs(); $js4 = $vk->request("messages.get", ["count" => 200, "offset" =>3 * 200])->toJs(); $js1 ->append($js2) // Мы прибавляем js2 к js1 ->append($js3) ->append($js4) ->execute() // Мы хотим выполнить это(на самом деле это вернёт RequestTransaction) ->response //Запрос исполнится только сейчас ->each(function($i, $v) //Первая анонимная функция нужна для обхода всех элементов массива полученного от execute(массив из 4 элементов, 4 запроса) { $v->each(function($c, $d) { // Следующая для прохода всех 200 сообщений в каждом массиве if(isset($d->body)) print $d->body; //Выведем сообщение если такое поле присутствует }); });
Как и обещал, одно из тех недоразумений, которое вы можете встретить в текущей версии API(5.21), метод