Получение курса валют Национального Банка Молдовы при помощи PHP Class


Как получить курс валют Национального Банка Молдовы при помощи PHP?

PHP Курс валют Национальный Банк МолдовыКак-то давно я делал PHP-класс для получения курса валют с Национального Банка Молдовы (НБМ, BNM). Но класс был заточен под работу на PHP Framework CodeIgniter.
Тогда я парсил полученный XML-файл средставми регулярных выражений (preg_match), выбирал только нужные курсы валют и сохранял их в текстовый файл в виде сериализованного массива.

Решил переписать класс для PHP5, используя при этом готовый XML-парсинг средствами PHP.
Перечислим требования и правила, которые должны соблюдаться нашим PHP-скриптом, при работе с сайтом НацБанка Молдовы:

  1. скрипт должен тянуть данные с официального источника (http://bnm.md/). Например: http://bnm.md/ru/official_exchange_rates?get_xml=1&date=26.01.2012 ;
  2. XML-файл будем сохранять локально (кэшировать), чтобы не запрашивать каждый раз данные в офиц. сайта. Если запрашивать слишком часто данные с НацБанка, то ваш IP могут заблокировать + скорость получения данных увеличивается в разы;
  3. КЭШ-файлы будем хранить в формате YYYY-MM-DD.xml для удобства сортировки. Старые файлы не удаляем, а используем как историю курса за предыдущие даты.
Исходный код NBM Class:
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 можно доработать под свои задачи.  Удачи в использовании!

Share

Читайте ещё похожие статьи на этом сайте:

  1. "Заглушка" sendmail для XAMPP
  2. PHP функция для конвертирования размеров файла (*KB, *MB, *GB)
  3. Доработка HTML Form при помощи jQuery
  4. PHP дробная часть числа
  5. Как установить и получить cookie на JavaScript?
1 балл2 балла3 балла4 балла5 баллов (Без рейтинга)
Loading ... Loading ...
IT - информационные технологии, PHP, Программирование


Если Вам понравилась эта статья, пожалуйста оставьте свой комментарий или подпишитесь на RSS-канал и получайте в будущем статьи на RSS Reader.

Написать комментарий

(обязательно)

(обязательно, не публикуется)