Парсер курсов валют АПБ
Дата: 20 Май ' 09 Автор: mart Рубрики: Программирование
Нередко возникает желание расширить информативность своего сайта за счет курсов валют, погоды и других информационных блоков. Предлагаем свой вариант решения — узконаправленный на импорт XML с сайта ЗАО «Агропромбанк».
Нам заранее известен источник данных и его структур — поэтому мы не будем биться над универсализацией парсера в сторону его упрощения.
На сайте банка есть примеры кода для парсинга данных курсов валют. Однако я считаю, что мой код проще в понимании и реализации. Также мы добавим кусочек с кеширование, дабы не дергать каждый раз при выхове скрипта удаленный сервер для получения данных. Я закешировал конечный результат.
Код парсера на PHP выглядит следующим образом:
//задаем путь к файлу кеширования $cache_file = "cache/currency_apb.cache"; //список название/флагов интересующих нас валют $currency = array( 'USD' => array('code' => 'USD', 'flag' => 'us.gif'), 'EUR' => array('code' => 'EUR', 'flag' => 'europeanunion.gif'), 'MDL' => array('code' => 'MDL', 'flag' => 'md.gif'), 'UAH' => array('code' => 'UAH', 'flag' => 'ua.gif'), 'RUR' => array('code' => 'RUB', 'flag' => 'ru.gif') ); //если сохраненный кеш-файл создан раньше часа ночи текущего дня if(mktime() >= mktime(1, 0, 0, date("m"), date("d"), date("Y")) && @filemtime($cache_file) < mktime(0, 0, 10, date("m"), date("d")-1, date("Y"))) { $xml = @simplexml_load_file('http://www.agroprombank.com/xmlinformer.php?date='.date('Y-m-d').'&type=commercial'); //если разобран XML-файл if($xml) { //извлекаем дату, на которую установлен курс $date = $xml->course['date']; //пробегаем по дереву валют foreach($xml->course->currency AS $course) { foreach($currency AS $key => $code) if($course['code'] == $code['code']) { $currency[$key]['value'] = (string)$course->currencySell; $currency[$key]['value1'] = (string)$course->currencyBuy; } } //создаем новый контент - задаем шапку $content = '<table width="100%">'; //генерим строки с курсами foreach($currency AS $key => $code) $content .= '<tr><td>'.$key.'</td> <td><img src="/images/flags/'.$code['flag'].'" alt="'.$key.'"></td><td>'.$code['value1'].'</td><td>'.$code['value'].'</td></tr>'; //задаем подвал $content .= '</table><div>По данным АПБ от '.$date.'</div>'; //удаляем старый кеш и записываем новый @unlink($cache_file); $fp = @fopen($cache_file, 'x'); fwrite($fp, $content); fclose($fp); } } //извлекаем из кеша результат $fp = @fopen($cache_file, 'r'); $content = fread($fp, filesize($cache_file)); fclose($fp); //выводим результат echo $content; |
Думаю, что комментариев в коде достаточно для понимания скрипта, поэтому дополнительных пояснений давать не буду. Если что — пишите в комментарии.
2 комментария
-
Максим
21|Авг|2011 1А вот почему-то курс украинской гривны не отображается.
-
24|Сен|2011
2
Самому не известна причина по которой АПБ ее не публикует.