Курсы валют на Вашем сайте
Остальное
- Содержание
В интернете лежит множество информации о том, где можно взять курсы валют и что с ними потом делать. Готового решения, которое меня бы устроило, я не нашел, поэтому пришлось писать самому. Мой скрипт автоматически раз в сутки считывает курс и выводит на сайте его изменение.
Центральный банк Российской Федерации предоставляет текущий курс валют в 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
Комментарии
Спасибо, полезный пост. Попробую его интерпретировать под курс НБУ (они в XML не отдают, придется парсить страницу)
Ответить