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;
 }
    $arParams["SELECTED_AIRPORT"] = $airportList[0]["CODE"];
    $airportList[0]["SELECTED"] = "Y";
    $currentAirportName = $airportList[0]["NAME"];
}
/*************************************************************************
			Work with cache
*************************************************************************/
//trace($arParams);
if ($this->StartResultCache()) {
    $arResult["SHOW_AIRPORTS_FILTER"] = $showAirportFilter ? "Y" : "N";
    // Показывать список аэропортов
    $arResult["AIRPORTS_LIST"] = $airportList;
    // Список аэропортов
    $arResult["FLIGHTS"] = array();
    // Список рейсов
    require_once $arParams["DATA_PROVIDER_PATH"] . ToLower($arParams["SELECTED_AIRPORT"]) . ".php";
    $arResult["FLIGHTS"] = CAirportBoard::GetBoard();
    if (intval($arResult["FLIGHTS"]["INBOUND"]["ERROR"]["CODE"]) || intval($arResult["FLIGHTS"]["OUTBOUND"]["ERROR"]["CODE"])) {
        $this->AbortResultCache();
        // сбрасываем кеш
    } elseif (!count($arResult["FLIGHTS"]["INBOUND"]["FLIGHTS"]) || !count($arResult["FLIGHTS"]["OUTBOUND"]["FLIGHTS"])) {
        $this->AbortResultCache();
        // сбрасываем кеш
        $arResult["FLIGHTS"]["INBOUND"]["ERROR"]["CODE"] = "1";
        $arResult["FLIGHTS"]["OUTBOUND"]["ERROR"]["CODE"] = "1";
        $arResult["FLIGHTS"]["INBOUND"]["ERROR"]["MESSAGE"] = str_replace("#AIRPORT#", $currentAirportName, GetMessage("AIRPORT_BOARD_NO_FLIGHTS"));
        $arResult["FLIGHTS"]["OUTBOUND"]["ERROR"]["MESSAGE"] = str_replace("#AIRPORT#", $currentAirportName, GetMessage("AIRPORT_BOARD_NO_FLIGHTS"));
    }
    $this->IncludeComponentTemplate();
}
//trace($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 GetBoardFromSite($queryParameters)
 {
     $result = array();
     $result = CAirportBoard::GetOneBoardFromSite($queryParameters, "p=1&time2=24");
     $result2 = CAirportBoard::GetOneBoardFromSite($queryParameters, "p=2&time2=24");
     if (intval($result2["ERROR"]["CODE"])) {
         $result["ERROR"] = $result2["ERROR"];
     }
     if (!intval($result["ERROR"]["CODE"])) {
         $result["AK_NAMES"] = array();
         $result["AK_CODES"] = array();
         $result["DEPARTURES"] = array();
         $result["ARRIVALS"] = array();
         $result["TERMINALS"] = array();
         $result = CAirportBoard::AddFlightsToResult($result["HTML"], $result, "Пулково-1");
         unset($result["HTML"]);
         $result = CAirportBoard::AddFlightsToResult($result2["HTML"], $result, "Пулково-2");
         unset($result2);
         sort($result["AK_NAMES"]);
         sort($result["AK_CODES"]);
         sort($result["DEPARTURES"]);
         sort($result["ARRIVALS"]);
         sort($result["TERMINALS"]);
         // Сортируем рейсы по абсолютному времени вылета
         SortFreeStyleArray($result["FLIGHTS"], array('["TIME"]["PLANNED"]["DATETIME"]' => 'ASC', '["FLIGHT"]' => 'ASC'));
         //trace($result);
     }
     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;
 }