Парсер курсов валют на PHP

$

Хочу поделиться с вами решением проблемы, которая у меня возникла в ходе работы над заказом. Необходимо сделать простой парсер курса доллара и евро на PHP. Подтягивать актуальный курс будем с сайта ЦБ .

Способ 1

Самый простой способ с использованием функции simplexml_load_file.

$file = simplexml_load_file("http://www.cbr.ru/scripts/XML_daily.asp?date_req=".date("d/m/Y"));

$xml = $file->xpath("//Valute[@ID='R01235']");
$valute_usd = strval($xml[0]->Value);
echo $valute_usd; // получим курс доллара

echo '
';
$xml = $file->xpath("//Valute[@ID='R01239']");
$valute_euro = strval($xml[0]->Value);
echo $valute_euro; // получим курс евро

Способ 2

Этот способ пригодится для хостингов, у которых отключен allow_url_fopen. В следствии чего возникает ошибка:

Error simplexml_load_file(): wrapper is disabled in the server configuration by allow_url_fopen=0

Можно попросить у хостинга, чтобы они поменяли у себя настройки, но это не всегда возможно, поэтому можно воспользоваться следующим кодом:

$ch = curl_init();	
curl_setopt($ch, CURLOPT_URL, "http://www.cbr.ru/scripts/XML_daily.asp?date_req=".date("d/m/Y"));
curl_setopt($ch, CURLOPT_HEADER, 0); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);	
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);


$result = curl_exec($ch);

$xml = $result;
$xml_obj = new SimpleXMLElement($xml);

$xml = $xml_obj->xpath("//Valute[@ID='R01235']"); 
$curs_usd = strval($xml[0]->Value); // получим курс доллара

$xml = $xml_obj->xpath("//Valute[@ID='R01239']"); 
$curs_euro = strval($xml[0]->Value);  // получим курс евро

Способ 3

Можно также немного модифицировать 1 способ и получить массив с валютами на все случаи жизни:

$file = simplexml_load_file("http://www.cbr.ru/scripts/XML_daily.asp?date_req=".date("d/m/Y"));

$valutes = array();

foreach ($file AS $el){
    $valutes[strval($el->CharCode)] = strval($el->Value);
}
print_r($valutes);