Способы оплаты круиза/тура
   

Key = '9bf3838b5620523c08dcc729fec4accb'; $NikaCruiseRiverSearch->Charset = 'windows-1251'; echo $NikaCruiseRiverSearch->run(); class NikaCruiseRiverSearch { public $Version = '1.5'; ////////////////////////////////////////////// // НАСТРОЙКИ // #Ваш ключ доступа к поиску public $Key = '9bf3838b5620523c08dcc729fec4accb'; #Кодировка используемая у Вас на сайте public $Charset = 'windows-1251'; #Формат данных public $Format = 'json'; #Способ загрузки контента с сайта НИКИ (на выбор или cURL или file_get_contents) public $GetPageMode = 'file_get_contents'; #Показывать специальные акции на стартовой. public $Adv = true; #Массив названий месяцев public $MonthRus = array( 1 => 'Янв', 2 => 'Фев', 3 => 'Мар', 4 => 'Апр', 5 => 'Май', 6 => 'Июн', 7 => 'Июл', 8 => 'Авг', 9 => 'Сен', 10 => 'Окт', 11 => 'Ноя', 12 => 'Дек' ); ############################################# # ШАБЛОНЫ #шаблон вывода найденных круизов public $TemplateOutHeader = ' '; } } $ret .= '
'; } else { while ($DATES['now_month'] != $m) { $ret .= ''; if ($m % 3 == 0) $ret .= ''; $m++; } while ($m < 13) { $ret .= ''; if ($m % 3 == 0) $ret .= ''; $m++; } $ret .= '
Найдено %total_cruises% круизов <<назад
'; public $TemplateOutContent = ''; public $TemplateOutFooter = '
Даты круиза Кол-во
дней
Язык Название круиза Цена Маршрут Теплоход
%start%
-
%stop%
%days% %langs% %name% %min_price%
Страны: %countries%
Реки: %rivers%
%ship_photo%
%ship%
'; # #шаблон формы поиска public $TemplateForm = ' '; else $tmp['ADVERTISING'] .= ''; } } if (empty($tmp['ADVERTISING'])) $tmp['ADVERTISING'] .= ''; $Output = $this->Template($this->TemplateForm, $tmp); //Вывод на экран } return $Output; } #### FUNCTIONS #### public function get_vars() { $content = $this->GetPage('http://nikatravel.ru/river/get_vars.php?key=' . $this->Key . '&format=' . $this->Format); if ($this->Format == 'json') { $VarsNika = json_decode($content, true); foreach ($VarsNika as $key => $val) { if (is_object($val)) $VarsNika[$key] = (array)$VarsNika[$key]; } } else { $VarsNika = simplexml_load_string($content); if (is_object($VarsNika)) { $Arr = array(); foreach ($VarsNika as $key => $val) { $Arr[$key][(string)$val->attributes()->id] = (string)$val; } $VarsNika = $Arr; $VarsNika['max_date'] = $VarsNika['max_date']['max_date']; } } return $VarsNika; } protected function DateCruise($max_date) { #Обработка дат if (preg_match("#^[0-9]{4}-[0-9]{2}$#", $max_date)) { $DATES['max_year'] = date("Y", strtotime($max_date)); $DATES['max_month'] = date("m", strtotime($max_date)); } else { $DATES['max_year'] = date("Y") + 1; $DATES['max_month'] = date("m"); } $DATES['now_year'] = date("Y"); $DATES['now_month'] = date("m"); $ret = '

Теплоходы

<<назад
' ; # #шаблон сообщения, если не найден ни один круиз public $TemplateSearchNull = '
Найдено 0 круизов. Попробуйте изменить Ваш запрос.
'; #шаблон сообщения, если произошла ошибка при поиске public $TemplateSearchError = '
Произошла ошибка. Повторите Ваш запрос позже.
'; #шаблон сообщения, если произошла ошибка при загрузке страницы с информацией о круизе или теплоходе public $TemplateContentError = '
Произошла ошибка. Не удалось загрузить страницу.
'; #шаблон сообщения, если произошла ошибка при загрузке основных переменных с сайта ники (компании, реки, страны) public $TemplateStartError = '
Произошла ошибка. Не удалось инициализировать поиск.
'; # # ############################################# // КОНЕЦ НАСТРОЕК // ////////////////////////////////////////////// public function run() { if (!function_exists('json_encode') && !function_exists('simplexml_load_string')) return 'PHP JSON or XML module not installed.'; $Output = ''; //если послан запрос на поиск if (isset($_REQUEST['cruise_search'])) { //запоминаем эту строчку поиска и передаем запрос на сервер НИКИ $QUERY = ''; foreach ($_GET as $key => $val) { if (is_array($val)) { foreach ($val as $key_arr => $val_arr) { $QUERY .= '&' . $key . '[' . @urlencode($key_arr) . ']=on'; } } else $QUERY .= '&' . $key . '=' . @urlencode($val); } $content = $this->GetPage('http://nikatravel.ru/river/river_search.php?key=' . $this->Key . '&format=' . $this->Format . $QUERY); //проверяем ответ, если не было ошибки, то парсим полученную информацию if (!empty($content) && !strstr(substr($content, 0, 20), 'ERROR_')) { if ($this->Format == 'json') { $content = json_decode($content); if (!stristr($this->Charset, 'utf-8')) { for ($i = 0; $i < count($content); $i++) { $content[$i]->name = iconv('utf-8', $this->Charset . '//IGNORE', $content[$i]->name); $content[$i]->countries = iconv('utf-8', $this->Charset . '//IGNORE', $content[$i]->countries); $content[$i]->rivers = iconv('utf-8', $this->Charset . '//IGNORE', $content[$i]->rivers); $content[$i]->min_price = iconv('utf-8', $this->Charset . '//IGNORE', $content[$i]->min_price); } } } elseif ($this->Format == 'xml') { $content = simplexml_load_string($content); for ($i = 0; $i < count($content->cruise); $i++) { $content->cruise[$i]->id = $content->cruise[$i]->attributes(); if (!stristr($this->Charset, 'utf-8')) { $content->cruise[$i]->name = iconv('utf-8', $this->Charset . '//IGNORE', (string)$content->cruise[$i]->name); $content->cruise[$i]->countries = iconv('utf-8', $this->Charset . '//IGNORE', (string)$content->cruise[$i]->countries); $content->cruise[$i]->rivers = iconv('utf-8', $this->Charset . '//IGNORE', (string)$content->cruise[$i]->rivers); $content->cruise[$i]->min_price = iconv('utf-8', $this->Charset . '//IGNORE', (string)$content->cruise[$i]->min_price); } } } //всего круизов $total_cruises = sizeof($content); if ($total_cruises > 0) { $VarsNika = $this->get_vars(); $langs = !empty($VarsNika['LANGS']) ? $VarsNika['LANGS'] : array(); //выводим шапку $Output = $this->Template($this->TemplateOutHeader, array('total_cruises' => $total_cruises)); //дальше выводим информацию о каждом круизе foreach ($content as $cruise) { $cruise->ship_photo = !empty($cruise->ship_photo) ? 'Фото теплохода' : ''; $langs[$cruise->langs][0] = iconv("utf-8", "windows-1251", $langs[$cruise->langs][0]); $cruise->langs = isset($langs[$cruise->langs]) ? '' . $langs[$cruise->langs][0] . '' : ''; $Output .= $this->Template($this->TemplateOutContent, $cruise); } //выводим конец шаблона $Output .= $this->TemplateOutFooter; } else $Output = $this->TemplateSearchNull; } else $Output = $this->TemplateSearchError; } //если послан запрос на показ информации о круизе или корабле elseif (isset($_GET['show_cruise'])) { if (!empty($_GET['tid'])) { $tid = intval($_GET['tid']); $content = $this->GetPage('http://nikatravel.ru/river/simple_content.php?key=' . $this->Key . '&tid=' . $tid); } elseif (!empty($_GET['hid'])) { $hid = intval($_GET['hid']); $content = $this->GetPage('http://nikatravel.ru/river/simple_content.php?key=' . $this->Key . '&hid=' . $hid); } //если удалось загрузить страницу, то выводим её, иначе ошибку if (!empty($content) && !strstr(substr($content, 0, 20), 'ERROR_')) { if (!stristr($this->Charset, 'utf-8')) $Output = iconv('utf-8', $this->Charset . '//IGNORE', $content); else $Output = $content; } else $Output = $this->TemplateContentError; } elseif (isset($_GET['show_ships'])) { $content = $this->GetPage('http://nikatravel.ru/river/get_ships.php?key=' . $this->Key); //если удалось загрузить страницу, то выводим её, иначе ошибку if (!empty($content) && !strstr(substr($content, 0, 20), 'ERROR_')) { if (!stristr($this->Charset, 'utf-8')) $Output = iconv('utf-8', $this->Charset . '//IGNORE', $content); else $Output = $content; } else $Output = $this->TemplateContentError; } //иначе выводим форму поиска else { $VarsNika = $this->get_vars(); if (empty($VarsNika)) { return $this->TemplateStartError; } $tmp = array( 'COMPANIES' => $this->Array2Companies($VarsNika['COMPANIES'], $VarsNika['COMPANIES_SERVICE']), 'COUNTRIES' => $this->Array2Data('countries', $VarsNika['COUNTRIES']), 'RIVERS' => $this->Array2Data('rivers', $VarsNika['RIVERS']), 'DateCruise' => $this->DateCruise($VarsNika['max_date']), 'LANGS' => $this->Langs($VarsNika['LANGS']) ); if ($this->Adv) { $tmp['ADVERTISING'] = ''; foreach ($VarsNika['ADVERTISING'] as $adv) { if ($this->Format == 'xml') $adv = htmlspecialchars_decode($adv); if (!stristr($this->Charset, 'utf-8')) $tmp['ADVERTISING'] .= '
' . iconv('utf-8', $this->Charset . '//IGNORE', $adv) . '' . $adv . ' 
'; for ($y = $DATES['now_year']; $y <= $DATES['max_year']; $y++) { $ret .= ''; } elseif ($y == $DATES['max_year']) { $DATES['now_month'] = $DATES['max_month'] + 1; while ($DATES['now_month'] != $m) { $ret .= ''; if ($m % 3 == 0) $ret .= ''; $m++; } while ($m < 13) { $ret .= ''; if ($m % 3 == 0) $ret .= ''; $m++; } $ret .= '
'; $m = 1; if (($y != $DATES['now_year']) && ($y < $DATES['max_year'])) { $DATES['now_month'] = 12; while ($m < 13) { $ret .= ''; if ($m % 3 == 0) $ret .= ''; $m++; } $ret .= '
' . $y . '
' . $this->MonthRus[$m] . '
' . $this->MonthRus[$m] . '
'; return $ret; } protected function Array2Data($name, $arr, $break = 5) { asort($arr); $ret = ''; $i = 0; foreach ($arr as $key => $val) { if ($i % $break == 0 && $i != 0) $ret .= ''; if (!stristr($this->Charset, 'utf-8')) $val = iconv('utf-8', $this->Charset . '//IGNORE', $val); $ret .= ''; $i++; } while ($i % $break != 0) { $ret .= ''; $i++; } $ret .= '
 
'; return $ret; } protected function Array2Companies($companies, $services) { foreach ($companies as $key => $val) $companies[intval($key)] = $val; $ret = ''; foreach ($services as $key => $val) { if (!stristr($this->Charset, 'utf-8')) $val = iconv('utf-8', $this->Charset . '//IGNORE', $val); $ret .= ''; } $ret .= '
' . $val . '
'; $key = explode(',', $key); foreach ($key as $id) { if (!stristr($this->Charset, 'utf-8')) $companies[intval($id)] = iconv('utf-8', $this->Charset . '//IGNORE', $companies[$id]); $ret .= '
'; } $ret .= '
'; return $ret; } protected function Langs($langs) { $ret = ''; foreach ($langs as $key => $val) { if (!empty($val[1])) { $val[0] = iconv("utf-8", "windows-1251", $val[0]); $val[1] = '' . $val[0] . ''; } else { $val[1] = $val[0]; } $checked = ($key == -1) ? ' checked="checked"' : ''; #$val[1] = iconv("utf-8", "windows-1251", $val[1]); $ret .= ''; } return $ret; } protected function Template($tpl, $arr) { foreach ($arr as $key => $val) { if (empty($val)) $val = ' '; $tpl = str_replace('%' . $key . '%', $val, $tpl); } return $tpl; } protected function GetPage($url, $method = 'get', $postdata = '') { $content = ''; if (stristr($this->GetPageMode, 'curl') or stristr($method, 'post') or !empty($postdata)) { if (!function_exists('curl_init')) exit('cURL support disabled.'); $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); if (stristr($method, 'post') && !empty($postdata)) { curl_setopt($curl, CURLOPT_POST, 1); curl_setopt($curl, CURLOPT_POSTFIELDS, $postdata); } $content = curl_exec($curl); curl_close($curl); } else { $content = @file_get_contents($url); } return $content; } } ?>
Copyright © 2013 Москва
Компания "Дискавери Групп"
www.Discovercruise.ru
107031, РОССИЯ, г. Москва,
Столешников пер., д.11, офис 207
Тел.: 8 (499) 429-09-51





*/ ?>