execute

Универсальный метод, который позволяет запускать последовательность других методов, сохраняя и фильтруя промежуточные результаты.

Этот метод можно вызвать с ключом доступа пользователя.

Этот метод можно вызвать с ключом доступа сообщества.

Параметры

code

string

Код алгоритма в VKScript-формате, похожем на JavaSсript или ActionScript (предполагается совместимость с ECMAScript). Алгоритм должен завершаться командой return %выражение%. Операторы должны быть разделены точкой с запятой.

Внутри code может содержаться не более 25 обращений к методам API.

func_v

string

Пример значения параметра code

VKScript// Присваивает переменной a результат поиска по фотографиям с данными параметрами. var a = API.photos.search({"q":"Nature","count":3}); // Присваивает переменной b список владельцев найденных фотографий. var b = a.items@.owner_id; // Присваивает переменной с данные о страницах владельцев из списка b. var c = API.users.get({"user_ids":b}); // Возвращает список фамилий из данных о владельцах. return c@.last_name; // Пример цикла. var a = 1; var b = 10; while (b != 0) {     b = b - 1;     a = a + 1; }; return a;

То же самое можно более коротко записать так:

VKScriptreturn API.users.get({"user_ids": API.photos.search({"q":"Beatles", "count":3}).items@.owner_id})@.last_name;

Поддерживаются:

  • арифметические операции,
  • логические операции,
  • создание массивов и списков ([X,Y]),
  • parseInt и parseDouble,
  • конкатенация (+),
  • конструкция if,
  • фильтр массива по параметру (@.),
  • вызовы методов API, параметр length,
  • циклы, используя оператор while,
  • методы Javascript: slice, push, pop, shift, unshift, splice, substr, split,
  • оператор delete,
  • присваивания элементам маcсива, например: row.user.action = "test",
  • поиск в массиве или строке — indexOf, например: "123".indexOf(2) = 1, [[1, 2, 3]].indexOf(3) = 2. Возвращает -1, если элемент не найден.

В данный момент не поддерживается создание функций.

Обращение к элементам массива с результатом какого-либо метода всего должно основываться на структуре JSON, а не XML. Например, правильным обращением является:

VKScriptAPI.photos.search({"q":"Nature","count":3}).items@.owner_id;

А не:

VKScriptAPI.photos.search({"q":"Nature","count":3}).items@.photo@.owner_id;

Метод execute также может использоваться и для получения результатов нескольких не связанных между собой запросов.

Пример значений параметра code

VKScriptreturn [API.friends.get(), API.status.get()]; return {"friends": API.friends.get(), "status": API.status.get()};

В методе execute поддерживаются логические операции < (меньше), > (больше), <= (меньше или равно), >= (больше или равно), == (равно) и != (не равно). В данный момент поддерживаются сравнения двух строк, двух чисел и строки и числа (в этом случае строка приводится к числу).

Результат логического выражения может быть использован в управляющей конструкции if...[[else...]]:

Пример значения параметра code

VKScriptvar posts = API.wall.get({"count": 1}); if (posts.count<0) { return {"post": null, "copy_owner": null}; } else { var post = posts.items[0]; var copy_owner=null; if (post.copy_history[0]){ if (post.copy_history[0].owner_id > 0) { copy_owner = API.users.get({"user_id": post.copy_history[0].owner_id})[0]; } else if (post.copy_history[0].owner_id < 0) { copy_owner = API.groups.getById({"group_ids": -post.copy_history[0].owner_id})[0]; } return {"post": post, "copy_owner": copy_owner}; } else { return {"post": post, "copy_owner": null}; } }

Результат

Возвращает данные, запрошенные алгоритмом. При работе с методом execute структура ответа в XML ближе к JSON и может незначительно отличаться от стандартного представления других методов.

Обратите внимание: версия API, указанная при вызове execute, не применяется автоматически к методам, вызываемым внутри code.

Обратите внимание! Существует ограничение на объём ответа. В случае, если данные в ответе занимают больше 5 МБ, вернётся ошибка 13 с комментарием "response size is too big".

Коды ошибок

12
Unable to compile code

В ходе выполнения могут произойти общие ошибки.