Написал парсер курсов валют для Yii. Данные берутся из Центробанка (xml CBR). Преимущества моего парсера в том, что он не нагружает сервер, нет никаких заданий в кроне, а проверка актуальности курсов происходит путём сравнения даты последнего обновления и заданного интервала.
Например, если мы задали интервал обновления 24 часа и данные были загружены 16.04.2014 в 15:00, а сейчас 17.04.2014 16:00, то курсы обновятся. Если же сейчас 17.04.2014 14:00, то курсы не обновятся и отдадутся те, которые есть в базе на данный момент, т.к. 24 часа ещё не прошло. Думаю идея ясна.
Установка
- [su_button url=»https://zabolotskikh.com/wp-content/uploads/2014/04/ex_rates.zip» size=»4″ radius=»0″ icon=»icon: bolt»]Скачать расширение EX-Rates Yii курсы валют[/su_button]
- Скопировать папку
ex_ratesвprotected/extensions - В
config/main.phpдописать:'components'=>array( 'ex_rates'=>array( 'class'=>'ext.ex_rates.EX_Rates', ), ) - Создать таблицу в БД следующей структуры:
CREATE TABLE IF NOT EXISTS `gde_vzjat_deneg`.`ex_rates` ( `code` VARCHAR(3) NOT NULL COMMENT 'Код', `currency` VARCHAR(128) NOT NULL COMMENT 'Валюта', `course` DECIMAL(8,4) NOT NULL COMMENT 'Курс', `nominal` INT NOT NULL COMMENT 'Номинал', PRIMARY KEY (`code`)) ENGINE = InnoDB
Использование
В любом месте приложения пишем: Yii::app()->ex_rates->courses() и получаем массив с курсами следующего вида:
array(
'USD' => array(
'currency'=>'Доллар США',
'nominal' => 1,
'value' => 33.8161,
),
'EUR' => array(
'currency'=>'Евро',
'nominal' => 1,
'value' => 45.8242,
),
); Хотите использовать модель для таблицы ex_rates? Нет проблем, просто допишите в поведении beforeFind() следующую строку: Yii::app()->ex_rates . Это инициализирует компонент EX-Rates и у вас всегда будут свежие данные.
