Курсы валют на Вашем сайте

  • Содержание

В интернете лежит множество информации о том, где можно взять курсы валют и что с ними потом делать. Готового решения, которое меня бы устроило, я не нашел, поэтому пришлось писать самому. Мой скрипт автоматически раз в сутки считывает курс и выводит на сайте его изменение.

Центральный банк Российской Федерации предоставляет текущий курс валют в XML формате. Существует возможность получать курсы в любой день, передавая дату параметром date_req. К примеру, http://www.cbr.ru/scripts/XML_daily.asp?date_req=12.10.2008. Для парсинга XML будем использовать библиотеку DOM.

Создаем в базе примерно такую таблицу.

CREATE TABLE `currency` (
	`id` int(2) unsigned NOT NULL auto_increment,
	`name` varchar(20) NOT NULL,
	`abbr` varchar(20) NOT NULL,
	`nominal` int(5) unsigned NOT NULL,
	`value` float unsigned NOT NULL,
	`dif` float NOT NULL,
	`date` varchar(10) NOT NULL,
	PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=cp1251;

INSERT INTO `currency` (`id`, `name`, `abbr`) VALUES
	(1, 'Доллар США', 'USD'),
	(2, 'Евро', 'EUR');

Создаем объект DOM и загружаем в него XML с Центробанка с курсом на сегодня.

if (!$dom->load('http://www.cbr.ru/scripts/XML_daily.asp?date_req='.date('d.m.Y')))
	die('Ошибка. XML-документ не загружен');

Подключаемся к базе данных. Затем находим нужную нам валюту. В моем примере это доллар и евро.

$valute = $dom->getElementsByTagName('Valute');
foreach( $valute as $val )
{
	$valueID = $val->getAttribute('ID');
	switch ($valueID)
	{
		case 'R01235': getAttr($val, 1); break; // USD
		case 'R01239': getAttr($val, 2); break; // EUR
	}
}

Функция getAttr() считывает текущее значение курса, сравнивает его с полученным и записывает изменения в базу.

function getAttr ($item, $id)
{
	global $date;
	$q = mysql_query("SELECT nominal, value, date FROM currency WHERE id = $id");
	if (!$row = mysql_fetch_array($q))
		die ('Ошибка. Данные не были обновлены');

	$n = $item->getElementsByTagName('Nominal')->item(0)->nodeValue;
	$v = $item->getElementsByTagName('Value')->item(0)->nodeValue;

	$n = str_replace(',', '.', $n); // переводим во float
	$v = str_replace(',', '.', $v);

	$dif = ($n * $v - $row['nominal'] * $row['value']);

	$a = array(
		'nominal' => $n,
		'value' => $v,
		'dif' => $dif,
		'date' => $date
	);

	if ($date != $row['date'])
		update('currency', "id = '$id'", $a);
}

Скрипт готов. Теперь настроим автоматическое обновление. Для этого используем cron. Настройка сценариев cron производится через unix shell. Выполняем команду crontab -e, нажимаем i и вводим:

0 3 * * * /usr/local/php5-clicgi-so/bin/php-cli -q /absolute-path-to-file/get_currrency.php > /dev/null

Для удаления символов нажимаем ESC, затем набираем x.
Для выхода из vi без сохранения изменений нажимаем ESC, а затем набираем :q!.
Для сохранения и выхода нажимаем ESC, а затем набираем :wq.

Таким образом, скрипт get_currrency.php запускается каждый день в 3 утра. Путь к интерпретатору PHP5 уточните у Вашего хостера.

Понравилась статья? Подпишись на RSS.

Советую почитать:

Google Analytics на вашем сайте
Диалог с компьютером

Изучаем MooTools. Шаг 6 - Браузеры MooTools. Переход от 1.11 к 1.2

Комментарии

  • shylar написал 16 декабря 2010 года

    Спасибо, полезный пост. Попробую его интерпретировать под курс НБУ (они в XML не отдают, придется парсить страницу)

    Ответить