Как я писал ранее, хороший информ-сервис, это не куча вариантов виджетов для вашего сайта, а, в наиболее ценном случае, возможность грузить данные информ-сервиса в виде xml. В развитом случае, это целый API для разработчика, с возможностью выборки данных по разным критериям.
Как бы ни фантазировали разработчики информ-сервиса, но видов оформления виджета, которые они городят, обычно наиболее подходящим оказывается наименее «испорченный» дизайном.
Сейчас хочу поделиться готовым решением чтения валют с сайта cb.ru с кодом, оформленным под drupal. Не смотря на привязку к движку, переписать будет не сложно и под другую веб-платформу.
Код состоит из двух функций. Первая из них читает данные и преобразует их в формат для хранения в переменных сайта, а вторая представляет собой реализацию hook_cron drupal с вызовом первой ф-ции. Функции объявлены в рамках некого модуля «mymodule».
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
/* курсы валют по отношению к рублю переменная drupal mymodule_valuteCrs будет сохранять массив данных о курсах валют в таком виде: array( 'date' => unix-time, когда был сформирован данный курс валют запрос может быть сделан в выходной день, а курс валют формируется по будним дням; 'data' => array('Абр.валюты' => курс к рублю, ...); тут хранятся сами данные о курсе, как ключи используется аббревиатура валюты - USD, EUR и т.п. Вы можете сделать XML запрос в браузере, чтобы получить представление об используемых аббревиатурах и перечне передаваемых курсов валют. ); */ function _mymodule_valuterequest() { $now = time(); $nowStr = date('d.m.Y', $now); $default = array( 'date' => $now, 'data' => array()) ; $course = variable_get('mymodule_valuteCrs', $default); //XML запрос данных с cbr.ru $dataxml = file_get_contents('http://www.cbr.ru/scripts/XML_daily.asp?date_req=' . $nowStr); if ($dataxml !== false) { $xml = new SimpleXMLElement($dataxml); $atr = $xml->attributes(); $course['date'] = strtotime($atr['Date']); if (!empty($xml->Valute)) { foreach($xml->Valute as $v) { //уделим немного внимания преобразованию типов $course['data'][$v->CharCode . ''] = (string) round(strtr($v->Value,',','.') / $v->Nominal, 6); } variable_set('mymodule_valuteCrs', $course); } } } /* добавим чтение валют в хук крон модуля */ function mymodule_cron() { //запрос данных по валютам _mymodule_valuterequest(); } |
На базе данных переменной mymodule_valuteCrs можно, например, запрограммировать внутреннюю конвертацию валют, или блок с курсами валют. В Drupal 5 и 6, периодический запуск cron можно наладить с помощью модуля poormanscron. А начиная с версии 7, функция этого модуля встроена в ядро движка.