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

Темы только для ознакомления. Уроки по использованию старой версии ВКонтакте API и устаревших методов.
Аватара пользователя
Doker
Модератор
Модератор
Сообщения: 1026
Зарегистрирован: 07 май 2010, 18:53

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

Сообщение 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++) { т.к. база еще не заполнена.

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

Исходник:
Последний раз редактировалось Doker 25 июл 2010, 22:51, всего редактировалось 9 раз.
Noise Gate
Сообщения: 691
Зарегистрирован: 28 апр 2010, 12:34

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

Сообщение Noise Gate »

Только распиши поподробнее, что все это делает, а то на словах ("рейтинг в приложении") не очень понятно - пришлось код просматривать
Аватара пользователя
Doker
Модератор
Модератор
Сообщения: 1026
Зарегистрирован: 07 май 2010, 18:53

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

Сообщение Doker »

Вывод топ 5 людей по очкам в приложении.
Аватара пользователя
revizor
FL Team
FL Team
Сообщения: 1034
Зарегистрирован: 18 ноя 2009, 20:22

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

Сообщение revizor »

перезалей )
Аватара пользователя
112
Модератор
Модератор
Сообщения: 2215
Зарегистрирован: 02 фев 2010, 21:53

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

Сообщение 112 »

а фото этих пяти будет??
Mustafin.M
Сообщения: 166
Зарегистрирован: 09 май 2010, 08:49

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

Сообщение Mustafin.M »

Все отлично, только хотелось бы узнать как этот рейтинг отправлять на сервер, допустим вася иванов набрал 50 очков и надо добавить их к предыдущему значению на сервере.
* Да, я лентяй, не хочу думать сам. Если подскажете, то большое вам спасибо, а нет - так я сам разберусь :)
Аватара пользователя
Doker
Модератор
Модератор
Сообщения: 1026
Зарегистрирован: 07 май 2010, 18:53

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

Сообщение Doker »

Вынес все в шапку*
Последний раз редактировалось Doker 10 июн 2010, 09:19, всего редактировалось 2 раза.
Mustafin.M
Сообщения: 166
Зарегистрирован: 09 май 2010, 08:49

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

Сообщение Mustafin.M »

Спасибо огромное!
Все четко и ясно. По-больше бы таких уроков!
zagruzkaaa
Сообщения: 60
Зарегистрирован: 19 ноя 2009, 20:47

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

Сообщение zagruzkaaa »

Что добюавлено в новой версии?
Аватара пользователя
112
Модератор
Модератор
Сообщения: 2215
Зарегистрирован: 02 фев 2010, 21:53

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

Сообщение 112 »

doker
а кде взять change_score.php???
Ответить