Сохранить и вывести аватарки пользователей в цикле

Обсуждение и помощь по вопросам взаимодействия с ВКонтакте API в Flash-приложениях (ActionScript)
Ответить
herotic
Сообщения: 33
Зарегистрирован: 25 май 2010, 23:36

Сохранить и вывести аватарки пользователей в цикле

Сообщение herotic »

Приветствую всех. Скажите, пожалуйста, возможно ли сделать с помощью вконтакте АПИ следующую штуку: Пользователь зашел в приложение и его userid отправилось в мускул, после некоторого промежутка времени в приложении побывало еще 20 пользователей и их данные тоже отправились в базу данных. Возможно ли вывести в цикле аватарки всех пользователей кто заходил в приложении? Если да, то как?
Аватара пользователя
Александр
Создатель сайта
Создатель сайта
Сообщения: 4574
Зарегистрирован: 27 сен 2009, 16:45

Re: Сохранить и вывести аватарки пользователей в цикле

Сообщение Александр »

Создание базы пользователей приложения и ведение статистики - записать в базу id всех заходивших.
Вывод данных из базы (PHP + MySQL) - выбираешь id.
Метод getProfiles - по id получаешь аватарки.
herotic
Сообщения: 33
Зарегистрирован: 25 май 2010, 23:36

Re: Сохранить и вывести аватарки пользователей в цикле

Сообщение herotic »

Спасибо, так и делаю, но есть проблема с передачей координат аватаркам, чтобы они отображались в тех местах, где нажал(и) пользователи, не могу понять как передать правильно переменные:
PHP отлично отправляет и принимает данные.

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

  import flash.display.Sprite;        var api_id:Number=2020012; // id вашего приложения       var api_secret:String="0YCY9Palqm"; // секретный ключ       var externalXML:XML;       var loader:URLLoader = new URLLoader();       var photoLoader:Loader = new Loader();       var viewer_id:Number;       var url_loader:URLLoader=new URLLoader;       var url_request:URLRequest=new URLRequest();       var chel = new Sprite();       var userid:Number;       var koordx:Number;       var koordy:Number;       var postavil:Number;       var my_point:XMLList;       var my_total:Number;       var sig:String;       var uid:String;              var globalkoordx:Number=0;       var globalkoordy:Number=0;              var name_txt:TextField = new TextField();        function Main():void {         // узнаём id пользователя, который просматривает приложение         var params:Object=LoaderInfo(root.loaderInfo).parameters;         viewer_id = (params['viewer_id']) ? parseInt(params['viewer_id']) : 1;         // получаем профиль этого пользователя         getProfile(viewer_id);         stage.addEventListener(MouseEvent.MOUSE_MOVE,redrawCursor);         stage.addEventListener(MouseEvent.CLICK, ClickOnStage);         Mouse.hide();                          var myXMLLoader:URLLoader = new URLLoader();         myXMLLoader.load(new URLRequest("points_to_stage.php"));         myXMLLoader.addEventListener(Event.COMPLETE, processXML);               }                  function processXML (e:Event):void{        var myXML:XML = new XML(e.target.data);                my_point = myXML.POINT;        my_total = my_point.length();                for(var i: int = 0; i < my_point.length(); i++)        {            var koordx: String = my_point[i].@KOORDX;            var koordy: String = my_point[i].@KOORDY;            var userid: String = my_point[i].@USERID;            chel.graphics.beginFill(0xFFFFFF);            chel.graphics.drawRect(koordx,koordy,10,10);            chel.graphics.endFill();            addChild(chel);            globalkoordx = Number(koordx);            globalkoordy = Number(koordy);            getProfileforPoints(userid);        }        }                        //профил точки      function getProfileforPoints(uid):void { // функция получения профиля         sig=MD5.encrypt(viewer_id+'api_id='+api_id+'fields=photomethod=getProfilesuids='+uid+'v=2.0'+api_secret);         var request:URLRequest=new URLRequest("http://api.vkontakte.ru/api.php?api_id="+api_id+"&method=getProfiles&uids="+uid+"&fields=photo&v=2.0&sig="+sig);         loader.load(request);         loader.addEventListener(Event.COMPLETE, onCompleteforPoints);      }             function onCompleteforPoints(event:Event):void { // функция выполняется когда профиль был загружен         if (loader!=null) {            externalXML=new XML(loader.data);                     // загружаем аватар точки            var photo = externalXML..photo;            var request2:URLRequest=new URLRequest(photo);            photoLoader.load(request2);            photoLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadedforPoints);          } else {            trace("Error!");         }      }             function onLoadedforPoints(e:Event):void {         // отображаем загруженный аватар         photoLoader.x = globalkoordx;         photoLoader.y = globalkoordy;         addChild(photoLoader);      }                    function getProfile(uid):void { // функция получения профиля         sig=MD5.encrypt(viewer_id+'api_id='+api_id+'fields=photomethod=getProfilesuids='+uid+'v=2.0'+api_secret);         var request:URLRequest=new URLRequest("http://api.vkontakte.ru/api.php?api_id="+api_id+"&method=getProfiles&uids="+uid+"&fields=photo&v=2.0&sig="+sig);         loader.load(request);         loader.addEventListener(Event.COMPLETE, onComplete);      }        function onComplete(event:Event):void { // функция выполняется когда профиль был загружен         if (loader!=null) {            externalXML=new XML(loader.data);                  } else {            trace("Error!");         }      }        function onLoaded(e:Event):void {      }            function redrawCursor(event:MouseEvent):void    {      cursor_mc.x = event.stageX;;      cursor_mc.y = event.stageY;    }        function ClickOnStage(event:MouseEvent):void            {                if (cursor_mc.x < 533 && postavil != 1)                {                chel.graphics.beginFill(0xFFFFFF);                chel.graphics.drawRect(cursor_mc.x,cursor_mc.y,10,10);                chel.graphics.endFill();                addChild(chel);                                postavil = 1;                            var variables:URLVariables = new URLVariables();                url_request = new URLRequest("add_point.php");                url_request.method = URLRequestMethod.POST;                variables['userid'] = viewer_id;                variables['koordx'] = cursor_mc.x;                variables['koordy'] = cursor_mc.y;                url_request.data = variables;                url_loader = new URLLoader;                url_loader.load(url_request);                }                                if (cursor_mc.x > 533 && postavil == 1)                {                }            } Main()  
Подскажите, пожалуйста, где трабл? Оно вроде и работает, даже первый цикл выполняется правильно, а следующие уже все, не пашет.
butuz
Сообщения: 58
Зарегистрирован: 29 июл 2010, 10:43

Re: Сохранить и вывести аватарки пользователей в цикле

Сообщение butuz »

globalkoordx = Number(koordx);
globalkoordy = Number(koordy);
getProfileforPoints(userid);

здесь трабл, цикл пробегает быстрее, чем апи получает фотки.
пиши координаты в массив, и здесь:

photoLoader.x = globalkoordx;
photoLoader.y = globalkoordy;

подставляй соответствующие координаты из массива
herotic
Сообщения: 33
Зарегистрирован: 25 май 2010, 23:36

Re: Сохранить и вывести аватарки пользователей в цикле

Сообщение herotic »

Я хотел сделать немного по другому, но не получилось, судя по всему потому, что не получается передать userid.
При наведении на квадратики необходимо чтобы показывалась аватарка пользователя, но показывает последнее значение userid. Как сделать, чтобы можно было передавать значение переменной userid?
Я попытался сделать так(проблемные участки выделил красным цветом для удобства):

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

  import flash.display.Sprite;        var api_id:Number=2020012; // id вашего приложения       var api_secret:String="0YCY9Palqm"; // секретный ключ       var externalXML:XML;       var loader:URLLoader = new URLLoader();       var photoLoader:Loader = new Loader();       var viewer_id:Number;       var url_loader:URLLoader=new URLLoader;       var url_request:URLRequest=new URLRequest();       var chel = new MovieClip();       var userid:Number;       var koordx:Number;       var koordy:Number;       var postavil:Number;       var my_point:XMLList;       var my_total:Number;       var sig:String;       var uid:String;       var name_txt:TextField = new TextField();        function Main():void {         // узнаём id пользователя, который просматривает приложение         var params:Object=LoaderInfo(root.loaderInfo).parameters;         viewer_id = (params['viewer_id']) ? parseInt(params['viewer_id']) : 1;         // получаем профиль этого пользователя         getProfile(viewer_id);         stage.addEventListener(MouseEvent.MOUSE_MOVE,redrawCursor);         stage.addEventListener(MouseEvent.CLICK, ClickOnStage);         chel.addEventListener(MouseEvent.ROLL_OVER,RollOverPoint)         Mouse.hide();                  //тырим инфу         var myXMLLoader:URLLoader = new URLLoader();         myXMLLoader.load(new URLRequest("points.php"));         myXMLLoader.addEventListener(Event.COMPLETE, processXML);      }                  function processXML (e:Event):void{        var myXML:XML = new XML(e.target.data);                my_point = myXML.POINT;        my_total = my_point.length();                for(var i: int = 0; i < my_point.length(); i++)        {            var koordx: String = my_point[i].@KOORDX;            var koordy: String = my_point[i].@KOORDY;            var userid: String = my_point[i].@USERID;            chel.graphics.beginFill(0xFFFFFF);            chel.graphics.drawRect(koordx,koordy,10,10);            chel.graphics.endFill();            addChild(chel).name = userid; // [b][color=#FF0000]предполагаю, что так можно идентифицировать addChild[/color][/b]        }        }                   //профиль точки      function getProfileforPoints(uid):void { // функция получения профиля точки         sig=MD5.encrypt(viewer_id+'api_id='+api_id+'fields=photomethod=getProfilesuids='+uid+'v=2.0'+api_secret);         var request:URLRequest=new URLRequest("http://api.vkontakte.ru/api.php?api_id="+api_id+"&method=getProfiles&uids="+uid+"&fields=photo&v=2.0&sig="+sig);         loader.load(request);         loader.addEventListener(Event.COMPLETE, onCompleteforPoints);      }             function onCompleteforPoints(event:Event):void { // функция выполняется когда профиль точки был загружен         if (loader!=null) {            externalXML=new XML(loader.data);                     // загружаем аватар точки            var photo = externalXML..photo;            var request2:URLRequest=new URLRequest(photo);            photoLoader.load(request2);            photoLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadedforPoints);          } else {            trace("Error!");         }      }               //вывод фотки точки       function onLoadedforPoints(e:Event):void {         photoLoader.x = 100;         photoLoader.y = 100;         addChild(photoLoader);      }                    function getProfile(uid):void { // функция получения профиля         sig=MD5.encrypt(viewer_id+'api_id='+api_id+'fields=photomethod=getProfilesuids='+uid+'v=2.0'+api_secret);         var request:URLRequest=new URLRequest("http://api.vkontakte.ru/api.php?api_id="+api_id+"&method=getProfiles&uids="+uid+"&fields=photo&v=2.0&sig="+sig);         loader.load(request);         loader.addEventListener(Event.COMPLETE, onComplete);      }        function onComplete(event:Event):void { // функция выполняется когда профиль был загружен         if (loader!=null) {            externalXML=new XML(loader.data);                  } else {            trace("Error!");         }      }        function onLoaded(e:Event):void {      }            function redrawCursor(event:MouseEvent):void    {      cursor_mc.x = event.stageX;      cursor_mc.y = event.stageY;    }              // [b][color=#FF0000]при наведении на точку показываем фотку точки, но показывается последняя фотка всех точек[/color][/b]          function RollOverPoint(event:MouseEvent):void    {      userid = Number(this.addChild(chel).name);      getProfileforPoints(userid);    }            function ClickOnStage(event:MouseEvent):void            {                if (cursor_mc.x < 533 && postavil != 1)                {                chel.graphics.beginFill(0xFFFFFF);                chel.graphics.drawRect(cursor_mc.x,cursor_mc.y,10,10);                chel.graphics.endFill();                addChild(chel);                                postavil = 1;                            var variables:URLVariables = new URLVariables();                url_request = new URLRequest("add_points.php");                url_request.method = URLRequestMethod.POST;                variables['userid'] = viewer_id;                variables['koordx'] = cursor_mc.x;                variables['koordy'] = cursor_mc.y;                url_request.data = variables;                url_loader = new URLLoader;                url_loader.load(url_request);                }                                if (cursor_mc.x > 533 && postavil == 1)                {                }            }    Main()   
Ответить