Чтение текущего курса валют при помощи 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 единиц.

При реальном использовании сервиса с целью минимизации нагрузки на сервер и уменьшения задержек при загрузке собственных страничек лучше всего запускать данный скрипт автоматически раз в сутки и сохранять полученные данные во внутренних переменных. У меня сейчас сделано именно так, а запрашиваемые курсы сохраняются в локальной базе данных.

Теги: PHP, программирование

Смотри также