Получение курса валют Национального Банка Молдовы при помощи PHP Class
Как получить курс валют Национального Банка Молдовы при помощи PHP?
Как-то давно я делал PHP-класс для получения курса валют с Национального Банка Молдовы (НБМ, BNM). Но класс был заточен под работу на PHP Framework CodeIgniter.
Тогда я парсил полученный XML-файл средставми регулярных выражений (preg_match), выбирал только нужные курсы валют и сохранял их в текстовый файл в виде сериализованного массива.
Решил переписать класс для PHP5, используя при этом готовый XML-парсинг средствами PHP.
Перечислим требования и правила, которые должны соблюдаться нашим PHP-скриптом, при работе с сайтом НацБанка Молдовы:
- скрипт должен тянуть данные с официального источника (http://bnm.md/). Например: http://bnm.md/ru/official_exchange_rates?get_xml=1&date=26.01.2012 ;
- XML-файл будем сохранять локально (кэшировать), чтобы не запрашивать каждый раз данные в офиц. сайта. Если запрашивать слишком часто данные с НацБанка, то ваш IP могут заблокировать + скорость получения данных увеличивается в разы;
- КЭШ-файлы будем хранить в формате YYYY-MM-DD.xml для удобства сортировки. Старые файлы не удаляем, а используем как историю курса за предыдущие даты.
class BNM {
public $cache_dir = '';
public $data = array();
public $fname = 'xml.xml';
public function __construct()
{
$this->fname = date('Y-m-d').'.xml';
}
public function getAll()
{
return $this->data;
}
public function getByCode($code = 0)
{
if(isset($this->data[$code]['Value'])) $v = $this->data[$code]['Value'];
else $v = 0;
return $v;
}
public function parseXML()
{
$data = array();
$filename = $this->cache_dir.$this->fname;
if(!file_exists($filename)) {
$this->getBNM();
}
if(file_exists($filename)) {
$xml = simplexml_load_file($filename);
foreach ($xml->Valute as $item) {
$arr = $this->simplexml_to_array($item);
$data[$arr['NumCode']] = $arr;
}
}
$this->data = $data;
}
public function getBNM()
{
$xml_file = $this->cache_dir.$this->fname;
$xml = file_get_contents('http://bnm.md/ru/official_exchange_rates?get_xml=1&date='.date('d.m.Y'));
file_put_contents($xml_file, $xml);
}
public function simplexml_to_array($xmlobj)
{
$a = array();
foreach ($xmlobj->children() as $node) {
if (is_array($node)) $a[$node->getName()] = $this->simplexml_to_array($node);
else $a[$node->getName()] = (string) $node;
}
return $a;
}
}
Пример использования:
require_once('bnm.php');
$bnm = new BNM();
$bnm->cache_dir = '';
$bnm->parseXML();
$eur_val = $bnm->getByCode(978);
echo '1 EUR = '. $eur_val.' MDL';
978 — это код EUR валютыиз XML-файла.
Скачать исходный код NBM Class .
При желании, Class можно доработать под свои задачи. Удачи в использовании!
Читайте ещё похожие статьи на этом сайте:
- "Заглушка" sendmail для XAMPP
- PHP функция для конвертирования размеров файла (*KB, *MB, *GB)
- Доработка HTML Form при помощи jQuery
- PHP дробная часть числа
- Как установить и получить cookie на JavaScript?
Если Вам понравилась эта статья, пожалуйста оставьте свой комментарий или подпишитесь на RSS-канал и получайте в будущем статьи на RSS Reader.
