![]() |
|
||||||||||
|
|||||
|
Регистрация: Jun 2012
Сообщений: 142
|
Сутки уже курю доки и исходники, до сих пор неполучилось создать рабочий кусок кода, для работы с вконтактом.
Немогли бы вы написать мне кусок кода(без лишней мутотени), который просто получает от вконтакта узер_ид и фамилию с именем. Больше ничего. Сутки уже горы ошибок и пустой экран в лучшем случае. 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, как класс? |
|
|||||
|
Модрон-ветеринар
|
1. Выбирайте правильно раздел для размещения тем.
2. Писать "спасите-помогите, хелп плиз" нельзя (по крайней мере в заголовках тем), и так понятно, что вам нужна помощь, раз задаете вопрос.
__________________
Идите первым! |
|
|||||
|
Вот тут все подробно расписано.
http://flapps.ru/forum/topic1943.html |
|
|||||
|
Цитата:
|
|
|||||
|
Регистрация: May 2011
Адрес: 0,0,0 относительно меня
Сообщений: 123
|
Цитата:
fduch, обрати внимание на имя метода, который используешь ты, и имя метода здесь |
|
|||||
|
Регистрация: Jun 2012
Сообщений: 142
|
Цитата:
Добавлено через 42 секунды Цитата:
Добавлено через 6 минут Цитата:
Оно конечно работает. НО там гора исходников, гора кода... Мне с ним придется разбираться неделю, и выкинуть оттуда 90%. Все что я прошу, это 20-30строчек кода, которые отправляют запрос и получают ответ. Как я понял, оно работает по томуже принципу, что и передача прием данных из php. Последний раз редактировалось fduch; 24.03.2013 в 12:41. |
|
|||||
|
Цитата:
// при учете, что доступ к 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"); }); private function onUserData(param:Object):void { trace("имя:" + param.first_name + " фамилия: " + param.last_name); } Цитата:
п.с. если будет приходить ошибка, первым делом нужно проверить, а включено ли приложение в настройках |
|
|||||
|
Регистрация: Jun 2012
Сообщений: 142
|
Ошибка вылазил в АПИСонекшене.
Вот основной код, аписонекшен присоединен как класс 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"); }); } } } Вот вариант, который работает private function fetchUserInfo(data: Object): void { for (var key: String in data[0]) { tf.appendText(key + "=" + data[0][key] + "\n"); } } Объясните плс, как оно выводит последовательно данные ласт наме уид и фирст наме. Почему конструкция data[0][0] выдает undefined И как в этом виде получить "фирст наме = и ласт наме =" ?? 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 А вот : имя:undefined Добавлено через 56 минут Все разобрался. |
![]() |
![]() |
Часовой пояс GMT +4, время: 07:35. |
|
|
« Предыдущая тема | Следующая тема » |
|
|