Перейти к содержимому


Курс валют


Сообщений в теме: 6

#1 Feaire

    Активный участник

  • Пользователи
  • PipPipPip
  • 49 сообщений

Отправлено 30 Ноябрь 2015 - 19:09

Добрый день.
Возник такой вопрос, как сделать так что бы с сайта http://www.cbr.ru/
Брался курс евро на сегодняшний день автоматически и ставился в ячейку?
Далее при выставлении счет или отчета мне надо будет рубли переводить в евро по курсу и так что бы то что уже создали завтра не обновлялось по новому курсу.

#2 Tony999

    Активный участник

  • Пользователи
  • PipPipPip
  • 406 сообщений
  • Пол:Мужчина
  • Город:Санкт-Петербург

Отправлено 30 Ноябрь 2015 - 23:48

В интернете можно найти такие решения. Вот, например:

//////////////////////// Получение курсов валют
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

КБ - помощь, проекты и решения.
Хостинг. Аренда. Продажа.
ВашаБаза.рф

#3 alexrus

    Активный участник

  • Пользователи
  • PipPipPip
  • 32 сообщений

Отправлено 17 Февраль 2016 - 18:41

Не работает на SAAS. На другом хостинге работает.

#4 maksn

    Активный участник

  • Пользователи
  • PipPipPip
  • 314 сообщений
  • Пол:Мужчина

Отправлено 17 Февраль 2016 - 19:52

Просмотр сообщенияalexrus (17 Февраль 2016 - 18:41) писал:

Не работает на SAAS. На другом хостинге работает.
На SaaS скорее всего отключена функция fopen()
Вот код, который должен работать и на 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

"...Сижу, паяю. CRM починяю..."
Мои разработки

#5 alexrus

    Активный участник

  • Пользователи
  • PipPipPip
  • 32 сообщений

Отправлено 18 Февраль 2016 - 03:33

Спасибо большое. Работает.

#6 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 722 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 18 Февраль 2016 - 17:20

Цитата

На SaaS скорее всего отключена функция fopen()

Она вообще как правило не работает для "http", если только это явно не включено, что впрочем не рекомендуется делать в целях безопасности. Поэтому рассчитывать на работу файловых функций с http путями изначально не стоит, разве только если это не ваш выделенный сервер.

#7 L-ink

    Участник

  • Пользователи
  • PipPip
  • 13 сообщений

Отправлено 10 Январь 2017 - 23:32

Просмотр сообщенияmaksn (17 Февраль 2016 - 19:52) писал:

На SaaS скорее всего отключена функция fopen()
Вот код, который должен работать и на 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 анонимных