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

Рейтинг в приложении на вашем сервере. (Топ лучших)

Добавлено: 28 май 2010, 12:00
Doker
Рейтинг в приложении на вашем сервере, добавление приложения на страницу.

What is new?
8.12.10 Добавлен вывод аватарки, имени, фамилии. Сделана защита от подмены результатов.

Cоздаем новый AS 3.0 Flash file.
Создаем кнопку change_score.
Создаем TileList с именем top_list.
Создаем текстовое поле change_score_tf.

Создаем файл change_score.php
Содержание файла:

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

<?php $db_host="localhost";     $db_user="1111";      $db_password="111111";     $db_name = "11111";      $table_name = "stat_reit";       $auth_key  = $_POST['auth_key'];$user_id = $_POST['viewer_id'];$new_score = $_POST['new_score'];$api_id="111111";$new_score_sig = $_POST['new_score_sig'];     mysql_connect($db_host, $db_user, $db_password) or die (mysql_error());   mysql_select_db($db_name) or die (mysql_error());   mysql_query("SET NAMES 'utf8'"); $real_key = md5("$new_score STbfPJfRhj");  if ($new_score_sig == $real_key){  $query = 'UPDATE `'.$table_name.'` SET score="'.$new_score.'" where `user_id` ="'.$user_id.'"';    $sql = @mysql_query($query);   echo "OK. Score changed. New score: $new_score . Uid= $user_id"; } else {echo "error sig"; } ?> 
Cоздаем файл rating.php
Содержание файла:

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

<?php$db_host="localhost";     $db_user="1111";      $db_password="1111110";     $db_name = "1111";      $table_name = "stat_reit";  mysql_connect($db_host, $db_user, $db_password) or die (mysql_error());mysql_select_db($db_name) or die (mysql_error());mysql_query("SET NAMES 'utf8'"); $query ='SELECT * from `'.$table_name.'` order by score desc limit 100';$sql = @mysql_query($query);         echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";        echo "<response>";        for ($i=0; $i<mysql_num_rows($sql);$i++){        $r = mysql_fetch_array($sql);       echo"<user>";        echo"<user_id>".$r['user_id']." </user_id>";        echo"<score>".$r['score']." </score>";       echo"</user>";}echo "</response>"; ?>
Cоздаем файл stat.php

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

<?php$db_host="localhost";     $db_user="11111";      $db_password="11111";     $db_name = "111111";      $table_name = "stat_reit";                         // данные приложения$app_id = 'id'; // id приложения$api_secret = 'secret'; // защищенный ключ приложения с вкладки платежи  $auth_key  = $_POST['auth_key'];$viewer_id = $_POST['viewer_id']; $real_key = md5($app_id."_".$viewer_id."_".$api_secret);if ($auth_key == $real_key){    // соединение с БД    mysql_connect($db_host, $db_user, $db_password) or die (mysql_error());    mysql_select_db($db_name) or die (mysql_error());    mysql_query("SET NAMES 'utf8'");     // Выполняем запрос: если пользователя с таким id ещё нет в БД, то добавляем, если есть, то обновляем запись, прибавляя одно посещение (`visits` = (`visits`+1))    $query = 'INSERT INTO `'.$table_name.'` (`user_id`, `last_date`) VALUES ("'.$viewer_id.'","'.time().'") ON DUPLICATE KEY UPDATE  `visits` = (`visits`+1), `last_date`="'.time().'";';    $sql = @mysql_query($query);    echo "OK";}?> 
Выполняем запрос в базу данных:

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

DROP TABLE IF EXISTS `stats_reit`;CREATE TABLE IF NOT EXISTS `stat_reit` (  `id` INT(9) NOT NULL AUTO_INCREMENT,  `user_id` INT(9) DEFAULT NULL,  `last_date` INT(10) DEFAULT NULL,  `visits` INT(9) DEFAULT '1',  `score` DOUBLE DEFAULT '0',  PRIMARY KEY (`id`),  UNIQUE KEY `uid` (`user_id`)) ENGINE=MyISAM  DEFAULT CHARSET=utf8 PACK_KEYS=0 AUTO_INCREMENT=1 ; 
Создаем *.as файл с таким содержанием.

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

package {    import flash.net.*;    import flash.display.*;    import flash.events.*;    import flash.text.*;    import flash.utils.*;    import flash.net.*;    import flash.system.Security;    import flash.system.SecurityPanel;    import fl.controls.List;    import fl.events.ListEvent;    import vk.*;    import flash.system.Security;     public class Main extends Sprite {        private var api_id:Number=1111111;// id вашего приложения        private var api_secret:String="11111";// секретный ключ        private var viewer_id:Number;        private var sig:String;        private var uid:String;        private var xmlloader:URLLoader = new URLLoader();        private var wrapper:Object;        private var api:VkApiNode;        private var url_loader7:URLLoader;        private var url_request7:URLRequest;        private var server_url;        private var query7:String;         public function Main():void {            this.addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);        }         public function onAddedToStage(e:Event):void {             Security.allowDomain("*");            stage.dispatchEvent(new Event(Event.DEACTIVATE));            stage.dispatchEvent(new Event(Event.ACTIVATE));             wrapper=Object(parent.parent);            if (wrapper.application.parameters.is_app_user==1) {            } else {                wrapper.external.showInstallBox();            }             server_url=wrapper.application.parameters.api_url;            viewer_id=wrapper.application.parameters.viewer_id;              change_score.addEventListener(MouseEvent.CLICK, change_scoreClick);             var stat_loader:URLLoader = new URLLoader();            var stat_request:URLRequest=new URLRequest("http://xg-online.net/rating/stat.php");// заменяем на ссылку к вашему скрипту            stat_request.method=URLRequestMethod.POST;            // добавление параметров в запрос            var stat_vars:URLVariables = new URLVariables();            stat_vars['auth_key']=wrapper.application.parameters.auth_key;// auth_key из FlashVars            stat_vars['viewer_id']=wrapper.application.parameters.viewer_id;// ID просматривающего приложение            stat_request.data=stat_vars;            // выполнение запроса            stat_loader.load(stat_request);            stat_loader.addEventListener(Event.COMPLETE, onCompletexml);          }         function onCompletexml(event:Event):void {            var xmlLoader:URLLoader = new URLLoader();            var requestloader:URLRequest=new URLRequest("http://xg-online.net/rating/rating.php");            xmlloader.load(requestloader);            xmlloader.addEventListener(Event.COMPLETE, onCompletexml1);        }          function onCompletexml1(event:Event):void {             var xmlData:XML=new XML(xmlloader.data);             var all_friends:Array=new Array  ;            //all_friends.push(viewer_id);             var m:uint;            for (m=0; m<20; m++) {            all_friends.push(xmlData.user[m].user_id.toString());            }            // получаем профили друзей, используя метод getProfiles            // ПРИМЕЧАНИЕ! Если друзей более 1000, то этот запрос нужно будет поделить на части, из-за ограничений метода getProfiles            var fields:Array=new Array  ;            fields=['first_name,last_name,photo_medium'];// перечисленные через запятую поля, необходимые для получения            getProfiles(all_friends,fields);         }         function getProfiles(uids:Array,fields:Array):void {// функция получения профилей             api=new VkApiNode(viewer_id,api_id,api_secret);            query7=api.getProfiles(uids,fields);            url_request7=new URLRequest(query7);            url_loader7=new URLLoader  ;            url_loader7.addEventListener(Event.COMPLETE,profilesLoaded);            url_loader7.load(url_request7);        }         function profilesLoaded(event:Event):void {            var xmlData1:XML=new XML(xmlloader.data);            var responseFriendsProfiles:XML=new XML(url_loader7.data);            var friends='';            var k:uint;            for (k=0; k<100; k++) {                top_list.addItem({label:responseFriendsProfiles.user[k].first_name.toString()+/*' '+responseFriendsProfiles.user[k].last_name.toString()+*/" "+xmlData1.user[k].score.toString(), source:responseFriendsProfiles.user[k].photo_medium.toString(), data:responseFriendsProfiles.user[k].uid.toString()});              }        }         private function change_scoreClick(e: MouseEvent):void {             var score_loader:URLLoader = new URLLoader();            var score_request:URLRequest=new URLRequest("http://xg-online.net/rating/change_score.php");// заменяем на ссылку к вашему скрипту            score_request.method=URLRequestMethod.POST;            var score_vars:URLVariables = new URLVariables();            score_vars['new_score']=change_score_tf.text;            score_vars['new_score_sig']=MD5.encrypt(change_score_tf.text+" "+api_secret);            score_vars['viewer_id']=wrapper.application.parameters.viewer_id;            score_vars['auth_key']=wrapper.application.parameters.auth_key;            score_request.data=score_vars;            score_loader.load(score_request);          }     }}
При первом запуске смените for (m=0; m<20; m++) { на for (m=0; m<1; m++) { т.к. база еще не заполнена.

Вот что у вас должно получиться:
Изображение

Исходник:
 Исходник

Re: Рейтинг в приложении на вашем сервере.

Добавлено: 28 май 2010, 14:32
Noise Gate
Только распиши поподробнее, что все это делает, а то на словах ("рейтинг в приложении") не очень понятно - пришлось код просматривать

Re: Рейтинг в приложении на вашем сервере.

Добавлено: 28 май 2010, 15:25
Doker
Вывод топ 5 людей по очкам в приложении.

Re: Рейтинг в приложении на вашем сервере.

Добавлено: 28 май 2010, 19:47
revizor
перезалей )

Re: Рейтинг в приложении на вашем сервере.

Добавлено: 28 май 2010, 22:11
112
а фото этих пяти будет??

Re: Рейтинг в приложении на вашем сервере.

Добавлено: 31 май 2010, 13:55
Mustafin.M
Все отлично, только хотелось бы узнать как этот рейтинг отправлять на сервер, допустим вася иванов набрал 50 очков и надо добавить их к предыдущему значению на сервере.
* Да, я лентяй, не хочу думать сам. Если подскажете, то большое вам спасибо, а нет - так я сам разберусь :)

Re: Рейтинг в приложении на вашем сервере.

Добавлено: 31 май 2010, 15:15
Doker
Вынес все в шапку*

Re: Рейтинг в приложении на вашем сервере.

Добавлено: 01 июн 2010, 18:02
Mustafin.M
Спасибо огромное!
Все четко и ясно. По-больше бы таких уроков!

Re: Рейтинг в приложении на вашем сервере.

Добавлено: 04 июн 2010, 18:24
zagruzkaaa
Что добюавлено в новой версии?

Re: Рейтинг в приложении на вашем сервере.

Добавлено: 08 июн 2010, 15:19
112
doker
а кде взять change_score.php???