<?php
set_time_limit(0);
date_default_timezone_set('Asia/Hong_Kong');
libxml_use_internal_errors(true);
// $pathLeagueListCache = __DIR__. '/__league_list.txt';
$batchCount = 5;
$xpathRegion = '//*[@id="btnGroup_EventSelection"]/ul';
$xpathRegionName = './/li[1]';
$xpathLeagueForRegionView = './/li[position()>1]';
$xpathLeagueIdForRegionView = './/input[@name="SportChk"]';
$xpathLeagueNameForRegionView = './/label';
$xpathLeague = '//div[@data-type="match"]';
$xpathLeagueName = './/h5';
$urlLeague = 'http://bb248.com/sb/Sport.aspx?s=137&lang=en';
$urlMatch = 'http://bb248.com/sb/event.aspx?lang=en';
$xpathMatch = './/div[@data-type="parent"]';
$xpathQueries = array(
'event_type' => './/span[@class="versus"]',
'event_name' => './/li[@data-symbol="eventname"]',
'home_name' => './/tr[@data-symbol="home"]/td[@data-symbol="name"]',
'away_name' => './/tr[@data-symbol="away"]/td[@data-symbol="name"]',
'home_match_odd' => './/tr[@data-symbol="home"]/td[@data-symbol="mb"]/button[@data-symbol="odd"]',
'away_match_odd' => './/tr[@data-symbol="away"]/td[@data-symbol="mb"]/button[@data-symbol="odd"]',
'hc_number' => './/tr[@data-symbol="home"]/td[@data-symbol="hc"]/p[@class="number-odds"]',
'home_hc_odd' => './/tr[@data-symbol="home"]/td[@data-symbol="hc"]/button[@data-symbol="odd"]',
'away_hc_odd' => './/tr[@data-symbol="away"]/td[@data-symbol="hc"]/button[@data-symbol="odd"]',
'total_number' => './/tr[@data-symbol="home"]/td[@data-symbol="ou"]/p[@class="number-overunder"]',
'home_total_odd' => './/tr[@data-symbol="home"]/td[@data-symbol="ou"]/button[@data-symbol="odd"]',
'away_total_odd' => './/tr[@data-symbol="away"]/td[@data-symbol="ou"]/button[@data-symbol="odd"]',
'datetime' => './/span[@data-symbol="datetime"]',
);
function stripCountSuffix($name) {
return preg_replace('/\\d+$/', '', $name);
}
$ch = curl_init();
curl_setopt_array($ch, array(
CURLOPT_RETURNTRANSFER => true,
));
curl_setopt($ch, CURLOPT_URL, $urlLeague);
// //load league list
$doc = new DOMDocument();
$doc->loadHTML(curl_exec($ch));
$regions = array();
$xpath = new DOMXpath($doc);
var_dump($xpath);
echo 'xx';
die();
var_dump($xpath->query($xpathRegion));
foreach($xpath->query($xpathRegion) as $region) {
var_dump(get_class($region));
var_dump(get_class($xpath->query($xpathRegionName, $region)->item(0)));
$regionName = stripCountSuffix($xpath->query($xpathRegionName, $region)->item(0)->nodeValue);
echo $regionName;
// foreach($xpath->query($xpathLeagueForRegionView, $region) as $league) {
// $regions[$regionName][stripCountSuffix($xpath->query($xpathLeagueNameForRegionView, $region)[0]->nodeValue)]
// = $xpath->query($xpathLeagueIdForRegionView, $league)[0]->getAttribute('value');
// }
}
// // set URL and other appropriate options
curl_setopt($ch, CURLOPT_URL, $urlMatch);
// $counter = 0;
// $data = [];
// while ($slice = array_slice(array_values(call_user_func_array('array_merge', $regions)), $counter * $batchCount, $batchCount)) {
// $postData = [
// '__EVENTTARGET' => 'ctl00$ctl00$cphMainBody$cphMain75$imgEvSpHolder',
// '__VIEWSTATEGENERATOR' => '9257D4C3',
// 'SportChk' => $slice,
// 'eventType' => 'handicap',
// ];
// curl_setopt($ch, CURLOPT_POST, count($postData));
// //remove [index] suffix in post data field name which is causing problem
// curl_setopt($ch, CURLOPT_POSTFIELDS, preg_replace('/%5B\d+%5D/simU', '', http_build_query($postData)));
// $doc = new DOMDocument();
// $doc->loadHTML(curl_exec($ch));
// $xpath = new DOMXpath($doc);
// foreach($xpath->query($xpathLeague) as $league) {
// $leagueName = $xpath->query($xpathLeagueName, $league)[0]->nodeValue;
// foreach($xpath->query($xpathMatch, $league) as $match) {
// $datum = [];
// $id = $match->getAttribute('data-symbol');
// $datum['league'] = $leagueName;
// foreach($xpathQueries as $key => $query) {
// $nodeList = $xpath->query($query, $match);
// $datum[$key] = $nodeList->length > 0? trim($nodeList[0]->nodeValue): null;
// }
// $datum['has_hc'] = isset($datum['hc_number']);
// $datum['has_match'] = isset($datum['home_match_odd']) && isset($datum['away_match_odd']);
// $datum['has_total'] = isset($datum['total_number']);
// $datum['total_number'] = isset($datum['total_number'])? ltrim($datum['total_number'], 'ou'):null; //total number
// //if (array_key_exists('hc_number', $datum)) {
// $datum['is_home_handicap'] = $datum['hc_number'] > 0;
// $datum['hc_number'] = abs($datum['hc_number']);
// //}
// if ('at' == $datum['event_type']) {
// foreach(['name', 'match_odd', 'hc_odd', 'total_odd'] as $key) {
// list($datum['home_'. $key], $datum['away_'. $key]) = [$datum['away_'. $key], $datum['home_'. $key]];
// }
// $datum['is_home_handicap'] = !$datum['is_home_handicap'];
// }
// // normalize odds
// foreach($datum as $key => $value) {
// if (stripos(strrev($key), strrev('_odd')) === 0 && !is_null($value)) {
// $datum[$key] = $datum[$key] * 100 - 100;
// }
// }
// $data[$id] = $datum;
// $string = implode('|', [
// $id,
// (new \DateTime($datum['datetime']))->format('Y-m-d H:i:s'),
// $datum['event_name'],
// $datum['home_name'],
// null,
// $datum['away_name'],
// null,
// (int)$datum['has_match'], //has match bet
// null, //match id
// isset($datum['home_match_odd'])? $datum['home_match_odd']: 0,
// isset($datum['home_match_odd'])? 100: 1,
// isset($datum['away_match_odd'])? $datum['away_match_odd']: 0,
// isset($datum['away_match_odd'])? 100: 1,
// (int)$datum['has_hc'], //has handicap bet
// null, //handicap id
// $datum['hc_number'], //handicap number
// $datum['is_home_handicap'], //handicap number
// isset($datum['home_hc_odd'])? $datum['home_hc_odd']: 0,
// isset($datum['home_hc_odd'])? 100: 1,
// isset($datum['away_hc_odd'])? $datum['away_hc_odd']: 0,
// isset($datum['away_hc_odd'])? 100: 1,
// (int)$datum['has_total'], //has handicap bet
// null, //total id
// $datum['total_number'], //total number
// isset($datum['home_total_odd'])? $datum['home_total_odd']: 0,
// isset($datum['home_total_odd'])? 100: 1,
// isset($datum['away_total_odd'])? $datum['away_total_odd']: 0,
// isset($datum['away_total_odd'])? 100: 1,
// $datum['league'],
// ]);
// echo ($string);
// echo '</br>';
// }
// }
// $counter++;
// }
// curl_close($ch);
?>
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 79) Position 1 = -2
filename: /in/d8MoL
function name: (null)
number of ops: 103
compiled vars: !0 = $batchCount, !1 = $xpathRegion, !2 = $xpathRegionName, !3 = $xpathLeagueForRegionView, !4 = $xpathLeagueIdForRegionView, !5 = $xpathLeagueNameForRegionView, !6 = $xpathLeague, !7 = $xpathLeagueName, !8 = $urlLeague, !9 = $urlMatch, !10 = $xpathMatch, !11 = $xpathQueries, !12 = $ch, !13 = $doc, !14 = $regions, !15 = $xpath, !16 = $region, !17 = $regionName
line #* E I O op fetch ext return operands
-------------------------------------------------------------------------------------
2 0 E > INIT_FCALL 'set_time_limit'
1 SEND_VAL 0
2 DO_ICALL
4 3 INIT_FCALL 'date_default_timezone_set'
4 SEND_VAL 'Asia%2FHong_Kong'
5 DO_ICALL
5 6 INIT_FCALL 'libxml_use_internal_errors'
7 SEND_VAL <true>
8 DO_ICALL
10 9 ASSIGN !0, 5
12 10 ASSIGN !1, '%2F%2F%2A%5B%40id%3D%22btnGroup_EventSelection%22%5D%2Ful'
13 11 ASSIGN !2, '.%2F%2Fli%5B1%5D'
14 12 ASSIGN !3, '.%2F%2Fli%5Bposition%28%29%3E1%5D'
15 13 ASSIGN !4, '.%2F%2Finput%5B%40name%3D%22SportChk%22%5D'
16 14 ASSIGN !5, '.%2F%2Flabel'
18 15 ASSIGN !6, '%2F%2Fdiv%5B%40data-type%3D%22match%22%5D'
19 16 ASSIGN !7, '.%2F%2Fh5'
21 17 ASSIGN !8, 'http%3A%2F%2Fbb248.com%2Fsb%2FSport.aspx%3Fs%3D137%26lang%3Den'
22 18 ASSIGN !9, 'http%3A%2F%2Fbb248.com%2Fsb%2Fevent.aspx%3Flang%3Den'
24 19 ASSIGN !10, '.%2F%2Fdiv%5B%40data-type%3D%22parent%22%5D'
25 20 ASSIGN !11, <array>
45 21 INIT_FCALL_BY_NAME 'curl_init'
22 DO_FCALL 0 $33
23 ASSIGN !12, $33
47 24 INIT_FCALL_BY_NAME 'curl_setopt_array'
25 SEND_VAR_EX !12
48 26 FETCH_CONSTANT ~35 'CURLOPT_RETURNTRANSFER'
27 INIT_ARRAY ~36 <true>, ~35
28 SEND_VAL_EX ~36
29 DO_FCALL 0
51 30 INIT_FCALL_BY_NAME 'curl_setopt'
31 SEND_VAR_EX !12
32 FETCH_CONSTANT ~38 'CURLOPT_URL'
33 SEND_VAL_EX ~38
34 SEND_VAR_EX !8
35 DO_FCALL 0
54 36 NEW $40 'DOMDocument'
37 DO_FCALL 0
38 ASSIGN !13, $40
55 39 INIT_METHOD_CALL !13, 'loadHTML'
40 INIT_FCALL_BY_NAME 'curl_exec'
41 SEND_VAR_EX !12
42 DO_FCALL 0 $43
43 SEND_VAR_NO_REF_EX $43
44 DO_FCALL 0
57 45 ASSIGN !14, <array>
58 46 NEW $46 'DOMXpath'
47 SEND_VAR_EX !13
48 DO_FCALL 0
49 ASSIGN !15, $46
59 50 INIT_FCALL 'var_dump'
51 SEND_VAR !15
52 DO_ICALL
60 53 ECHO 'xx'
61 54 > EXIT
62 55* INIT_FCALL 'var_dump'
56* INIT_METHOD_CALL !15, 'query'
57* SEND_VAR_EX !1
58* DO_FCALL 0 $50
59* SEND_VAR $50
60* DO_ICALL
63 61* INIT_METHOD_CALL !15, 'query'
62* SEND_VAR_EX !1
63* DO_FCALL 0 $52
64* FE_RESET_R $53 $52, ->95
65* FE_FETCH_R $53, !16, ->95
64 66* INIT_FCALL 'var_dump'
67* GET_CLASS ~54 !16
68* SEND_VAL ~54
69* DO_ICALL
65 70* INIT_FCALL 'var_dump'
71* INIT_METHOD_CALL !15, 'query'
72* SEND_VAR_EX !2
73* SEND_VAR_EX !16
74* DO_FCALL 0 $56
75* INIT_METHOD_CALL $56, 'item'
76* SEND_VAL_EX 0
77* DO_FCALL 0 $57
78* GET_CLASS ~58 $57
79* SEND_VAL ~58
80* DO_ICALL
66 81* INIT_FCALL 'stripcountsuffix'
82* INIT_METHOD_CALL !15, 'query'
83* SEND_VAR_EX !2
84* SEND_VAR_EX !16
85* DO_FCALL 0 $60
86* INIT_METHOD_CALL $60, 'item'
87* SEND_VAL_EX 0
88* DO_FCALL 0 $61
89* FETCH_OBJ_R ~62 $61, 'nodeValue'
90* SEND_VAL ~62
91* DO_FCALL 0 $63
92* ASSIGN !17, $63
67 93* ECHO !17
63 94* JMP ->65
95* FE_FREE $53
75 96* INIT_FCALL_BY_NAME 'curl_setopt'
97* SEND_VAR_EX !12
98* FETCH_CONSTANT ~65 'CURLOPT_URL'
99* SEND_VAL_EX ~65
100* SEND_VAR_EX !9
101* DO_FCALL 0
175 102* > RETURN 1
Function stripcountsuffix:
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename: /in/d8MoL
function name: stripCountSuffix
number of ops: 8
compiled vars: !0 = $name
line #* E I O op fetch ext return operands
-------------------------------------------------------------------------------------
41 0 E > RECV !0
42 1 INIT_FCALL 'preg_replace'
2 SEND_VAL '%2F%5Cd%2B%24%2F'
3 SEND_VAL ''
4 SEND_VAR !0
5 DO_ICALL $1
6 > RETURN $1
43 7* > RETURN null
End of function stripcountsuffix
Generated using Vulcan Logic Dumper, using php 8.0.0
preferences:
172.91 ms | 1411 KiB | 24 Q