Рейтинг в приложении на вашем сервере. (Топ лучших)
Добавлено: 28 май 2010, 12:00
Рейтинг в приложении на вашем сервере, добавление приложения на страницу.
What is new?
8.12.10 Добавлен вывод аватарки, имени, фамилии. Сделана защита от подмены результатов.
Cоздаем новый AS 3.0 Flash file.
Создаем кнопку change_score.
Создаем TileList с именем top_list.
Создаем текстовое поле change_score_tf.
Создаем файл change_score.php
Содержание файла:
Cоздаем файл rating.php
Содержание файла:
Cоздаем файл stat.php
Выполняем запрос в базу данных:
Создаем *.as файл с таким содержанием.
При первом запуске смените for (m=0; m<20; m++) { на for (m=0; m<1; m++) { т.к. база еще не заполнена.
Вот что у вас должно получиться:
Исходник:
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"; } ?>
Содержание файла:
Код: Выделить всё
<?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>"; ?>
Код: Выделить всё
<?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 ;
Код: Выделить всё
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); } }}
Вот что у вас должно получиться:
Исходник: