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

Только готовые уроки по использованию ВКонтакте API. Flash + PHP + API. НЕ IFrame!

ВКонтакте 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 вашего приложения.
Скачиваем файл Чтобы увидеть ссылку - зарегистрируйтесь. Копируем его в папку с 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';




Исходник Чтобы увидеть ссылку - зарегистрируйтесь

За это сообщение автора Александр поблагодарили - 10:
Андрей Марков, Cadmy, cool137, Duudik, eXpressionist, paduchin, S2T2A2S2, Sharmiih, SoftAng, your-doom
Аватара пользователя
Александр
Создатель сайта
Создатель сайта
 
Автор темы
Сообщения: 4574
Зарегистрирован: 27 сен 2009, 16:45
Откуда: Санкт-Петербург
Благодарил (а): 126 раз.
Поблагодарили: 771 раз.

Чтобы убрать блок с рекламой, зарегистрируйтесь на форуме или войдите.

Google
 



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

Сообщение m1cky » 17 авг 2010, 22:46

А где про сам API 3.0 почитать можно?
m1cky

 
Сообщения: 18
Зарегистрирован: 04 авг 2010, 17:56
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

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

Сообщение Влад » 17 авг 2010, 22:53

Супер!
https://hrefs.ru - сервис крауд маркетинга №1 в 2019 году
Аватара пользователя
Влад
Модератор
Модератор
 
Сообщения: 654
Зарегистрирован: 29 апр 2010, 22:24
Благодарил (а): 26 раз.
Поблагодарили: 58 раз.

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

Сообщение Александр » 17 авг 2010, 23:00

Аватара пользователя
Александр
Создатель сайта
Создатель сайта
 
Автор темы
Сообщения: 4574
Зарегистрирован: 27 сен 2009, 16:45
Откуда: Санкт-Петербург
Благодарил (а): 126 раз.
Поблагодарили: 771 раз.

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

Сообщение FireStorm3000 » 17 авг 2010, 23:36

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


его можно как нибудь использовать от 2 захода пользователем в приложение?
У каждого свой демон (Гороскопы друзей)
http://vkontakte.ru/app1666633
Аватара пользователя
FireStorm3000

 
Сообщения: 80
Зарегистрирован: 03 янв 2010, 18:17
Благодарил (а): 5 раз.
Поблагодарили: 2 раз.

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

Сообщение Noise Gate » 18 авг 2010, 08:16

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

 
Сообщения: 691
Зарегистрирован: 28 апр 2010, 12:34
Откуда: СПб
Благодарил (а): 31 раз.
Поблагодарили: 64 раз.

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

Сообщение paduchin » 18 авг 2010, 08:50

Спасибо ! :)
Изображение
Аватара пользователя
paduchin
FL Team
FL Team
 
Сообщения: 318
Зарегистрирован: 01 мар 2010, 14:20
Откуда: Миасс
Благодарил (а): 10 раз.
Поблагодарили: 16 раз.

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

Сообщение Александр » 18 авг 2010, 17:39

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

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

Noise Gate
Можно один раз создать простое приложение, которое будет выводить эти данные. Но его придется загружать в контакт.
Ещё можно написать простой яваскрипт, вставить его в адресную строку и вывести нужные параметры.
Аватара пользователя
Александр
Создатель сайта
Создатель сайта
 
Автор темы
Сообщения: 4574
Зарегистрирован: 27 сен 2009, 16:45
Откуда: Санкт-Петербург
Благодарил (а): 126 раз.
Поблагодарили: 771 раз.

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

Сообщение Noise Gate » 18 авг 2010, 18:05

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

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

 
Сообщения: 691
Зарегистрирован: 28 апр 2010, 12:34
Откуда: СПб
Благодарил (а): 31 раз.
Поблагодарили: 64 раз.

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

Сообщение m1cky » 20 авг 2010, 13:31

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

 
Сообщения: 18
Зарегистрирован: 04 авг 2010, 17:56
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

След.

Вернуться в Уроки по использованию ВКонтакте API



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0