0
Курс валют
Автор Feaire, 30 нояб. 2015 19:09
Сообщений в теме: 6
#1
Отправлено 30 Ноябрь 2015 - 19:09
Добрый день.
Возник такой вопрос, как сделать так что бы с сайта http://www.cbr.ru/
Брался курс евро на сегодняшний день автоматически и ставился в ячейку?
Далее при выставлении счет или отчета мне надо будет рубли переводить в евро по курсу и так что бы то что уже создали завтра не обновлялось по новому курсу.
Возник такой вопрос, как сделать так что бы с сайта http://www.cbr.ru/
Брался курс евро на сегодняшний день автоматически и ставился в ячейку?
Далее при выставлении счет или отчета мне надо будет рубли переводить в евро по курсу и так что бы то что уже создали завтра не обновлялось по новому курсу.
#2
Отправлено 30 Ноябрь 2015 - 23:48
В интернете можно найти такие решения. Вот, например:
Функция usd_euro() вернет массив, где будут текущие курсы USD и EURO:
В КБ создайте дополнительное действие и производите конвертацию по мере необходимости. Или раскомментируйте в коде функции условия по дате и передавайте нужную дату в качества параметра. В обоих случаях у Вас будет актуальная правильная конвертация.
//////////////////////// Получение курсов валют function usd_euro() { // Получаем текущие курсы валют в rss-формате с сайта www.cbr.ru $content = get_content(); // Разбираем содержимое, при помощи регулярных выражений $pattern = "#<Valute ID=\"([^\"]+)[^>]+>[^>]+>([^<]+)[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>([^<]+)[^>]+>[^>]+>([^<]+)#i"; preg_match_all($pattern, $content, $out, PREG_SET_ORDER); $dollar = ""; $euro = ""; foreach($out as $cur) { if($cur[2] == 840) $dollar = str_replace(",",".",$cur[4]); if($cur[2] == 978) $euro = str_replace(",",".",$cur[4]); } return array ($dollar,$euro); } function get_content() { // Формируем сегодняшнюю дату // $date = date("d/m/Y"); // Без даты - на последнюю дату // Формируем ссылку // $link = "http://www.cbr.ru/scripts/XML_daily.asp?date_req=$date"; // Без даты - на последнюю дату $link = "http://www.cbr.ru/scripts/XML_daily.asp"; // Загружаем HTML-страницу $fd = fopen($link, "r"); $text=""; if (!$fd) echo "Запрашиваемая страница не найдена"; else { // Чтение содержимого файла в переменную $text while (!feof ($fd)) $text .= fgets($fd, 4096); } // Закрыть открытый файловый дескриптор fclose ($fd); return $text; }
Функция usd_euro() вернет массив, где будут текущие курсы USD и EURO:
list ($us,$eu) = usd_euro();Теперь переменные $us и $eu можно использовать по своему усмотрению.
В КБ создайте дополнительное действие и производите конвертацию по мере необходимости. Или раскомментируйте в коде функции условия по дате и передавайте нужную дату в качества параметра. В обоих случаях у Вас будет актуальная правильная конвертация.
Сообщение отредактировал Tony999: 01 Декабрь 2015 - 09:21
Умные сайты на заказ
https://info.crm-master.info
https://info.crm-master.info
#3
Отправлено 17 Февраль 2016 - 18:41
Не работает на SAAS. На другом хостинге работает.
#4
Отправлено 17 Февраль 2016 - 19:52
alexrus (17 Февраль 2016 - 18:41) писал:
Не работает на SAAS. На другом хостинге работает.
Вот код, который должен работать и на SaaS
$pay_date_local = '17.02.2016';//Дата курса $url = 'http://www.cbr.ru/scripts/XML_daily.asp?date_req='.$pay_date_local; $ch = curl_init(); curl_setopt($ch, CURLOPT_HEADER, 0); //curl_setopt($ch, CURLOPT_REFERER, $referer); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_URL, $url); $data = curl_exec($ch); curl_close($ch); $xml = simplexml_load_string($data); $date_rate = $xml['Date']; if($date_rate ==$pay_date_local)//Если были получены данные за выбранную дату {$cnt=Count($xml->Valute); for($i = 0; $i < $cnt; $i++) { $code=$xml->Valute[$i]->CharCode; if($code=='EUR') $eur = form_eng_number($xml->Valute[$i]->Value);// Получим курс EUR/RUR if($code=='USD') $usd = form_eng_number($xml->Valute[$i]->Value); //Получим курс USD/RUR } }
Сообщение отредактировал maksn: 17 Февраль 2016 - 20:02
#5
Отправлено 18 Февраль 2016 - 03:33
Спасибо большое. Работает.
#6
Отправлено 18 Февраль 2016 - 17:20
Цитата
На SaaS скорее всего отключена функция fopen()
Она вообще как правило не работает для "http", если только это явно не включено, что впрочем не рекомендуется делать в целях безопасности. Поэтому рассчитывать на работу файловых функций с http путями изначально не стоит, разве только если это не ваш выделенный сервер.
#7
Отправлено 10 Январь 2017 - 23:32
maksn (17 Февраль 2016 - 19:52) писал:
На SaaS скорее всего отключена функция fopen()
Вот код, который должен работать и на SaaS
Вот код, который должен работать и на SaaS
$pay_date_local = '17.02.2016';//Дата курса $url = 'http://www.cbr.ru/scripts/XML_daily.asp?date_req='.$pay_date_local; $ch = curl_init(); curl_setopt($ch, CURLOPT_HEADER, 0); //curl_setopt($ch, CURLOPT_REFERER, $referer); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_URL, $url); $data = curl_exec($ch); curl_close($ch); $xml = simplexml_load_string($data); $date_rate = $xml['Date']; if($date_rate ==$pay_date_local)//Если были получены данные за выбранную дату {$cnt=Count($xml->Valute); for($i = 0; $i < $cnt; $i++) { $code=$xml->Valute[$i]->CharCode; if($code=='EUR') $eur = form_eng_number($xml->Valute[$i]->Value);// Получим курс EUR/RUR if($code=='USD') $usd = form_eng_number($xml->Valute[$i]->Value); //Получим курс USD/RUR } }
Всем привет! Подниму тему....
Не работает на saas... эхо по обеим переменным ($usd и $eur) возвращает пустоту (((
Количество пользователей, читающих эту тему: 1
0 пользователей, 1 гостей, 0 анонимных