Написал парсер курсов валют для 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 и у вас всегда будут свежие данные.