Open API, использование VK.Api.call,execute,вопросы

Создание Desktop-приложений, виджеты ВКонтакте для сайтов и публичных страниц, OAuth 2.0, Open API, Standalone
Ответить
fell
Сообщения: 3
Зарегистрирован: 10 фев 2011, 19:47

Open API, использование VK.Api.call,execute,вопросы

Сообщение fell »

Добрый день
Разбираюсь с API контакта. Возник такой вопрос. У нас есть такой метод VK.Api.call('execute','code':code,callback_func).
Чтобы вставить алгоритм в код используют стандартно

Код: Выделить всё

 function getInitData() {  var code;  code = 'return {'  code += 'me: API.getProfiles({uids: API.getVariable({key: 1280}), fields: "first_name,"bdate""})[0]';  code += '};'; 
Однако есть одно коварное поле в результатах, называется city и значение поля - число!. Чтобы достать название города, нужно использовать этот метод places.getCityById. То есть получается нужно сделать запрос
1. var city_number = API.getProfiles({uids: API.getVariable({key: 1280}), fields: "city""})[0].city // получим число
2. API.places.CityById(cids:city_number)[0].name // получим название города
и теперь нужно название города как то вставить в результирующий response. Все это какие то немыслимые костыли конечно. Однако пока только так. Как бы все это сделать ? кто сталкивался может ?
Может быть сделать второе поле объекта ? return {me:запрос, city : запрос} как то так ?
запрос такого вида API.places.CityById(cids:API.getProfiles({uids: API.getVariable({key: 1280}), fields: "city""})[0].city)[0].name
Тогда будет доступен, data.response.city, если я правильно все понимаю...

p.s. В доках есть такой пример использования code
// присваивает переменной a результат поиска по аудио с данными параметрами
var a=API.audio.search({"q":"Beatles","count":3});
// присваивает переменной b список владельцев найденных аудиозаписей
var b=a@.owner_id;
// присваивает переменной с данные о страницах владельцев из списка b
var c=API.getProfiles({"uids":b});
// возвращает список фамилий из данных о владельцах
return c@.last_name;

так и непонял как его использовать...То есть как это все занести в параметр...
fell
Сообщения: 3
Зарегистрирован: 10 фев 2011, 19:47

Re: Open API, использование VK.Api.call,execute,вопросы

Сообщение fell »

Проблема фактически так и решилась. Добавляете второе свойство к объекту, city: запрос. И в response можно будет обратиться к свойству r.response.city. Все было бы гораздо проще, если бы vkontakte писал в данных все же город, а не число.
Однко по использованию поля code, так и непонятно, как составить его с переменными, то что в p.s. у меня...
Аватара пользователя
Александр
Создатель сайта
Создатель сайта
Сообщения: 4574
Зарегистрирован: 27 сен 2009, 16:45

Re: Open API, использование VK.Api.call,execute,вопросы

Сообщение Александр »

Получить имя и дату рождения

Код: Выделить всё

API.getProfiles({uids: API.getVariable({key: 1280}), fields: "first_name,bdate"})
Получить название города

Код: Выделить всё

API.places.getCityById({cids:API.getProfiles({"uids":API.getVariable({key: 1280}), fields: "city"})@.city})@.name
Метод execute также может использоваться и для получения результатов нескольких не связанных между собой запросов.
http://vkontakte.ru/developers.php?o=-1&p=execute
Получаем значение двух этих запросов

Код: Выделить всё

[API.getProfiles({uids: API.getVariable({key: 1280}), fields: "first_name,bdate"}),API.places.getCityById({cids:API.getProfiles({"uids":API.getVariable({key: 1280}), fields: "city"})@.city})@.name]; 
Ответ такой:

Код: Выделить всё

{"response":[[{"uid":1,"first_name":"Павел","last_name":"Дуров","bdate":"10.10.1984"}],["Санкт-Петербург"]]}

С переменными так и будет:

Код: Выделить всё

var a=API.audio.search({"q":"Beatles","count":3});var b=a@.owner_id;var c=API.getProfiles({"uids":b});return c@.last_name;
slavito
Сообщения: 2
Зарегистрирован: 05 июл 2011, 15:14

Re: Open API, использование VK.Api.call,execute,вопросы

Сообщение slavito »

Код: Выделить всё

API.places.getCityById({cids:API.getProfiles({"uids":API.getVariable({key: 1280}), fields: "city"})@.city})@.name


а как это можно использовать в качестве фильтра пользователей по городам?
slavito
Сообщения: 2
Зарегистрирован: 05 июл 2011, 15:14

Re: Open API, использование VK.Api.call,execute,вопросы

Сообщение slavito »

спасибо, некорректно задал вопрос и уже разобрался сам 8-)
но вышеуказанная конструкция у меня не работает ибо не знаю как результат записать в переменную
Psijic
Сообщения: 4
Зарегистрирован: 18 сен 2012, 13:13

Re: Open API, использование VK.Api.call,execute,вопросы

Сообщение Psijic »

Александр, подскажите, а как забрать название города? Я вот, например, использовал в своем execute такой код:
'var cityid = API.friends.get({fields:"city"}); return {"places": API.places.getCityById({cids:cityid}), "friends_get": API.friends.get({fields:"first_name,last_name,photo,bdate"})};';

использую для получения друзей

Код: Выделить всё

vkData.friends_get[currItem].first_name;
а вот для города -непонятно, что

Код: Выделить всё

vkData.places[currItem].name
- не подходит

XML там схожий

Код: Выделить всё

<?xml version="1.0" encoding="utf-8"?><response> <places> </places> <friends_get></friends_get></response> 
Аватара пользователя
Александр
Создатель сайта
Создатель сайта
Сообщения: 4574
Зарегистрирован: 27 сен 2009, 16:45

Re: Open API, использование VK.Api.call,execute,вопросы

Сообщение Александр »

Psijic
Сервер api возвращает ответ в XML или JSON? Это можно узнать прочитав документацию и разобравшись в параметрах либо увидеть ответ сервера с помощью Charles.
Ответить