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

Темы только для ознакомления. Уроки по использованию старой версии ВКонтакте API и устаревших методов.

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

Сообщение Doker » 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
Содержание файла:
  1. <?php
  2.  
  3. $db_host="localhost";    
  4. $db_user="1111";      
  5. $db_password="111111";    
  6. $db_name = "11111";      
  7. $table_name = "stat_reit";      
  8.  
  9. $auth_key  = $_POST['auth_key'];
  10. $user_id = $_POST['viewer_id'];
  11. $new_score = $_POST['new_score'];
  12. $api_id="111111";
  13. $new_score_sig = $_POST['new_score_sig'];
  14.  
  15.  
  16.    mysql_connect($db_host, $db_user, $db_password) or die (mysql_error());
  17.    mysql_select_db($db_name) or die (mysql_error());
  18.    mysql_query("SET NAMES 'utf8'");
  19.  
  20. $real_key = md5("$new_score STbfPJfRhj");
  21.  
  22.  
  23. if ($new_score_sig == $real_key){
  24.  
  25.  
  26. $query = 'UPDATE `'.$table_name.'` SET score="'.$new_score.'" where `user_id` ="'.$user_id.'"';
  27.    $sql = @mysql_query($query);
  28.    echo "OK. Score changed. New score: $new_score . Uid= $user_id";
  29.  
  30. } else {
  31. echo "error sig";
  32.  
  33. }
  34.  
  35. ?>
  36.  


Cоздаем файл rating.php
Содержание файла:
  1. <?php
  2. $db_host="localhost";    
  3. $db_user="1111";      
  4. $db_password="1111110";    
  5. $db_name = "1111";      
  6. $table_name = "stat_reit";
  7.  
  8. mysql_connect($db_host, $db_user, $db_password) or die (mysql_error());
  9. mysql_select_db($db_name) or die (mysql_error());
  10. mysql_query("SET NAMES 'utf8'");
  11.  
  12. $query ='SELECT * from `'.$table_name.'` order by score desc limit 100';
  13. $sql = @mysql_query($query);
  14.  
  15.         echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
  16.         echo "<response>";
  17.         for ($i=0; $i<mysql_num_rows($sql);$i++){
  18.         $r = mysql_fetch_array($sql);
  19.        echo"<user>";
  20.         echo"<user_id>".$r['user_id']." </user_id>";
  21.         echo"<score>".$r['score']." </score>";
  22.        echo"</user>";
  23. }
  24. echo "</response>";
  25.  
  26. ?>


Cоздаем файл stat.php
  1. <?php
  2. $db_host="localhost";    
  3. $db_user="11111";      
  4. $db_password="11111";    
  5. $db_name = "111111";      
  6. $table_name = "stat_reit";                        
  7.  
  8. // данные приложения
  9. $app_id = 'id'; // id приложения
  10. $api_secret = 'secret'; // защищенный ключ приложения с вкладки платежи
  11.  
  12.  
  13. $auth_key  = $_POST['auth_key'];
  14. $viewer_id = $_POST['viewer_id'];
  15.  
  16. $real_key = md5($app_id."_".$viewer_id."_".$api_secret);
  17. if ($auth_key == $real_key){
  18.     // соединение с БД
  19.     mysql_connect($db_host, $db_user, $db_password) or die (mysql_error());
  20.     mysql_select_db($db_name) or die (mysql_error());
  21.     mysql_query("SET NAMES 'utf8'");
  22.  
  23.     // Выполняем запрос: если пользователя с таким id ещё нет в БД, то добавляем, если есть, то обновляем запись, прибавляя одно посещение (`visits` = (`visits`+1))
  24.     $query = 'INSERT INTO `'.$table_name.'` (`user_id`, `last_date`) VALUES ("'.$viewer_id.'","'.time().'") ON DUPLICATE KEY UPDATE  `visits` = (`visits`+1), `last_date`="'.time().'";';
  25.     $sql = @mysql_query($query);
  26.     echo "OK";
  27. }
  28. ?>
  29.  

Выполняем запрос в базу данных:
  1. DROP TABLE IF EXISTS `stats_reit`;
  2. CREATE TABLE IF NOT EXISTS `stat_reit` (
  3.   `id` INT(9) NOT NULL AUTO_INCREMENT,
  4.   `user_id` INT(9) DEFAULT NULL,
  5.   `last_date` INT(10) DEFAULT NULL,
  6.   `visits` INT(9) DEFAULT '1',
  7.   `score` DOUBLE DEFAULT '0',
  8.   PRIMARY KEY (`id`),
  9.   UNIQUE KEY `uid` (`user_id`)
  10. ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 PACK_KEYS=0 AUTO_INCREMENT=1 ;
  11.  

Создаем *.as файл с таким содержанием.
  1. package {
  2.     import flash.net.*;
  3.     import flash.display.*;
  4.     import flash.events.*;
  5.     import flash.text.*;
  6.     import flash.utils.*;
  7.     import flash.net.*;
  8.     import flash.system.Security;
  9.     import flash.system.SecurityPanel;
  10.     import fl.controls.List;
  11.     import fl.events.ListEvent;
  12.     import vk.*;
  13.     import flash.system.Security;
  14.  
  15.     public class Main extends Sprite {
  16.         private var api_id:Number=1111111;// id вашего приложения
  17.         private var api_secret:String="11111";// секретный ключ
  18.         private var viewer_id:Number;
  19.         private var sig:String;
  20.         private var uid:String;
  21.         private var xmlloader:URLLoader = new URLLoader();
  22.         private var wrapper:Object;
  23.         private var api:VkApiNode;
  24.         private var url_loader7:URLLoader;
  25.         private var url_request7:URLRequest;
  26.         private var server_url;
  27.         private var query7:String;
  28.  
  29.         public function Main():void {
  30.             this.addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
  31.         }
  32.  
  33.         public function onAddedToStage(e:Event):void {
  34.  
  35.             Security.allowDomain("*");
  36.             stage.dispatchEvent(new Event(Event.DEACTIVATE));
  37.             stage.dispatchEvent(new Event(Event.ACTIVATE));
  38.  
  39.             wrapper=Object(parent.parent);
  40.             if (wrapper.application.parameters.is_app_user==1) {
  41.             } else {
  42.                 wrapper.external.showInstallBox();
  43.             }
  44.  
  45.             server_url=wrapper.application.parameters.api_url;
  46.             viewer_id=wrapper.application.parameters.viewer_id;
  47.  
  48.  
  49.             change_score.addEventListener(MouseEvent.CLICK, change_scoreClick);
  50.  
  51.             var stat_loader:URLLoader = new URLLoader();
  52.             var stat_request:URLRequest=new URLRequest("http://xg-online.net/rating/stat.php");// заменяем на ссылку к вашему скрипту
  53.             stat_request.method=URLRequestMethod.POST;
  54.             // добавление параметров в запрос
  55.             var stat_vars:URLVariables = new URLVariables();
  56.             stat_vars['auth_key']=wrapper.application.parameters.auth_key;// auth_key из FlashVars
  57.             stat_vars['viewer_id']=wrapper.application.parameters.viewer_id;// ID просматривающего приложение
  58.             stat_request.data=stat_vars;
  59.             // выполнение запроса
  60.             stat_loader.load(stat_request);
  61.             stat_loader.addEventListener(Event.COMPLETE, onCompletexml);
  62.  
  63.  
  64.         }
  65.  
  66.         function onCompletexml(event:Event):void {
  67.             var xmlLoader:URLLoader = new URLLoader();
  68.             var requestloader:URLRequest=new URLRequest("http://xg-online.net/rating/rating.php");
  69.             xmlloader.load(requestloader);
  70.             xmlloader.addEventListener(Event.COMPLETE, onCompletexml1);
  71.         }
  72.  
  73.  
  74.         function onCompletexml1(event:Event):void {
  75.  
  76.             var xmlData:XML=new XML(xmlloader.data);
  77.  
  78.             var all_friends:Array=new Array  ;
  79.             //all_friends.push(viewer_id);
  80.  
  81.             var m:uint;
  82.             for (m=0; m<20; m++) {
  83.             all_friends.push(xmlData.user[m].user_id.toString());
  84.             }
  85.             // получаем профили друзей, используя метод getProfiles
  86.             // ПРИМЕЧАНИЕ! Если друзей более 1000, то этот запрос нужно будет поделить на части, из-за ограничений метода getProfiles
  87.             var fields:Array=new Array  ;
  88.             fields=['first_name,last_name,photo_medium'];// перечисленные через запятую поля, необходимые для получения
  89.             getProfiles(all_friends,fields);
  90.  
  91.         }
  92.  
  93.         function getProfiles(uids:Array,fields:Array):void {// функция получения профилей
  94.  
  95.             api=new VkApiNode(viewer_id,api_id,api_secret);
  96.             query7=api.getProfiles(uids,fields);
  97.             url_request7=new URLRequest(query7);
  98.             url_loader7=new URLLoader  ;
  99.             url_loader7.addEventListener(Event.COMPLETE,profilesLoaded);
  100.             url_loader7.load(url_request7);
  101.         }
  102.  
  103.         function profilesLoaded(event:Event):void {
  104.             var xmlData1:XML=new XML(xmlloader.data);
  105.             var responseFriendsProfiles:XML=new XML(url_loader7.data);
  106.             var friends='';
  107.             var k:uint;
  108.             for (k=0; k<100; k++) {
  109.                 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()});
  110.  
  111.  
  112.             }
  113.         }
  114.  
  115.         private function change_scoreClick(e: MouseEvent):void {
  116.  
  117.             var score_loader:URLLoader = new URLLoader();
  118.             var score_request:URLRequest=new URLRequest("http://xg-online.net/rating/change_score.php");// заменяем на ссылку к вашему скрипту
  119.             score_request.method=URLRequestMethod.POST;
  120.             var score_vars:URLVariables = new URLVariables();
  121.             score_vars['new_score']=change_score_tf.text;
  122.             score_vars['new_score_sig']=MD5.encrypt(change_score_tf.text+" "+api_secret);
  123.             score_vars['viewer_id']=wrapper.application.parameters.viewer_id;
  124.             score_vars['auth_key']=wrapper.application.parameters.auth_key;
  125.             score_request.data=score_vars;
  126.             score_loader.load(score_request);
  127.  
  128.  
  129.         }
  130.  
  131.     }
  132. }


При первом запуске смените for (m=0; m<20; m++) { на for (m=0; m<1; m++) { т.к. база еще не заполнена.

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

Исходник:
 Исходник
http://depositfiles.com/files/atniddd73
Последний раз редактировалось Doker 25 июл 2010, 22:51, всего редактировалось 9 раз(а).
my icq numbers: 403305362 и 484613

За это сообщение автора Doker поблагодарили - 4:
Deniska, Евгений, KIka_kok, Noise Gate
Аватара пользователя
Doker
Модератор
Модератор
 
Автор темы
Сообщения: 1026
Зарегистрирован: 07 май 2010, 18:53
Благодарил (а): 35 раз.
Поблагодарили: 52 раз.

Чтобы убрать блок с рекламой, зарегистрируйтесь на форуме или войдите.

Google
 



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

Сообщение Noise Gate » 28 май 2010, 14:32

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

 
Сообщения: 691
Зарегистрирован: 28 апр 2010, 12:34
Откуда: СПб
Благодарил (а): 31 раз.
Поблагодарили: 64 раз.

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

Сообщение Doker » 28 май 2010, 15:25

Вывод топ 5 людей по очкам в приложении.
my icq numbers: 403305362 и 484613
Аватара пользователя
Doker
Модератор
Модератор
 
Автор темы
Сообщения: 1026
Зарегистрирован: 07 май 2010, 18:53
Благодарил (а): 35 раз.
Поблагодарили: 52 раз.

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

Сообщение revizor » 28 май 2010, 19:47

перезалей )
Аватара пользователя
revizor
FL Team
FL Team
 
Сообщения: 1034
Зарегистрирован: 18 ноя 2009, 20:22
Благодарил (а): 6 раз.
Поблагодарили: 49 раз.

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

Сообщение 112 » 28 май 2010, 22:11

а фото этих пяти будет??
Если ты дебил ,оставайся им!
Я бы изменил мир,но Бог не дает исходники!
Изображение
Аватара пользователя
112
Модератор
Модератор
 
Сообщения: 2215
Зарегистрирован: 02 фев 2010, 21:53
Благодарил (а): 51 раз.
Поблагодарили: 80 раз.

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

Сообщение Mustafin.M » 31 май 2010, 13:55

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

 
Сообщения: 166
Зарегистрирован: 09 май 2010, 08:49
Благодарил (а): 6 раз.
Поблагодарили: 10 раз.

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

Сообщение Doker » 31 май 2010, 15:15

Вынес все в шапку*
Последний раз редактировалось Doker 10 июн 2010, 09:19, всего редактировалось 2 раз(а).
my icq numbers: 403305362 и 484613

За это сообщение автора Doker поблагодарил:
Mustafin.M
Аватара пользователя
Doker
Модератор
Модератор
 
Автор темы
Сообщения: 1026
Зарегистрирован: 07 май 2010, 18:53
Благодарил (а): 35 раз.
Поблагодарили: 52 раз.

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

Сообщение Mustafin.M » 01 июн 2010, 18:02

Спасибо огромное!
Все четко и ясно. По-больше бы таких уроков!
Mustafin.M

 
Сообщения: 166
Зарегистрирован: 09 май 2010, 08:49
Благодарил (а): 6 раз.
Поблагодарили: 10 раз.

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

Сообщение zagruzkaaa » 04 июн 2010, 18:24

Что добюавлено в новой версии?
zagruzkaaa

 
Сообщения: 60
Зарегистрирован: 19 ноя 2009, 20:47
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

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

Сообщение 112 » 08 июн 2010, 15:19

doker
а кде взять change_score.php???
Если ты дебил ,оставайся им!
Я бы изменил мир,но Бог не дает исходники!
Изображение
Аватара пользователя
112
Модератор
Модератор
 
Сообщения: 2215
Зарегистрирован: 02 фев 2010, 21:53
Благодарил (а): 51 раз.
Поблагодарили: 80 раз.

След.

Вернуться в Неактуальные уроки (API 2.0 и устаревшие методы)



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0