function GetBoardFromSite($queryParameters) { global $APPLICATION; $result = array(); $ob = new CHTTP(); $ob->http_timeout = 60; $ob->Query("GET", "old.vnukovo.ru", 80, "/rus/for-passengers/board1/data.wbp?" . $queryParameters . '&ts=' . mktime(), false, "", "N"); $result["ERROR"]["CODE"] = $ob->errno; $result["ERROR"]["MESSAGE"] = $ob->errstr; if (!intval($result["ERROR"]["CODE"])) { $res = $APPLICATION->ConvertCharset($ob->result, "UTF-8", SITE_CHARSET); //trace($res); $xml = new CDataXML(); if ($xml->LoadString($res) && ($node = $xml->SelectNodes("/responce/rows"))) { $rows = $node->elementsByName("row"); $akNames = array(); $akCodes = array(); $departures = array(); $arrivals = array(); $terminals = array(); foreach ($rows as $row) { $cells = $row->elementsByName("cell"); // Определяем код авиакомпании и номер рейса preg_match_all("/([A-Za-zА-Яа-я0-9]{2})[\\s]*([0-9]+)/", $cells[0]->content, $flightNumber, PREG_PATTERN_ORDER); $result["FLIGHTS"][] = array("FLIGHT" => array("AK_CODE" => $flightNumber[1][0], "NUMBER" => $flightNumber[2][0]), "AK_NAME" => htmlspecialcharsEx($cells[1]->content), "DEPARTURE" => htmlspecialcharsEx($cells[2]->content), "ARRIVAL" => htmlspecialcharsEx($cells[3]->content), "STATUS" => CAirportBoard::GetStatusInfo($cells[4]->content), "TIME" => array("PLANNED" => CAirportBoard::GetDateTimeArray($cells[5]->content), "ESTIMATED" => CAirportBoard::GetDateTimeArray($cells[6]->content), "ACTUAL" => CAirportBoard::GetDateTimeArray($cells[7]->content)), "TERMINAL" => htmlspecialcharsEx($cells[8]->content)); // Формируем список уникальных авиакомпаний, терминалов и пунктов вылета и прилета для фильтра if (!in_array(htmlspecialcharsEx($cells[1]->content), $akNames)) { $akNames[] = htmlspecialcharsEx($cells[1]->content); } if (!in_array($flightNumber[1][0], $akCodes)) { $akCodes[] = $flightNumber[1][0]; } if (!in_array(htmlspecialcharsEx($cells[2]->content), $departures)) { $departures[] = htmlspecialcharsEx($cells[2]->content); } if (!in_array(htmlspecialcharsEx($cells[3]->content), $arrivals)) { $arrivals[] = htmlspecialcharsEx($cells[3]->content); } if (!in_array(htmlspecialcharsEx($cells[8]->content), $terminals)) { $terminals[] = htmlspecialcharsEx($cells[8]->content); } } sort($akNames); sort($akCodes); sort($departures); sort($arrivals); sort($terminals); $result["AK_NAMES"] = $akNames; $result["AK_CODES"] = $akCodes; $result["DEPARTURES"] = $departures; $result["ARRIVALS"] = $arrivals; $result["TERMINALS"] = $terminals; } } return $result; }
function GetBoardFromSite($queryParameters) { global $APPLICATION; $result = array(); $ob = new CHTTP(); $ob->http_timeout = 60; $ob->Query("GET", "www.rossiya-airlines.com", 80, "/ru/passenger/about_flight/" . $queryParameters . '?ts=' . mktime(), false, "", "N"); $result["ERROR"]["CODE"] = $ob->errno; $result["ERROR"]["MESSAGE"] = $ob->errstr; if (intval($result["ERROR"]["CODE"]) == 0) { $res = $ob->result; $res = str_replace('<table border="0" cellpadding="0" cellspacing="0" class="table" id="tblData">', "++++<table>", $res); $res = str_replace('$(document).ready(function()', "++++", $res); $explode = explode("++++", $res); $res = $explode[1]; $res = substr($res, 0, strlen($res) - 22); $res = str_replace("<br>", " ", $res); $res = str_replace("<nobr>", "", $res); $res = str_replace("</nobr>", "", $res); //trace($res); $xml = new CDataXML(); if ($xml->LoadString($res)) { $node = $xml->SelectNodes("/table"); $rows = $node->elementsByName("tr"); $akNames = array(); $akCodes = array(); $departures = array(); $arrivals = array(); $terminals = array(); foreach ($rows as $row) { if (strstr($row->getAttribute("class"), "finddata")) { $cells = $row->elementsByName("td"); $flightNumber = $cells[0]->elementsByName("div"); // Определяем код авиакомпании и номер рейса preg_match_all("/([A-Za-zА-Яа-я0-9]{2})([0-9]+)/", $flightNumber[0]->content, $flightNumber, PREG_PATTERN_ORDER); $terminal = $cells[1]->elementsByName("div"); $city = $cells[2]->elementsByName("div"); $plannedTime = $cells[3]->elementsByName("div"); $actualTime = $cells[4]->elementsByName("div"); $status = $cells[5]->elementsByName("span"); $result["FLIGHTS"][] = array("FLIGHT" => array("AK_CODE" => $flightNumber[1][0], "NUMBER" => $flightNumber[2][0]), "AK_NAME" => "", "DEPARTURE" => htmlspecialcharsEx($city[0]->content), "ARRIVAL" => htmlspecialcharsEx($city[0]->content), "STATUS" => CAirportBoard::GetStatusInfo($status[0]->content), "TIME" => array("PLANNED" => CAirportBoard::GetDateTimeArray($plannedTime[0]->content), "ESTIMATED" => "", "ACTUAL" => CAirportBoard::GetDateTimeArray($actualTime[0]->content)), "TERMINAL" => htmlspecialchars($terminal[0]->content)); // Формируем список уникальных терминалов и пунктов вылета и прилета для фильтра if (!in_array($flightNumber[1][0], $akCodes)) { $akCodes[] = $flightNumber[1][0]; } if (!in_array(htmlspecialcharsEx($city[0]->content), $departures)) { $departures[] = htmlspecialcharsEx($city[0]->content); } if (!in_array(htmlspecialcharsEx($city[0]->content), $arrivals)) { $arrivals[] = htmlspecialcharsEx($city[0]->content); } if (!in_array(htmlspecialcharsEx($terminal[0]->content), $terminals)) { $terminals[] = htmlspecialcharsEx($terminal[0]->content); } } } sort($akNames); sort($akCodes); sort($departures); sort($arrivals); sort($terminals); $result["AK"] = $akNames; $result["AK_CODES"] = $akCodes; $result["DEPARTURES"] = $departures; $result["ARRIVALS"] = $arrivals; $result["TERMINALS"] = $terminals; } } //trace($result); return $result; }
function GetBoardFromSite($queryParameters) { $result = array(); $result = CAirportBoard::GetOneBoardFromSite($queryParameters, ""); $res = $result["HTML"]; unset($result["HTML"]); /*// Ниже код для загрузки табло за сутки (используется три запроса с последующей склейкой) $result = CAirportBoard::GetOneBoardFromSite( $queryParameters, "v=3" ); $res = $result["HTML"]; unset($result["HTML"]); $result2 = CAirportBoard::GetOneBoardFromSite( $queryParameters, "v=11" ); $res .= $result2["HTML"]; unset($result2["HTML"]); $result3 = CAirportBoard::GetOneBoardFromSite( $queryParameters, "v=19" ); $res .= $result3["HTML"]; unset($result3["HTML"]); if ( intval($result2["ERROR"]["CODE"]) ) { $result["ERROR"] = $result2["ERROR"]; } elseif ( intval($result3["ERROR"]["CODE"]) ) { $result["ERROR"] = $result3["ERROR"]; } */ if (!intval($result["ERROR"]["CODE"])) { $res = '<table>' . $res . '</table>'; $res = str_replace("<br>", " ", $res); $res = str_replace("<nobr>", "", $res); $res = str_replace("</nobr>", "", $res); //trace($res); $xml = new CDataXML(); if ($xml->LoadString($res)) { $node = $xml->SelectNodes("/table"); $rows = $node->elementsByName("tr"); $akNames = array(); $akCodes = array(); $departures = array(); $arrivals = array(); $terminals = array(); $i = 0; foreach ($rows as $row) { if (strstr($row->getAttribute("class"), "tr0")) { $cells = $row->elementsByName("td"); // Определяем код авиакомпании и номер рейса preg_match_all("/([A-Za-zА-Яа-я0-9]{2})\\s*([0-9]+)\\s*/", $cells[0]->content, $flightNumber, PREG_PATTERN_ORDER); $cityPatterns = array("/([\\W\\d]+)\\(/", "/\\s+\\)\\s*/"); $cityReplace = array("\$1 (", ")"); $result["FLIGHTS"][$i] = array("FLIGHT" => array("AK_CODE" => $flightNumber[1][0], "NUMBER" => $flightNumber[2][0]), "AK_NAME" => "", "DEPARTURE" => htmlspecialcharsEx(preg_replace($cityPatterns, $cityReplace, $cells[1]->content)), "ARRIVAL" => htmlspecialcharsEx(preg_replace($cityPatterns, $cityReplace, $cells[1]->content)), "STATUS" => CAirportBoard::GetStatusInfo($cells[5]->content), "TIME" => array("PLANNED" => CAirportBoard::GetDateTimeArray($cells[2]->content), "ESTIMATED" => "", "ACTUAL" => CAirportBoard::GetDateTimeArray($cells[3]->content)), "TERMINAL" => ""); // Формируем список уникальных терминалов и пунктов вылета и прилета для фильтра if (!in_array($flightNumber[1][0], $akCodes)) { $akCodes[] = $flightNumber[1][0]; } if (!in_array($result["FLIGHTS"][$i]["DEPARTURE"], $departures)) { $departures[] = $result["FLIGHTS"][$i]["DEPARTURE"]; } if (!in_array($result["FLIGHTS"][$i]["ARRIVAL"], $arrivals)) { $arrivals[] = $result["FLIGHTS"][$i]["ARRIVAL"]; } $i++; } } sort($akNames); sort($akCodes); sort($departures); sort($arrivals); sort($terminals); $result["AK_NAMES"] = $akNames; $result["AK_CODES"] = $akCodes; $result["DEPARTURES"] = $departures; $result["ARRIVALS"] = $arrivals; $result["TERMINALS"] = $terminals; } } return $result; }
function AddFlightsToResult($html, $result, $terminal) { $res = '<table>' . $html . '</table>'; $res = str_replace(" ", " ", $res); $res = str_replace("<br>", " ", $res); $res = preg_replace("/<!--.*-->/Uis", "", $res); $res = preg_replace("/<colgroup>.*<\\/colgroup>/Uis", "", $res); $res = preg_replace("/<param[^>]*>/Uis", "", $res); $res = preg_replace("/<a[^>]*>[^<]+<\\/a>/Uis", "", $res); //trace($res); $xml = new CDataXML(); if ($xml->LoadString($res)) { $node = $xml->SelectNodes("/table"); $rows = $node->elementsByName("tr"); $i = 0; foreach ($rows as $row) { //trace($row->getAttribute("class")); if (!strstr($row->getAttribute("class"), "onlineDetailTr")) { $cells = $row->elementsByName("td"); if (count($cells) && preg_match("/([A-Za-zА-Яа-я0-9]{2})\\s*([0-9]+)\\s*/", $cells[0]->content)) { // Определяем код авиакомпании и номер рейса preg_match_all("/([A-Za-zА-Яа-я0-9]{2})\\s*([0-9]+)\\s*/", $cells[0]->content, $flightNumber, PREG_PATTERN_ORDER); $result["FLIGHTS"][$i] = array("FLIGHT" => array("AK_CODE" => $flightNumber[1][0], "NUMBER" => $flightNumber[2][0]), "AK_NAME" => htmlspecialcharsEx($cells[5]->content), "DEPARTURE" => htmlspecialcharsEx($cells[1]->content), "ARRIVAL" => htmlspecialcharsEx($cells[1]->content), "STATUS" => CAirportBoard::GetStatusInfo($cells[4]->content), "TIME" => array("PLANNED" => CAirportBoard::GetDateTimeArray($cells[2]->content), "ESTIMATED" => "", "ACTUAL" => CAirportBoard::GetDateTimeArray($cells[3]->content)), "TERMINAL" => $terminal); // Формируем список уникальных терминалов и пунктов вылета и прилета для фильтра if (!in_array($flightNumber[1][0], $result["AK_CODES"])) { $result["AK_CODES"][] = $flightNumber[1][0]; } if (!in_array($result["FLIGHTS"][$i]["AK_NAME"], $result["AK_NAMES"]) && strlen($result["FLIGHTS"][$i]["AK_NAME"])) { $result["AK_NAMES"][] = $result["FLIGHTS"][$i]["AK_NAME"]; } if (!in_array($result["FLIGHTS"][$i]["DEPARTURE"], $result["DEPARTURES"])) { $result["DEPARTURES"][] = $result["FLIGHTS"][$i]["DEPARTURE"]; } if (!in_array($result["FLIGHTS"][$i]["ARRIVAL"], $result["ARRIVALS"])) { $result["ARRIVALS"][] = $result["FLIGHTS"][$i]["ARRIVAL"]; } if (!in_array($result["FLIGHTS"][$i]["TERMINAL"], $result["TERMINALS"])) { $result["TERMINALS"][] = $result["FLIGHTS"][$i]["TERMINAL"]; } $i++; } } } } unset($html, $xml, $res); return $result; }
function GetBoardFromSite() { $result = array(); global $APPLICATION; $ob = new CHTTP(); $ob->http_timeout = 60; $ob->Query("GET", "svo.aero", 80, "/timetable/today/?ts=" . mktime(), false, "", "N"); $result["ERROR"] = array("CODE" => $ob->errno, "MESSAGE" => $ob->errstr); $res = $APPLICATION->ConvertCharset($ob->result, "UTF-8", SITE_CHARSET); $res = str_replace('</thead><tbody>', "++++", $res); $res = str_replace('</tr></tbody></table></div>', "</tr>++++", $res); $explode = explode("++++", $res); $res = '<table>' . $explode[1] . '</table>'; $resPatterns = array("/<a[^>]*>/Uis", "/<\\/a>/Uis"); $resReplace = array("", ""); $res = preg_replace($resPatterns, $resReplace, $res); //trace($res); if (!intval($result["ERROR"]["CODE"])) { $result["INBOUND"]["AK_NAMES"] = array(); $result["INBOUND"]["AK_CODES"] = array(); $result["INBOUND"]["DEPARTURES"] = array(); $result["INBOUND"]["ARRIVALS"] = array(); $result["INBOUND"]["TERMINALS"] = array(); $result["OUTBOUND"]["AK_NAMES"] = array(); $result["OUTBOUND"]["AK_CODES"] = array(); $result["OUTBOUND"]["DEPARTURES"] = array(); $result["OUTBOUND"]["ARRIVALS"] = array(); $result["OUTBOUND"]["TERMINALS"] = array(); $xml = new CDataXML(); if ($xml->LoadString($res)) { $node = $xml->SelectNodes("/table"); $rows = $node->elementsByName("tr"); $i = 0; foreach ($rows as $row) { $boardType = strstr($row->getAttribute("class"), "sA") ? "INBOUND" : (strstr($row->getAttribute("class"), "sD") ? "OUTBOUND" : false); if ($boardType) { $cells = $row->elementsByName("td"); if (count($cells)) { $img = $cells[4]->elementsByName("img"); preg_match_all("/([0-9]{1,2}:[0-9]{1,2})/", $cells[7]->content, $timeFromStatus, PREG_PATTERN_ORDER); preg_match_all("/^([а-я]+)\\s*/i", $cells[7]->content, $status, PREG_PATTERN_ORDER); $result[$boardType]["FLIGHTS"][$i] = array("FLIGHT" => array("AK_CODE" => $cells[2]->content, "NUMBER" => $cells[3]->content), "AK_NAME" => count($img) ? htmlspecialcharsEx($img[0]->getAttribute("alt")) : "", "DEPARTURE" => htmlspecialcharsEx($cells[5]->content), "ARRIVAL" => htmlspecialcharsEx($cells[5]->content), "STATUS" => CAirportBoard::GetStatusInfo($status), "TIME" => array("PLANNED" => CAirportBoard::GetDateTimeArray($cells[1]->content, $cells[0]->content), "ESTIMATED" => strpos($cells[7]->content, "задерживается") !== false || strpos($cells[7]->content, "ожидается") !== false ? CAirportBoard::GetDateTimeArray($timeFromStatus[1][0]) : "", "ACTUAL" => strpos($cells[7]->content, "совершил посадку") !== false || strpos($cells[7]->content, "прибыл") !== false || strpos($cells[7]->content, "вылетел") !== false || strpos($cells[7]->content, "отправлен") !== false ? CAirportBoard::GetDateTimeArray($timeFromStatus[1][0]) : ""), "TERMINAL" => $cells[6]->content); // Формируем список уникальных терминалов и пунктов вылета и прилета для фильтра if (!in_array($result[$boardType]["FLIGHTS"][$i]["FLIGHT"]["AK_CODE"], $result[$boardType]["AK_CODES"])) { $result[$boardType]["AK_CODES"][] = $result[$boardType]["FLIGHTS"][$i]["FLIGHT"]["AK_CODE"]; } if (!in_array($result[$boardType]["FLIGHTS"][$i]["AK_NAME"], $result[$boardType]["AK_NAMES"]) && strlen($result[$boardType]["FLIGHTS"][$i]["AK_NAME"])) { $result[$boardType]["AK_NAMES"][] = $result[$boardType]["FLIGHTS"][$i]["AK_NAME"]; } if (!in_array($result[$boardType]["FLIGHTS"][$i]["DEPARTURE"], $result[$boardType]["DEPARTURES"])) { $result[$boardType]["DEPARTURES"][] = $result[$boardType]["FLIGHTS"][$i]["DEPARTURE"]; } if (!in_array($result[$boardType]["FLIGHTS"][$i]["ARRIVAL"], $result[$boardType]["ARRIVALS"])) { $result[$boardType]["ARRIVALS"][] = $result[$boardType]["FLIGHTS"][$i]["ARRIVAL"]; } if (!in_array($result[$boardType]["FLIGHTS"][$i]["TERMINAL"], $result[$boardType]["TERMINALS"])) { $result[$boardType]["TERMINALS"][] = $result[$boardType]["FLIGHTS"][$i]["TERMINAL"]; } $i++; } } } } sort($result["INBOUND"]["AK_NAMES"]); sort($result["INBOUND"]["AK_CODES"]); sort($result["INBOUND"]["DEPARTURES"]); sort($result["INBOUND"]["ARRIVALS"]); sort($result["INBOUND"]["TERMINALS"]); sort($result["OUTBOUND"]["AK_NAMES"]); sort($result["OUTBOUND"]["AK_CODES"]); sort($result["OUTBOUND"]["DEPARTURES"]); sort($result["OUTBOUND"]["ARRIVALS"]); sort($result["OUTBOUND"]["TERMINALS"]); /* // Сортируем рейсы по абсолютному времени вылета SortFreeStyleArray( $result["FLIGHTS"], Array( '["TIME"]["PLANNED"]["DATETIME"]' => 'ASC', '["FLIGHT"]' => 'ASC' ) ); */ //trace($result); } return $result; }