Чтение текущего курса валют при помощи PHP
Дата публикации: 22/04/2009Возникла у меня необходимость в автоматическом режиме получать курс доллара и евро, чтобы использовать их на сайте для автоматического пересчета цен. Стал думать, как это можно сделать наименее затратным способом. В общем случае, конечно, можно вытащить эту информацию с любого сайта, транслирующего курс доллара - с того же RBC, скажем. Но логичнее всего все-таки брать информацию с первоисточника, т.е. с сайта Центробанка Российской Федерации. И тут оказалось, что сайт центробанка транслирует эту информацию в виде RSS-ленты! Причем можно узнать курс нескольких валют и на любую дату, включая также и текущие курсы валют. Подробное описание всех сервисов сайта для web-мастеров приведено на отдельной страничке, что очень мило с их стороны.
Понятное дело, что из RSS-потока уже гораздо проще вытаскивать нужную информацию. При этом, если у вас есть под рукой готовый парсер XML, то все вообще элементарно. Но мне нужно было достаточно простое и быстрое решение, поэтому я обошелся только обычными PHP-функциями и в конце-концов написал вот такой скрипт.
<?
// Чтение курса валют с сайта Центробанка РФ
$rates = "";
// Адрес странички на сайте Центробанка РФ для запроса курса валют
$url_request = "http://www.cbr.ru/scripts/XML_daily.asp";
// Читаем RSS-поток с данными о курсе валют в строку
$data = @file($url_request);
// Обрабатываем курсы валют только в случае успешной загрузки
if (!empty($data)) {
// Анализируем каждую строку в поисках идентификатора валюты
reset($data);
while(list($id, $string) = each($data)) {
// Убираем лишние пробелы и переводим строку в нижний регистр
$string = strtolower(trim($string));
// Определяем строку с кодом валюты и читаем курс обмена
if (substr($string, 1, 8) == "charcode") {
// Находим код валюты
$currency = strip_tags($string);
// Читаем курс валюты
$string = strtolower(trim($data[$id+3]));
// Добавляем найденное значение в список валют
if (substr($string, 1, 5) == "value") {
$rates[$currency] = str_replace(",",".", strip_tags($string));
}
}
}
}
?>
В результате выполнения данного фрагмента кода в массиве $rates окажутся курсы обмена для всех валют. Причем в качестве ключа будет выступать текстовый идентификатор валюты. Если будете использовать у себя этот фрагмент кода, то учтите, что в нем не учитывается номинал валюты. Это может быть критично, если вам нужны узнать, к примеру, курс шведской кроны или украинской грины, т.к. для них указывается стоимость за 10 единиц.
При реальном использовании сервиса с целью минимизации нагрузки на сервер и уменьшения задержек при загрузке собственных страничек лучше всего запускать данный скрипт автоматически раз в сутки и сохранять полученные данные во внутренних переменных. У меня сейчас сделано именно так, а запрашиваемые курсы сохраняются в локальной базе данных.