Актуальный курс валют ЦБ (PHP, Jquery, Javascript)

Сегодня я расскажу как при запуске какого-либо php сценария получать актуальный курс валют и использовать его в качестве значения переменной. Курс валют будем получать с единственного официального сервера данных - Центрального Банка РФ. Использовать будем PHP, Jquery (AJAX) и XML.

Задача
Создать скрипт, который будет при обращении к другому скрипту считывать официальный курс валюты, например, доллара($) на дату запроса с официального сервера ЦБ РФ.

Решение
1) Сначала нужно разобраться какие сервисы со стороны сервера ЦБ РФ доступны и будут полезными для решения данной задачи. Нужно отметить, что госбанк позаботился о формировании банка данных по курсам валют и смежной информации в формате XML. Эту информацию можно получить от их сервера, сформировав запрос в определенной нотации методом GET. Полный перечень возможных вариантов и примеров работы с информацией по курсам валют можно получить по этой официальной ссылке.
Воспользовавшись примерами запросов, для решения моей задачи требуется осуществлять запрос в формате URL: http://www.cbr.ru/scripts/XML_daily.asp?date_req=актуальная_дата'. Причем актуальная дата должна передаваться в строку в строгом соответствии, как предписывает сервер ЦБ, а именно: день/месяц/полный_год.

2) Результат запроса к серверу ЦБ вернет блок данных в формате XML, который нужно будет обработать. В этом случае можно получать блок в буферную переменную, в файл. Я выбираю для себя второе - файл. Самый подходящий способ обработать такой запрос для меня всегда был и остается модуль PHP - CURL. Т.е. через CURL функции я передаю запрос, а полученный отклик записываю в файл и затем разбираю содержимое файла (parse XML). Итак, создадим PHP скрипт, который будет формировать файл с указанным именем в каталоге самого скрипта (текущем каталоге). 

<?php
$today = date("d/m/Y");
 $fp = fopen('cb.xml', 'w');
 $ch = curl_init();
curl_setopt($ch, CURLOPT_URL,
      'http://www.cbr.ru/scripts/XML_daily.asp?date_req='.$today);
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_exec($ch);
fclose($fp);
curl_close ($ch);
?>
 

3) Можете испытать этот скрипт и в результате его выполнения у вас будет формироваться XML файл cb.xml со всеми имеющимися у ЦБ котировками для общего доступа на указанную дату, в моем случае - сегодня.

Пример листинга XML с курсом валют

<?xml version="1.0" encoding="windows-1251" ?>
<ValCurs Date="11/02/2012" name="Foreign Currency Market">
<Valute ID="R01010">
 <NumCode>036</NumCode> <CharCode>AUD</CharCode>
 <Nominal>1</Nominal>
 <Name>Австралийский доллар</Name>
 <Value>31,9788</Value>
</Valute>
<Valute ID="R01020A">
 <NumCode>944</NumCode>
 <CharCode>AZN</CharCode>
 <Nominal>1</Nominal>
 <Name>Азербайджанский манат</Name>
 <Value>38,0503</Value>
</Valute> 
. . . . . . . . . . . . . 
<Valute ID="R01235">
 <NumCode>840</NumCode>
 <CharCode>USD</CharCode>
 <Nominal>1</Nominal>
 <Name>Доллар США</Name>
 <Value>29,8923</Value>
</Valute> . . . . . . . . . . . . . 
</ValCurs>

Теперь необходимо написать скрипт, который будет обрабатывать данные XML и выводить курс доллара из всего массива. Для этого создаем, например, для удобства еще один PHP скрипт и применим функции AJAX технологии на базе фреймворка Jquery. 

4) Итак, допустим, срипт-обработчик имеет имя dollar.php. Я сразу приведу блок листинга файла dollar.php, который позволяет нам вывести курс доллара, в виде текста.

<?php 
require_once('cb.php');
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";>
<html xmlns="http://www.w3.org/1999/xhtml";>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Курс доллара</title>
<script src="http://code.jquery.com/jquery-latest.js";></script> 
<script type="text/javascript">
$(document).ready(function () { 
 $.ajax({
 type: "GET",
 async : false,
 url: "cb.xml",
 dataType: "xml",
 success: XmlKurs
 });
function XmlKurs (xml) {
$(xml).find("Valute").each(function(){
if($(this).attr('ID')=='R01235') {
d=$(this).find("Value").text();
$("p").append(d);
 } 
 });
}
 });
</script>
</head>
<body>
<p>
Курс валюты на сегодня:
</p>
</body>
</html>

5) Как видно из скрипта, уникальным идентификатором доллара является его ID=R01235, который однозначно определяет все остальные значения массива (название валюты, международный код, актуальный курс в рублях за номинал). В нашем случае великолепные методы библиотеки Jquery однозначно помогли определить ноду со значением курса (R01235) из всего файла. Теперь эту переменную мы можем дальше передавать в калькуляторы, информеры и т.д.

Если у вас есть вопросы по данной, то создайте тему в моем форуме и я постараюсь ответить.