近日有研究4399的积分小游戏的分数提交规则, 但不能太高调的对做类似外挂的东西...
写以下代码..仅供分析研究
1 <?php
2 function emMsg($v) {
3 echo($v);
4 }
5
6 include_once 'mysql.php';
7
8 class getList {
9
10 private $db;
11
12 function __construct() {
13 $this->db = MySql::getInstance();
14 }
15
16 function getPkList($tid = null) {
17 $res = $this->db->query('SELECT * FROM gamelist' . (empty($tid) ? '' : ' where gameTid=\'' . $tid . '\''));
18 $list = array();
19 if (!$this->db->num_rows($res))
20 $list = $this->initList_4399();
21 else
22 while ($row = $this->db->fetch_array($res)) {
23 $list[] = $row;
24 }
25 return $list;
26 }
27
28 /*
29 * 初始化积分游戏
30 */
31
32 function initList_4399() {
33 $this->db->query('delete from gamelist');
34
35 $echo_arr = array();
36
37 for ($j = 1; $j < 12; $j++) {
38 $file_contents = iconv('gb2312', 'utf-8//ignore', file_get_contents('http://pk.4399.com/flash/' . $j . '_1.htm'));
39 $out = array();
40 //<a href="http://pk.4399.com/user/377.htm" target="_blank"><img title="野人钓鱼" alt="野人钓鱼" border="0" src="http://swfpk.4399pk.com:8080/4399pkbak/bak/pkimg/index_img/377.jpg" width="75" height="75"></a>
41 if (preg_match_all('/<li><a href="http:\/\/pk\.4399\.com\/user\/(\d+)\.htm" target="\_blank"><img.*?title="(.*?)".*?src="(.*?)".*?><\/a><p>.*?<\/p><\/li>/', $file_contents, $out)) {
42 //return $out;
43 if (count($out) == 4) {
44 for ($i = 0; $i < count($out[1]); $i++) {
45 $sql = "insert into gamelist (gameId,gameName,gameImg,gameTid) values('{$out[1][$i]}','{$out[2][$i]}','{$out[3][$i]}','{$j}')";
46 $this->db->query($sql);
47 array_push($echo_arr, array($out[1][$i], $out[2][$i], $out[3][$i]));
48 }
49 }
50 }
51 sleep(2);
52 }
53 return $echo_arr;
54 }
55
56 /*
57 * 得到积分
58 * $id 游戏ID
59 * $total 个数
60 * $model 模式 current 当前 all 总排行 month 月排行 last 上轮
61 */
62
63 function getSocre_4399($id, $model = 'all', $total = 3) {
64 $curl = curl_init();
65 curl_setopt($curl, CURLOPT_URL, 'http://my.4399.com/flashgame.php?ac=score_' . $model . '&gameid=' . $id);
66 curl_setopt($curl, CURLOPT_COOKIE, 'Pauth=403370469|66847612|7082ed77f7c271b74d84de349009452a|1328319929|10002|bbeae2e37479547b7c0d5da25d8eb004|0;');
67 // 403370469|66847612|c389c838712319dc773eef783f972fef|1328331099|10001|60bfe9367afff7e737d00b2f998dd7f8|0
68 // 403370469|66847612|580ea10bd8ccf57035a31c7d2abef941|1328333572|10002|ef2b08825599a1fc7ef0ef399b630ca4|0
69 // 403370469|66847612|0773296261e645a773fc245d039db2a6|1328333608|10002|83a5f67767d051e8f31d26df70445663|0
70 //curl_setopt($curl, CURLOPT_REFERER, 'http://www.360buy.com/');
71 //curl_setopt($curl,CURLOPT_HTTPHEADER,array('Referer:http://www.360buy.com/'));
72 curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
73 $file_contents = curl_exec($curl);
74 curl_close($curl);
75 //$file_contents = iconv('gb2312', 'utf-8//ignore', $file_contents);
76 /* <td><a href="flashgame.php?ac=profile&uid=212607398">1051414225</a></td>
77 <td>151478</td>
78 * <td align="center"><a href="flashgame.php?ac=profile&uid=103301144">wawa6346</a></td><td align="center">172895</td>
79 * */
80 //echo $file_contents;
81 $out = array();
82 if (preg_match_all('/<td.*?><a href="flashgame.php\?ac\=profile&uid=.*?">.*?<\/a><\/td>.*?<td.*?>(\d+)<\/td>/s', $file_contents, $out)) {
83 $ret_array = array_slice($out[1], 0, $total);
84 $sql = 'update gamelist set gameScore=\'' . json_encode($ret_array) . "' where gameId='{$id}'";
85 $this->db->query($sql);
86 return $ret_array;
87 }
88 return array();
89 //echo $file_contents;
90 }
91
92 function setSocre_4399($id, $m = null, $arr = null) {
93 if (empty($arr)) {
94 $arr = $this->db->once_fetch_array('SELECT gameScore FROM gamelist where gameId=\'' . $id . '\'');
95 $arr = json_decode($arr['gameScore'], true);
96 }
97 if (empty($arr))
98 return 'error';
99
100 //平均分 冠军分 亚军分 季军分
101 if (empty($m)) {
102 $score = floor(array_sum($arr) / count($arr));
103 } else {
104 $score = $arr[$m - 1];
105 }
106
107 //toKen
108 $token = substr(file_get_contents('http://my.4399.com/flashgame/flashgame_reload_token.php'), 7);
109 $miyao = 'ok123';
110 $orderId = date("YmdHis") . rand(100000, 999999);
111 $link = 'xn';
112 //_root.result + "xn" + _root.orderId + _root.miyao + "xn" + _level0.gameId + "xn" + _root.token
113 //http://my.4399.com/flashgame.php?ac=score_submit&token=73880937914d7521321497fbf27a189beea76f&Mac=257be7e4641d73e9a94c968f986e7516&orderId=20120204234108456451&result=10&gameId=346
114 $md5_token = md5($score . $link . $orderId . $link . $miyao . $link . $id . $link . $token);
115 $url = "http://my.4399.com/flashgame.php?ac=score_submit&token={$token}&Mac={$md5_token}&orderId={$orderId}&result={$score}&gameId={$id}";
116 $curl = curl_init();
117 curl_setopt($curl, CURLOPT_URL, $url);
118 curl_setopt($curl, CURLOPT_COOKIE, 'Pauth=403370469|66847612|7082ed77f7c271b74d84de349009452a|1328319929|10002|bbeae2e37479547b7c0d5da25d8eb004|0;');
119 curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
120 //curl_setopt($curl, CURLOPT_POST, TRUE);
121 //curl_setopt($curl, CURLOPT_POSTFIELDS, "source=" . Vendor_Sina::appid . "&target_id={$target_id}");
122 $file_contents = curl_exec($curl);
123 curl_close($curl);
124 $out = array();
125 if (preg_match('/<div class="score_number"><h3>.*?<\/h3><p>(\d+)<\/p><\/div>/', $file_contents, $out)) {
126 if (is_numeric($out[1]))
127 return $out[1];
128 }
129 return 'null';
130 }
131
132 }