Курс валют
Автор 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 анонимных













