private function extract_extra_bets(&$tournir_node, $html, $sport_sign, $tournir_id) { $html = str_ireplace('<li><h2>', '<li class="extra"><h2>', $html); $html = numbering_tag($html, 'li'); $table_rows = extract_all_numbered_tags($html, 'li', 'extra'); foreach ($table_rows as $row) { $row = kill_property($row, 'TagNo'); $event_id = extract_property_values(copy_be($html, '<ul', '>', 'rel'), 'rel', ''); $event_node = $this->event_find($tournir_node, $event_id); $phrase = copy_be($row, '<h2', '</h2>'); $phrase = copy_between($phrase, '>', '<'); $section_node = $this->findSection($sport_sign, $phrase); if (!(string) $section_node['Ignore']) { $bets = extract_all_tags($row, '<li', '</li>', 'rel'); foreach ($bets as $bet) { list($label, $koef) = $this->extract_label_koef($bet); $label = str_ireplace((string) $event_node['Gamer1_Name'], 'Gamer1', $label); $label = str_ireplace((string) $event_node['Gamer2_Name'], 'Gamer2', $label); $phrase_node = $this->findPhrase($sport_sign, $phrase, $label); if (!$phrase_node['Ignore']) { $this->addBet($event_node, (string) $phrase_node['BetKind'] . ';Koef=' . $koef); } } } } }
function extract_all_numbered_tags($Html, $TagName, $Contain1 = "", $Contain2 = "", $Contain3 = "") { $Tags = extract_all_tags($Html, "<{$TagName}\tTagNo=", ">", $Contain1, $Contain2, $Contain3); $Result = array(); foreach ($Tags as $tag) { $TagNo = extract_tagno($tag, $TagName); $Result[] = extract_numbered_tag($Html, $TagName, $TagNo); } return $Result; }
private function extract_events(&$tournir_node, $html, $sport_sign, $tournir_id) { $html = copy_be($html, '<table', '</table>', 'class=date'); $html = kill_space($html); $tbodies = extract_all_tags($html, '<tbody', '</tbody>'); foreach ($tbodies as $tbody) { $tbody_class = copy_be($tbody, '<', '>'); $tbody_class = str_ireplace('id=', 'class=', $tbody_class); $tbody_class = extract_property_values($tbody_class, 'class', ''); if ($tbody_class == 'date') { list($this->day_no, $this->month_no, $this->year_no) = $this->decode_date($tbody); } elseif ($tbody_class == 'chead') { $this->extract_header($sport_sign, $tbody); } elseif ($tbody_class == 'line') { if ($sport_sign == 'tennis') { $this->extract_main_bets_tennis($tournir_node, $tbody, $sport_sign, $tournir_id); } elseif ($sport_sign == 'soccer') { $this->extract_main_bets_soccer($tournir_node, $tbody, $sport_sign, $tournir_id); } } } }
private function extract_main_bets(&$tournir_node, $html, $sport_sign, $tournir_id) { $html = kill_property($html, 'TagNo'); $html = numbering_tag($html, 'tr'); $events = extract_all_numbered_tags($html, 'tr', 'event-header'); foreach ($events as $event) { // получаем $event_info = take_be($event, '<table', '</table>'); file_put_contents("Event.html", $event_info); preg_match_all('/<div class="(.*)?member-name(.*)?">(.*)?<\\/div>/imsU', $event_info, $matches); $gamer1_name = $matches[3][0]; $gamer2_name = $matches[3][1]; $datetime_str = delete_all(copy_be($event_info, '<td', '</td>', '"date"'), '<', '>'); list($day_no, $month_no, $year_no, $hour, $minute) = $this->decode_datetime($datetime_str); $extrabet = copy_be($event_info, '<a', '</a>', 'treeid'); $event_id = extract_property_values($extrabet, 'treeid', ''); $extrabet = delete_all($extrabet, '<', '>'); $event_node = $this->event_create($tournir_node, $event_id, mktime($hour, $minute, 0, $month_no, $day_no, $year_no), $gamer1_name, $gamer2_name); $cells = extract_all_tags(replace_all($event, '<td', '>', '<td>'), '<td>', '</td>'); $i = 0; foreach ($cells as $cell) { $cell = trim(copy_between($cell, '<td>', '</td>')); if ($cell) { $cell = kill_tag_bound($cell, 'a'); unset($bettype); $bettype_str = $this->header[$i]; foreach (explode(';', $bettype_str) as $bet_pair) { list($key, $value) = explode('=', $bet_pair); $bettype[$key] = $value; } if ($bettype['Kind'] == 'Total') { preg_match('/\\((.+?)\\)<br\\/>(.+?)/iU', $cell, $matches); if ($matches[2]) { $matches[2] = delete_all($matches[2], '<', '>'); $this->addBet($event_node, $bettype_str . ';Value=' . $matches[1] . ';Koef=' . $matches[2]); } } elseif ($bettype['Kind'] == 'Fora') { preg_match('/\\(([\\+\\-]*?)(.+?)\\)<br\\/>(.+?)/iU', $cell, $matches); if ($matches[3]) { $matches[3] = delete_all($matches[3], '<', '>'); $this->addBet($event_node, $bettype_str . ';Value=' . $matches[1] . $matches[2] . ';Koef=' . $matches[3]); } } else { $cell = delete_all($cell, '<', '>'); $this->addBet($event_node, $bettype_str . ';Koef=' . $cell); } } $i++; } //if ($extrabet > 0) $this->extract_extra_bets($event_node, $tournir_id, $event_id); } }
function extract_extra_bets(&$tournir_node, $html, $sport_sign, $tournir_id) { $filename_headers = "phrases/olymp/{$sport_sign}.headers.txt"; $filename_labels = "phrases/olymp/{$sport_sign}.labels.txt"; $phrases_headers = file_get_hash($filename_headers); $phrases_labels = file_get_hash($filename_labels); $html = str_ireplace('<li><h2>', '<li class="extra"><h2>', $html); $html = numbering_tag($html, 'li'); $table_rows = extract_all_numbered_tags($html, 'li', 'extra'); foreach ($table_rows as $row) { $row = kill_property($row, 'TagNo'); $event_id = extract_property_values(copy_be($html, '<ul', '>', 'rel'), 'rel', ''); $event_node = event_find($tournir_node, $event_id); $phrase = copy_be($row, '<h2', '</h2>'); $phrase = copy_between($phrase, '>', '<'); unset($bettype); $bettype_str = $phrases_headers[$phrase]; if ($bettype_str) { foreach (explode(';', $bettype_str) as $bet_pair) { list($key, $value) = explode('=', $bet_pair); $bettype[$key] = $value; } } else { $bettype['Modifier'] = 'Unknown'; $phrases_headers[$phrase] = 'Modifier=Unknown'; $phrases_headers_modified = true; } if (!in_array($bettype['Modifier'], array('Ignore', 'Unknown'))) { $bets = extract_all_tags($row, '<li', '</li>', 'rel'); foreach ($bets as $bet) { list($label, $koef) = extract_label_koef($bet); $label = str_ireplace((string) $event_node['Gamer1_Name'], 'Gamer1', $label); $label = str_ireplace((string) $event_node['Gamer2_Name'], 'Gamer2', $label); $modifier = $phrases_labels[$label]; if ($modifier) { foreach (explode(';', $modifier) as $bet_pair) { list($key, $value) = explode('=', $bet_pair); $bettype[$key] = $value; } } else { $bettype['Modifier'] = 'Unknown'; $phrases_labels[$label] = 'Modifier=Unknown'; $phrases_labels_modified = true; } if (!in_array($bettype['Modifier'], array('Ignore', 'Unknown'))) { $bet_node = $event_node->addChild('Bet'); foreach ($bettype as $key => $value) { $bet_node->addAttribute($key, $value); } $bet_node->addAttribute('Koef', $koef); } unset($bettype['Modifier']); } } $i++; } // отбираем новые и складываем их в новый файл if ($phrases_headers_modified) { $file_hash = file_get_hash($filename_headers); foreach ($file_hash as $key => $value) { unset($phrases_headers[$key]); } file_put_hash($filename_headers . '.new', $phrases_headers + file_get_hash($filename_headers . '.new')); } if ($phrases_labels_modified) { $file_hash = file_get_hash($filename_labels); foreach ($file_hash as $key => $value) { unset($phrases_labels[$key]); } file_put_hash($filename_labels . '.new', $phrases_labels + file_get_hash($filename_labels . '.new')); } }
function extract_bets_foratotal(&$tournir_node, $html, $sport_sign, $tournir_id, $category_id) { $i = 0; $filename_headers = "phrases/bwin/{$sport_sign}.headers.txt"; $filename_labels = "phrases/bwin/{$sport_sign}.labels.txt"; $phrases_headers = file_get_hash($filename_headers); $phrases_labels = file_get_hash($filename_labels); $html = kill_space($html); $html = numbering_tag($html, 'tr'); $table_rows = extract_all_numbered_tags($html, 'tr', 'class'); // file_put_contents("lines/bwin/$tournir_id.Total.html", $html); foreach ($table_rows as $row) { $row = kill_property($row, 'TagNo'); $header = copy_be($row, '<tr', '>'); $row_class_name = extract_property_values($header, 'class', null); if ($row_class_name == 'topbar') { // разбираем дату $row = copy_between($row, '<h3>', '</h3>'); list($day_no, $month_no, $year_no) = decode_date($row); } elseif (in_array($row_class_name, array('def', 'alt'))) { // игроки + время if (preg_match('/<td.*>(<h4>)*?(.+) - (.+) - (\\d{1,2}:\\d\\d (PM|AM))(.*?)(<\\/h4>)*?</Ui', $row, $matches)) { $gamer1_name = utf8_to_ansi_ce($matches[2]); $gamer2_name = utf8_to_ansi_ce($matches[3]); list($hour, $minute) = decode_time($matches[4]); } elseif (preg_match('/<td.*>(<h5>)*?(.+)(<\\/h5>)*?</iU', $row, $matches)) { $phrase = utf8_to_ansi_ce($matches[2]); unset($bettype); $phrase = str_ireplace($gamer1_name, 'Gamer1', $phrase); $phrase = str_ireplace($gamer2_name, 'Gamer2', $phrase); $bettype_str = $phrases_headers[$phrase]; if ($bettype_str) { foreach (explode(';', $bettype_str) as $bet_pair) { list($key, $value) = explode('=', $bet_pair); $bettype[$key] = $value; } } else { $bettype['Modifier'] = 'Unknown'; $phrases_headers[$phrase] = 'Modifier=Unknown'; $phrases_headers_modified = true; } } } elseif ($row_class_name == 'normal' and $bettype) { // основная ставка if (!in_array($bettype['Modifier'], array('Ignore', 'Unknown'))) { $tables = extract_all_tags($row, '<table', '</table>'); foreach ($tables as $table) { list($label, $koef) = extract_label_koef($table); $label = str_ireplace($gamer1_name, 'Gamer1', $label); $label = str_ireplace($gamer2_name, 'Gamer2', $label); // подбираем формат фразы метки $modifier = $phrases_labels[$label]; if ($modifier) { foreach (explode(';', $modifier) as $bet_pair) { list($key, $value) = explode('=', $bet_pair); $bettype[$key] = $value; } } else { $bettype['Modifier'] = 'Unknown'; $phrases_labels[$label] = 'Modifier=Unknown'; $phrases_labels_modified = true; } if (!in_array($bettype['Modifier'], array('Ignore', 'Unknown'))) { $event_node = event_find_or_create($tournir_node, mktime($hour, $minute, 0, $month_no, $day_no, $year_no), $gamer1_name, $gamer2_name); $bet_node = $event_node->addChild('Bet'); foreach ($bettype as $key => $value) { $bet_node->addAttribute($key, $value); } $bet_node->addAttribute('Koef', $koef); } unset($bettype['Modifier']); } } } $i++; } // отбираем новые и складываем их в новый файл if ($phrases_headers_modified) { $file_hash = file_get_hash($filename_headers); foreach ($file_hash as $key => $value) { unset($phrases_headers[$key]); } file_put_hash($filename_headers . '.new', $phrases_headers + file_get_hash($filename_headers . '.new')); } if ($phrases_labels_modified) { $file_hash = file_get_hash($filename_labels); foreach ($file_hash as $key => $value) { unset($phrases_labels[$key]); } file_put_hash($filename_labels . '.new', $phrases_labels + file_get_hash($filename_labels . '.new')); } }