SULI COMPANY | Научно-технический сайт Сулико Асабашвили » Программирование » VK (Вконтакте) » Приложение, показывающее имя, фамилию, дату рождения, аватар
Информация к новости
  • Просмотров: 1641
  • Автор: sulicompany
  • Дата: 15-07-2012, 22:26
 (голосов: 0)
15-07-2012, 22:26

Приложение, показывающее имя, фамилию, дату рождения, аватар

Категория: Программирование » VK (Вконтакте)


ВКонтакте API 3.0. Пример простого приложения
ActionScript 3.0

Приложение показывает имя, фамилию, дату рождения и аватар пользователя просматривающего приложение.

Этот урок показывает как можно обратиться к api.vkontakte.ru/api.php или api.vk.com/api.php используя версию ВКонтакте API 3.0.
Пример подобного приложения, но с использование ВКонтакте API 2.0 здесь http://flapps.ru/forum/topic3.html

Этот урок для общего понимания как формируется сигнатура и как приложение взаимодействует с сервером api. Для взаимодействия с другими методами api проще будет использовать готовую официальную библиотеку APIConnection. Урок Использование APIConnection (getProfiles).

1. В Adobe Flash создаём Новый документ.
Добавляем на сцену UILoader с вкладки COMPONENTS (Window -> Components).
Изображение
Этот компонент можно разместить за пределами сцены или вообще удалить со сцены. В библиотеке нужно оставить.
Это необходимо сделать, чтобы Flash подключил нужные пакеты.


  1. package
  2. {
  3.     import flash.net.URLLoader;
  4.     import flash.net.URLRequest;
  5.     import flash.net.URLVariables;
  6.     import flash.net.URLRequestMethod;
  7.     import flash.display.*;
  8.     import flash.events.*;
  9.     import flash.text.TextField;
  10.     import fl.containers.UILoader;
  11.  
  12.     public class Main extends Sprite
  13.     {
  14.         private var api_id:Number = 1728947;// ID приложения
  15.         private var url_loader:URLLoader;
  16.         private var url_request:URLRequest;
  17.         private var viewer_id;
  18.         private var secret:String;
  19.         private var sid:String;
  20.         private var api_url:String;
  21.  
  22.         private var bdate_tf:TextField = new TextField();
  23.         private var name_tf:TextField = new TextField();
  24.         private var avatar:UILoader = new UILoader  ;
  25.  
  26.         public function Main():void
  27.         {
  28.             // получаем данные из flashVars
  29.             // id просматривающего приложение
  30.             viewer_id = LoaderInfo(root.loaderInfo).parameters.viewer_id;
  31.             // secret для генерации сигнатуры
  32.             secret = LoaderInfo(root.loaderInfo).parameters.secret;
  33.             // id сессии
  34.             sid = LoaderInfo(root.loaderInfo).parameters.sid;
  35.             // адрес API-сервиса
  36.             api_url = LoaderInfo(root.loaderInfo).parameters.api_url;
  37.  
  38.             // для тестирования локально, можно прописать их здесь (брать в исходном коде страницы с приложением)
  39.             /*
  40.             viewer_id = '1';
  41.             secret = 'abcd123456';
  42.             sid = 'abcd123456abcd123456abcd123456abcd123456abcd123456abcd1234';
  43.             api_url = 'http://api.vkontakte.ru/api.php';
  44.             */
  45.             // вызываем функцию получения профиля пользователя, просматривающего приложение
  46.             getProfile(viewer_id);
  47.         }
  48.  
  49.         private function getProfile(uid):void
  50.         {
  51.             // параметры которые будем передавать в запросе и которые нужны для формирования сигнатуры
  52.             // параметры для формирования сигнатуры
  53.             var request_params: Object = new Object();
  54.             request_params.api_id = api_id;
  55.             request_params.method = 'getProfiles';
  56.             request_params.format = 'XML';
  57.             request_params.v = '3.0';
  58.             request_params.fields = 'bdate,photo_big';
  59.             request_params.uids = uid;
  60.  
  61.             // параметры для отправки запроса
  62.             var variables:URLVariables = new URLVariables();
  63.             // часть параметров берем из request_params
  64.             for (var j:String in request_params)
  65.             {
  66.                 variables[j] = request_params[j];
  67.             }
  68.             variables['sid'] = sid;// параметр sid нужно передавать в запросе, но он не используются при создании сигнатуры
  69.             variables['sig'] = generate_signature(request_params);// генерируем сигнатуру. Функция generate_signature описана ниже.
  70.  
  71.             // подготавливаем запрос
  72.             url_request = new URLRequest(api_url);
  73.             // данные будем отправлять POST запросом
  74.             url_request.method = URLRequestMethod.POST;
  75.             // добавляем параметры в запрос
  76.             url_request.data = variables;
  77.             // отправляем запрос
  78.             url_loader = new URLLoader  ;
  79.             url_loader.addEventListener(Event.COMPLETE,onComplete);
  80.             url_loader.load(url_request);
  81.         }
  82.        
  83.         // запрос выполнен
  84.         private function onComplete(event:Event):void
  85.         {
  86.             var response:XML = new XML(url_loader.data);
  87.  
  88.             // выводим дату рождения пользователя
  89.             var bdate = response..bdate;
  90.             bdate_tf.text = bdate;
  91.             bdate_tf.x = 490;
  92.             bdate_tf.y = 380;
  93.             addChild(bdate_tf);
  94.  
  95.             // выводим имя и фамилию пользователя
  96.             name_tf.text = response..first_name + ' ' + response..last_name;
  97.             name_tf.x = 410;
  98.             name_tf.y = 360;
  99.             addChild(name_tf);
  100.  
  101.             // выводим аватарку пользователя
  102.             avatar.autoLoad = true;
  103.             avatar.scaleContent = false;
  104.             avatar.source = response..photo_big;
  105.             avatar.move(175,10);
  106.             addChild(avatar);
  107.         }
  108.  
  109.         // функция генерации сигнатуры
  110.         private function generate_signature(request_params):String
  111.         {
  112.             var signature = '';
  113.             // сортируем параметры в алфавитном порядке
  114.             var sorted_array: Array = new Array();
  115.             for (var key in request_params)
  116.             {
  117.                 sorted_array.push(key + "=" + request_params[key]);
  118.             }
  119.             sorted_array.sort();
  120.  
  121.             // создаем строку параметров;
  122.             for (key in sorted_array)
  123.             {
  124.                 signature +=  sorted_array[key];
  125.             }
  126.             signature = viewer_id + signature + secret;
  127.             return MD5.encrypt(signature);
  128.         }
  129.         // 
  130.     }
  131. }

Заменяем app_id на id вашего приложения.
Скачиваем файл . Копируем его в папку с Main.as.

3. Подключаем Main.as к fla


4. Загружаем приложение в контакт
Редактирование -> Настройки -> Обновление SWF-приложения -> Обзор -> Начать загрузку.

- Если включен контейнер, то выключаем
Редактирование -> Настройки -> Flash-контейнер -> Без использования контейнера.

5. Всё готово!


Локальное тестирование приложения

Для локального тестирования, нужно указать в приложении нужные параметры. В функции Main() меняем эти значения на свои. Узнать их можно в исходном коде страницы с приложением.
  1.             // для тестирования локально, можно прописать их здесь (брать в исходном коде страницы с приложением)
  2.             viewer_id = '1';
  3.             secret = 'abcd123456';
  4.             sid = 'abcd123456abcd123456abcd123456abcd123456abcd123456abcd1234';
  5.             api_url = 'http://api.vkontakte.ru/api.php';




Исходник http://flapps.ru/example/vkontakte_api_3.0_example.rar