Чтение текущего курса валют при помощи 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 единиц.
При реальном использовании сервиса с целью минимизации нагрузки на сервер и уменьшения задержек при загрузке собственных страничек лучше всего запускать данный скрипт автоматически раз в сутки и сохранять полученные данные во внутренних переменных. У меня сейчас сделано именно так, а запрашиваемые курсы сохраняются в локальной базе данных.