Как создать приложение для контакта (ВКонтакте). Первый запрос — как получить список друзей
вКонтакте API

Привет, друзья. В этом посте я расскажу о том как отправить первый запрос серверу ВКонтакте, получить и обработать ответ от него. Запрашивать будем список друзей определённого пользователя. Список того, что нужно знать для написания приложения для контакта в этой статье. Приступим.

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

Зайдите в свой аккаунт вконтакте. В самом низу страницы нажмите на ссылку «разработчикам», ну а там уже нажмите на кнопку «Создать приложение» и следуйте инструкциям, только не забудьте выбрать Flash/IFrame приложение.

Теперь займёмся написание самого приложения. Запустите Adobe Flash, я использую Flash CS5, но принципиальных отличий от CS4 нет. Создайте пустое приложение ActionScript 3.0 (File->New->ActionScript3.0->OK)

Хочу оговориться, что в этой статье код будем размещать в кадре, так как он не большой, но вообще в ActionScript 3.0 код всегда следует размещать в отдельных файлах.

И так, сейчас у нас чистый слой. Создадим на нём 2 динамических текстовых поля и кнопку. В одно текстовое поле будут выводиться id друзей а в другое их имена и фамилии, при нажатии на кнопку будет отправляться запрос. Instance Name для текстовых полей id_output и name_output соответственно и для кнопки go_button. Instance Name – это имена переменных, через которые мы будем обращаться к элементам сцены в коде.

Теперь всё готово, чтобы написать первые строки кода. Выберите первый (и единственный) кадр нашей сцены и нажмите F9, откроется редактор ActionScript.
Не забывайте, что код мы будем писать самостоятельно, поэтому убедитесь, что отключен упрощенный режим редактора. Кроме того для удобства можете скрыть левую панель с операторами, так как она нам не нужна. Редактор должен выглядеть вот так:

Теперь всё готово, чтобы написать первые строки кода. Выберите первый (и единственный) кадр нашей сцены и нажмите F9, откроется редактор ActionScript.Не забывайте, что код мы будем писать самостоятельно, поэтому убедитесь, что отключен упрощенный режим редактора. Кроме того для удобства можете скрыть левую панель с операторами, так как она нам не нужна. Редактор должен выглядеть вот так:

Сейчас мы должны сохранить наше приложение. Создайте для него отдельную папку и сохраните его туда, например D:\VKAPI\GetFriends\GetFrinds.fla

Для начала нам понадобится подключить все необходимые библиотеки. В этом приложении понадобится только библиотека MD5, зачем она нужна расскажу немного ниже. Но дело в том, что Flash не включает в себя эту библиотеку и нам придётся использовать стороннюю, не проблема, скачать её можно по этой ссылке.

Создайте в папке, куда вы сохранили приложение новую папку libs (имя можете выбрать другое) и закиньте в неё скачанный файл MD5.as.

Теперь пишем первую строчку кода:

import libs.MD5;

Таким образом мы подключили библиотеку MD5.

Далее нам нужно объявить все необходимые переменные:

var URLLoad:URLLoader = new URLLoader();   // загрузчик для загрузки id
var URLLoad_names:URLLoader = new URLLoader(); // загрузчик для загрузки имён
var XMLdata:XML; //в эту переменную будет сохраняться ответ сервера в формате XML
var v:URLVariables = new URLVariables(); //в этой переменной будут храниться данные, которые мы отправляем на сервер контакта
var API_ID:String = "********"; //id вашего приложения
var VIEWER_ID:String = "*******"; //id пользователя, который просматривает приложение. Данная переменная должна браться из переменных браузера flash_vars либо из контейнера контакта, но сейчас просто впишите в неё свой id
var API_SECRET:String = "APFFhywt9K"; //секретный код, его можно просмотреть на странице настроек приложения в контакте
var API_URL:String = "http://api.vkontakte.ru/api.php"; //адрес скрипта, которому мы будем отправлять запросы
var TEST_MODE:String = "1"; //режим тестирования, 1 – включен, 0 – отключён.

Теперь нужно назначить слушателя для нашей кнопки, чтобы реагировать на её нажатие, так и делаем:

go_button.addEventListener(MouseEvent.CLICK, ButtonGO);
Теперь напишем саму функцию ButtonGO:
function ButtonGO(e:MouseEvent):void
{
	var sig = MD5.encrypt(VIEWER_ID+"api_id="+API_ID+"method=getFriendstest_mode="+TEST_MODE+"v=2.0"+API_SECRET); //вот тут то нам и пригодилась библиотека MD5. Дело в том, что одним из требований ВКонтакте API является наличие в запросе контрольной суммы всех переменных запроса, упорядоченных в алфавитном порядке и закодированных по алгоритму MD5, это нужно для защиты запросов от перехватов и изменения.
	var URLReq:URLRequest = new URLRequest(API_URL); //создаём новый запрос и инициализируем его адресом скрипта контакта

//Далее создаём все переменные, которые нужны для запроса
	v.api_id = API_ID;
	v.v = "2.0";
	v.method = "getFriends"; //здесь указываем какой метод мы используем, так как в данный момент нам нужно получить список id всех наших друзей, то используем метод getFriends
	v.test_mode = TEST_MODE;
	v.sig = sig;

	URLReq.data = v; //Добавляем все созданные переменные запросу
	URLReq.method = URLRequestMethod.POST; //Указываем метод отправки запроса

	URLLoad.load(URLReq); //Отправляем запрос на сервер
	URLLoad.addEventListener(Event.COMPLETE,OnLoadId); //добавляем слушателя, который отслеживает ответ с сервера и когда тот приходит вызывает функцию OnLoadId
}

И так, мы отослали запрос серверу и получили от него ответ. Теперь нам нужно его обработать, чем и занимается функция OnLoadId, давайте её напишем:

function OnLoadId(e:Event):void
{
	var uids:String = ""; //в эту переменную мы сохраним все idдрузей, чтобы потом с их помощью узнать их имена и фамилии
	XMLdata = new XML(URLLoad.data); //сохраняем пришедший с сервера ответ в XML переменную
	var len:Number = XMLdata.uid.length(); //узнаём, сколько же у нас друзей, то есть сколько id пришло с сервера в его ответе
// Запускаем цикл, который перебирает все пришедшие id и выводит их в нужное текстовое поле, кроме того формируется строка из этих id разделённых запятыми
	for(var i:Number=0;i

id друзей уже выведены, теперь осталось узнать их имена и фамилии. Для этого существует метод getProfiles, с помощью которого можно узнать любую информацию о пользователе, но нас сейчас интересуют только имя и фамилия, но вы можете добавить свои поля, посмотрев их список в описании этого метода здесь
var fields:String = "first_name,last_name"; // вот именно те поля, которые мы хотим узнать
	var sig = MD5.encrypt(VIEWER_ID+"api_id="+API_ID+"fields="+fields+"method=getProfilestest_mode="+TEST_MODE+"uids="+uids+"v=2.0"+API_SECRET);
	var URLReq:URLRequest = new URLRequest(API_URL);

	v.api_id = API_ID;
	v.v = "2.0";
	v.method = "getProfiles";
	v.test_mode = TEST_MODE;
	v.sig = sig;
//Как видите ниже для метода getProfile добавились ещё 2 переменные
	v.uids = uids;
	v.fields = fields;

	URLReq.data = v;
	URLReq.method = URLRequestMethod.POST;

	URLLoad_names.load(URLReq);
	URLLoad_names.addEventListener(Event.COMPLETE,OnLoadNames);
}

Теперь осталось лишь вывести имена и фамилии на экран, чем и займётся функция OnLoadNames, в ней нет ничего сложного, она просто перебирает XML данные и выводит их в текстовое поле:

function OnLoadNames(e:Event):void
{
	XMLdata = new XML(URLLoad_names.data);
	var len:Number = XMLdata.user.length();
	for(var i:Number=0;i

Вот и всё, в итоге, мы получили наше первое приложение, которое использует ВКонтакте API:

В следующие разы мы будем оформлять все функции API в отдельную библиотеку и будем просто подключать её к нужному приложению, но для первого раза, чтобы хоть немного разобраться как всё работает, я думаю, достаточно. Обязательно читайте официальную документацию по ВКонтакте API.

В конце приведу ещё раз код приложения полностью:
import libs.MD5;

var URLLoad:URLLoader = new URLLoader();
var URLLoad_names:URLLoader = new URLLoader();
var XMLdata:XML;
var API_ID:String = "1833756";
var VIEWER_ID:String = "9060138";
var API_SECRET:String = "APFFhywt9K";
var API_URL:String = "http://api.vkontakte.ru/api.php";
var TEST_MODE:String = "1";
var v:URLVariables = new URLVariables();

URLLoad.addEventListener(Event.COMPLETE,OnLoadId);
go_button.addEventListener(MouseEvent.CLICK, ButtonGO);

function OnLoadId(e:Event):void
{
	var uids:String = "";
	XMLdata = new XML(URLLoad.data);
	trace(XMLdata);
	var len:Number = XMLdata.uid.length();
	for(var i:Number=0;i

На сегодня всё, всем хорошего настроения, удачи !

Видео, которое всегда поднимает настроение =)

[youtube]http://www.youtube.com/watch?v=S1ZZreXEqSY[/youtube]

На сайте WATCHESHOP вы можете купить часы в москве

  • http://Сайт Руслан

    Тыц Тыц, я второй в твоем списке:)) Видос зачет:)

  • shram_

    5753db02f6421236cc651cd196b7e5ec006
    5753db02f6421236cc651cd196b7e5ec004
    что за коди??? это же не ас3))
    «В конце приведу ещё раз код приложения полностью:
    5753db02f6421236cc651cd196b7e5ec006
    На сегодня всё, всем хорошего настроения, удачи !
    Видео, которое всегда поднимает настроение =)» вот так пишется!

  • admin

    За коды прошу прощения, обновил плагин для его вывода, а он видимо кривой, завтра поправлю. А в чем моя ошибка в последнем предложении?

  • Алексей

    А где собственно код ?

  • IceWind

    Автор тема с кодами остается актуальной…

  • McJoker

    где ссылка на библиотеку?

  • Vova

    var len:Number = XMLdata.uid.length();
    for(var i:Number=0;i<len ;i++)
    {
    id_output.appendText(String(XMLdata.uid[i])+"\n");
    if(i==0)
    {
    uids+=String(XMLdata.uid[i]);
    }else
    {
    uids+=","+String(XMLdata.uid[i]);
    }
    }
    Можно намного короче:
    uids=XMLdata.uid.join(",");

    • snater

      Спасибо, забыл про эту функцию )

  • csander

    ну наконец-то нашёл нужный сайт, спасибо автору большое за инфу!!!

  • Mail

    у меня у одного код заканчиваетс так ?:

    function OnLoadId(e:Event):void
    {
    var uids:String = «»;
    XMLdata = new XML(URLLoad.data);
    trace(XMLdata);
    var len:Number = XMLdata.uid.length();
    for(var i:Number=0;i

    • Тимур

      Наверно у всех.

  • Иван

    Блин а продолжение???? Хочется еще с базой поработать…

  • Ы

    Урок просто ах**нный,но выложить можно было бы без косяков.

  • Тимур

    «скачать её можно по этой ссылке.» ты наверно издеваешься, да? по какой такой НЕ существующей ссылке нужно кликнуть? или это новый метод скрытия ссылок в тексте? настолько мощный, что сама ссылка перестаёт быть таковой? ссылку поставь на библиотеку!
    Не нужно отвечать — «гугло-яндекс в помощь!» — не помогут они это факт, поскольку НЕТ такой библиотеки, про крайней мере с тем названием, которое в уроке. А искать я, поверь, умею хорошо.