Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > API приложений и сред

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 23.03.2013, 23:12
fduch вне форума Посмотреть профиль Отправить личное сообщение для fduch Найти все сообщения от fduch
  № 1  
Ответить с цитированием
fduch

Регистрация: Jun 2012
Сообщений: 142
По умолчанию интеграция с вконтактом

Сутки уже курю доки и исходники, до сих пор неполучилось создать рабочий кусок кода, для работы с вконтактом.
Немогли бы вы написать мне кусок кода(без лишней мутотени), который просто получает от вконтакта узер_ид и фамилию с именем. Больше ничего.
Сутки уже горы ошибок и пустой экран в лучшем случае.

Код AS3:
package
{
    import flash.net.URLLoader;
    import flash.net.URLRequest;
    import flash.net.URLVariables;
    import flash.net.URLRequestMethod;
    import flash.display.*;
    import flash.events.*;
    import flash.text.TextField;
    import fl.containers.UILoader;
	import mx.utils.LoaderUtil;
 
    public class Main extends Sprite
    {
        private var api_id:Number = 3514221;// ID приложения
        private var url_loader:URLLoader;
        private var url_request:URLRequest;
        private var viewer_id;
        private var secret:String;
        private var sid:String;
        private var api_url:String;
 
        private var bdate_tf:TextField = new TextField();
        private var name_tf:TextField = new TextField();
        private var avatar:LoaderUtil = new UILoader  ;
 
        public function Main():void
        {
            // получаем данные из flashVars
            // id просматривающего приложение
            viewer_id = LoaderInfo(root.loaderInfo).parameters.viewer_id;
            // secret для генерации сигнатуры
            secret = LoaderInfo(root.loaderInfo).parameters.secret;
            // id сессии
            sid = LoaderInfo(root.loaderInfo).parameters.sid;
            // адрес API-сервиса
            api_url = LoaderInfo(root.loaderInfo).parameters.api_url;
 
            // для тестирования локально, можно прописать их здесь (брать в исходном коде страницы с приложением)
            /*
            viewer_id = '1';
            secret = 'abcd123456';
            sid = 'abcd123456abcd123456abcd123456abcd123456abcd123456abcd1234';
            api_url = 'http://api.vkontakte.ru/api.php';
            */
            // вызываем функцию получения профиля пользователя, просматривающего приложение
            getProfile(viewer_id);
        }
 
        private function getProfile(uid):void
        {
            // параметры которые будем передавать в запросе и которые нужны для формирования сигнатуры
            // параметры для формирования сигнатуры
            var request_params: Object = new Object();
            request_params.api_id = api_id;
            request_params.method = 'getProfiles';
            request_params.format = 'XML';
            request_params.v = '3.0';
            request_params.fields = 'bdate,photo_big';
            request_params.uids = uid;
 
            // параметры для отправки запроса
            var variables:URLVariables = new URLVariables();
            // часть параметров берем из request_params
            for (var j:String in request_params)
            {
                variables[j] = request_params[j];
            }
            variables['sid'] = sid;// параметр sid нужно передавать в запросе, но он не используются при создании сигнатуры
            variables['sig'] = generate_signature(request_params);// генерируем сигнатуру. Функция generate_signature описана ниже.
 
            // подготавливаем запрос
            url_request = new URLRequest(api_url);
            // данные будем отправлять POST запросом
            url_request.method = URLRequestMethod.POST;
            // добавляем параметры в запрос
            url_request.data = variables;
            // отправляем запрос
            url_loader = new URLLoader  ;
            url_loader.addEventListener(Event.COMPLETE,onComplete);
            url_loader.load(url_request);
        }
 
        // запрос выполнен
        private function onComplete(event:Event):void
        {
            var response:XML = new XML(url_loader.data);
 
            // выводим дату рождения пользователя
            var bdate = response..bdate;
            bdate_tf.text = bdate;
            bdate_tf.x = 490;
            bdate_tf.y = 380;
            addChild(bdate_tf);
 
            // выводим имя и фамилию пользователя
            name_tf.text = response..first_name + ' ' + response..last_name;
            name_tf.x = 410;
            name_tf.y = 360;
            addChild(name_tf);
 
            // выводим аватарку пользователя
            avatar.autoLoad = true;
            avatar.scaleContent = false;
            avatar.source = response..photo_big;
            avatar.move(175,10);
            addChild(avatar);
        }
 
 
        // функция генерации сигнатуры
        private function generate_signature(request_params):String
        {
            var signature = '';
            // сортируем параметры в алфавитном порядке
            var sorted_array: Array = new Array();
            for (var key in request_params)
            {
                sorted_array.push(key + "=" + request_params[key]);
            }
            sorted_array.sort();
 
            // создаем строку параметров;
            for (key in sorted_array)
            {
                signature +=  sorted_array[key];
            }
            signature = viewer_id + signature + secret;
            return MD5.encrypt(signature);
        }
        // http://flapps.ru/forum
    }
}
Вот тут вроде все просто с коментами, но не работает (((

зы: Я правильно делаю подключая МД5, как класс?

Старый 23.03.2013, 23:56
mooncar вне форума Посмотреть профиль Отправить личное сообщение для mooncar Найти все сообщения от mooncar
  № 2  
Ответить с цитированием
mooncar
Модрон-ветеринар
 
Аватар для mooncar

администратор
Регистрация: May 2009
Адрес: г.Казань
Сообщений: 7,357
Отправить сообщение для mooncar с помощью ICQ Отправить сообщение для mooncar с помощью Skype™
1. Выбирайте правильно раздел для размещения тем.
2. Писать "спасите-помогите, хелп плиз" нельзя (по крайней мере в заголовках тем), и так понятно, что вам нужна помощь, раз задаете вопрос.
__________________
Идите первым!

Старый 24.03.2013, 00:59
KumoKairo вне форума Посмотреть профиль Отправить личное сообщение для KumoKairo Найти все сообщения от KumoKairo
  № 3  
Ответить с цитированием
KumoKairo
 
Аватар для KumoKairo

Регистрация: Jan 2013
Сообщений: 550
Записей в блоге: 1
Вот тут все подробно расписано.
http://flapps.ru/forum/topic1943.html

Старый 24.03.2013, 10:16
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 4  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
зы: Я правильно делаю подключая МД5, как класс?
К чему вообще эти танцы с бубном? Уже давно все написано в классе APIConnection

Старый 24.03.2013, 11:37
zxcv вне форума Посмотреть профиль Отправить личное сообщение для zxcv Найти все сообщения от zxcv
  № 5  
Ответить с цитированием
zxcv
 
Аватар для zxcv

Регистрация: May 2011
Адрес: 0,0,0 относительно меня
Сообщений: 123
Цитата:
Сообщение от KumoKairo Посмотреть сообщение
Вот тут все подробно расписано.
http://flapps.ru/forum/topic1943.html
Вообще ТС, судя по всему, оттуда и брал свой код.

fduch, обрати внимание на имя метода, который используешь ты, и имя метода здесь

Старый 24.03.2013, 12:26
fduch вне форума Посмотреть профиль Отправить личное сообщение для fduch Найти все сообщения от fduch
  № 6  
Ответить с цитированием
fduch

Регистрация: Jun 2012
Сообщений: 142
Цитата:
Сообщение от mooncar Посмотреть сообщение
1. Выбирайте правильно раздел для размещения тем.
2. Писать "спасите-помогите, хелп плиз" нельзя (по крайней мере в заголовках тем), и так понятно, что вам нужна помощь, раз задаете вопрос.
Да, сори.

Добавлено через 42 секунды
Цитата:
Сообщение от KumoKairo Посмотреть сообщение
Вот тут все подробно расписано.
http://flapps.ru/forum/topic1943.html
Я там и читал.

Добавлено через 6 минут
Цитата:
Сообщение от caseyryan Посмотреть сообщение
К чему вообще эти танцы с бубном? Уже давно все написано в классе APIConnection
По уму наверное да, НО по этой ссылочке я первым делом и скачал исходник и читал там, и тестил его.
Оно конечно работает. НО там гора исходников, гора кода... Мне с ним придется разбираться неделю, и выкинуть оттуда 90%.
Все что я прошу, это 20-30строчек кода, которые отправляют запрос и получают ответ.
Как я понял, оно работает по томуже принципу, что и передача прием данных из php.


Последний раз редактировалось fduch; 24.03.2013 в 12:41.
Старый 24.03.2013, 13:04
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 7  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
Все что я прошу, это 20-30строчек кода, которые отправляют запрос и получают ответ.
Все просто, если использовать APIConnection
Код AS3:
// при учете, что доступ к stage уже есть, получаем flash vars
var flashVars:Object = stage.loaderInfo.parameters;
_vk = new APIConnection(flashVars); // инициализируем api connection
// вызываем метод users.get, и передаем вторым параметром объект с полями, которые хотим получить, в данном случае first_name и last_name
_vk.api("users.get", { uids: flashVars.viewer_id, fields: "first_name, last_name" }, onUserData, function(param:Object):void { trace("ERROR"); });
а в обработчике
Код AS3:
private function onUserData(param:Object):void {
       trace("имя:" + param.first_name + " фамилия: " + param.last_name);
}
Цитата:
НО по этой ссылочке я первым делом и скачал исходник и читал там, и тестил его.
Этот хлам можно выбросить. Вообще, о формировании запроса самостоятельно сейчас можно думать только при отправке его с серверной стороны. Со стороны клиента уже все сделали контактовцы

п.с. если будет приходить ошибка, первым делом нужно проверить, а включено ли приложение в настройках

Старый 24.03.2013, 14:01
fduch вне форума Посмотреть профиль Отправить личное сообщение для fduch Найти все сообщения от fduch
  № 8  
Ответить с цитированием
fduch

Регистрация: Jun 2012
Сообщений: 142
Ошибка вылазил в АПИСонекшене.
Вот основной код, аписонекшен присоединен как класс
Код AS3:
package 
{
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.text.TextField;
	import vk.APIConnection;
 
 
  import flash.text.*;
  import flash.events.*;
 
 
 
	/**
	 * ...
	 * @author BJIACTb
	 */
	public class Main extends Sprite 
	{
 
		public function Main():void 
		{
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}
 
		private function init(e:Event = null):void 
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
 
 
 
 
		var tf = new TextField();
    	tf.x = 10;
    	tf.y = 50;
    	tf.width = 587;
    	tf.height = 349;
 
    	tf.border = true;
    	tf.borderColor = 0xDAE2E8;
    	tf.background = true;
    	tf.backgroundColor = 0xFFFFFF;
    	tf.embedFonts = false;
    	var format:TextFormat = new TextFormat();
		format.font = "Tahoma";
		format.color = 0x000000;
		format.size = 11;
		tf.defaultTextFormat = format;
    	addChild(tf);
    	//tf.appendText("Application initialized\n");
 
 
 
 
		var flashVars: Object = stage.loaderInfo.parameters as Object;
		if (flashVars.api_id) {
			tf.appendText("\n// -- Your code for local testing:\n");
			tf.appendText("flashVars['api_id'] = " + flashVars['api_id'] + ";\n");
			tf.appendText("flashVars['viewer_id'] = " + flashVars['viewer_id'] + ";\n");
			tf.appendText("flashVars['sid'] = \"" + flashVars['sid'] + "\";\n");
			tf.appendText("flashVars['secret'] = \"" + flashVars['secret'] + "\";\n");
			tf.appendText("// -- //\n\n");
		}
 
 
	var VK: APIConnection = new vk.APIConnection(flashVars);
 
				// вызываем метод users.get, и передаем вторым параметром объект с полями, которые хотим получить, в данном случае first_name и last_name
	VK.api("users.get", { uids: flashVars.viewer_id, fields: "first_name, last_name" }, onUserData, function(param:Object):void { trace("ERROR"); });
 
		}
 
	}
 
}
Добавлено через 25 минут
Вот вариант, который работает
Код AS3:
VK.api('getProfiles', { uids: flashVars['viewer_id'] }, fetchUserInfo, onApiRequestFail);
Код AS3:
	private function fetchUserInfo(data: Object): void {
		for (var key: String in data[0]) {
    	  tf.appendText(key + "=" + data[0][key] + "\n");
 
    	}
	}
Объясните плс, как оно выводит последовательно данные ласт наме уид и фирст наме.
Почему конструкция data[0][0] выдает undefined
И как в этом виде получить "фирст наме = и ласт наме =" ??
Добавлено через 38 минут
Код AS3:
private function fetchUserInfo(data: Object): void {
		for (var key: String in data[0]) {
    	  tf.appendText(key + "=" + data[0][key] + "\n");
 
    	}
	}
Результат:
first_name=Алексей
last_name=Васильев
uid=1169781

А вот :
Код AS3:
trace("имя:" + data.first_name);
имя:undefined

Добавлено через 56 минут
Все разобрался.
Код AS3:
trace("имя: " + param[0]['first_name']);

Старый 24.03.2013, 18:16
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 9  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
метод getProfiles устаревший. От него лучше отказаться, и использовать users.get
Тот вариант, что я предложил рабочий. Он выдернут из рабочего приложения для контакта

Создать новую тему Ответ Часовой пояс GMT +4, время: 07:35.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 07:35.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.