Документация по Open API на vkontakte.ru написана и структурирована так, что невозможно найти нужную информацию. Задача следующая. Успешно проведена аутентификация пользователя через Open API (Javascript), есть все необходимые токены. Требуется запросить у ВКонтакте личные данные пользователя — полное имя и ник-нейм. Ну и, если возможно, то еще e-mail.
Как получить информацию о пользователе через Javascript API ВКонтакте?
Лучший ответ:
У ВКонтакте есть два класса API:
- Open API (javascript).
- Обычные API (не javascript).
На чистом Open API по сути можно сделать только авторизацию пользователя. Всё остальное делается на олдскульном API. Чтобы вызывать методы обычного API в Javascript Open API предусмотрен специальный мост.
Итак, если произведена инициализация:
<div id="vk_api_transport"></div>
<script src="http://vkontakte.ru/js/api/openapi.js" type="text/javascript" charset="windows-1251"></script>
<script type="text/javascript">
VK.init({
apiId: ВАШ_API_ID,
nameTransportPath: "<путь от корня сайта>/xd_receiver.html"
});
</script>
...и авторизация пользователя:
VK.Auth.login(function(response) {
if (response.session) {
/* Пользователь успешно авторизовался */
if (response.settings) {
/* Выбранные настройки доступа пользователя, если они были запрошены */
}
} else {
/* Пользователь нажал кнопку Отмена в окне авторизации */
}
});
То можно использовать мост для вызова API. Этот мост представлен объектом VK.Api. Пример использования:
VK.Api.call('getVariable', {key: 1281}, function(r) {
if(r.response) {
alert('Привет, ' + r.response);
}
});
Именно метод VK.Api.call
используется для вызова любого метода стандартного (не Open) API. Для запроса персональных данных (в примере запрашивается имя, фамилия, никнейм, дата рождения) можно использовать такой код:
function getUserProfileData(uid) {
var code;
code = 'return {'
code += 'me: API.getProfiles({uids: "' + uid + '", fields: "first_name, last_name, nickname, bdate"})[0]';
code += '};';
VK.Api.call('execute', { 'code': code }, getUserProfileDataCallback);
}
function getUserProfileDataCallback(data) {
data.response.me.first_name; // имя
data.response.me.last_name; // фамилия
data.response.me.nickname; // никнейм
data.response.me.bdate; // дата рождения
}
Новые ответы
Класс для вызова серверных методов (PHP) http://vkontakte.ru/source/APIServerPHPClass.zip
Компонент для работы с API (AS3) http://vkontakte.ru/source/APIConnection.zip