Страница 1 из 10

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

Добавлено: 17 авг 2010, 22:35
Александр
ВКонтакте API 3.0. Пример простого приложения
ActionScript 3.0

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

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

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

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

2. Создаём Main.as и пишем код:

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

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

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

3. Подключаем Main.as к fla
Если не знаете как, то посмотрите как это было сделано в этом уроке https://flapps.ru/forum/topic3.html

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';




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

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

Добавлено: 17 авг 2010, 22:46
m1cky
А где про сам API 3.0 почитать можно?

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

Добавлено: 17 авг 2010, 22:53
Влад
Супер!

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

Добавлено: 17 авг 2010, 23:00
Александр

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

Добавлено: 17 авг 2010, 23:36
FireStorm3000
интересует

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

  1.  
  2.  // id сессии
  3.      sid = LoaderInfo(root.loaderInfo).parameters.sid;
  4.  


его можно как нибудь использовать от 2 захода пользователем в приложение?

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

Добавлено: 18 авг 2010, 08:16
Noise Gate
А меня вот интересует, как взять параметры для локального тестирования автоматически, без залезания в код страницы?

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

Добавлено: 18 авг 2010, 08:50
paduchin
Спасибо ! :)

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

Добавлено: 18 авг 2010, 17:39
Александр
FireStorm3000
Для автора приложения sid действует месяц, для других пользователей сутки.

Или что тебя интересует?

Noise Gate
Можно один раз создать простое приложение, которое будет выводить эти данные. Но его придется загружать в контакт.
Ещё можно написать простой яваскрипт, вставить его в адресную строку и вывести нужные параметры.

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

Добавлено: 18 авг 2010, 18:05
Noise Gate
Александр писал(а):Можно один раз создать простое приложение, которое будет выводить эти данные. Но его придется загружать в контакт.
Ещё можно написать простой яваскрипт, вставить его в адресную строку и вывести нужные параметры.

Это я понимаю, но хотелось полной автономности... Надо порыться в теме, кажется, кто-то там упоминал про десктоп авторизацию или что-то подобное...

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

Добавлено: 20 авг 2010, 13:31
m1cky
А для контейнера используемые методы работать не будут как я понимаю?Вопрос,можно ли как-нибудь получить имя со страницы пользователя (пол),используя контейнер?