Парсер курсов ПРБ
Дата: 21 Май ' 09 Автор: mart Рубрики: Программирование
Продолжая предыдущий пост про парсер курсов с сайта ЗАО «Агропромбанк» сегодня рассмотрим парсер для курсов Приднестровского Республиканского банка.
Курс валют на этом сайте представлен в виде CSV, т.е. текстовый файл с разделителями (в данном случае «,»). Следовательно мы можем работать с данными, как с простым текстовым фалом и построчно считывать данные из файла. Кодировка исходного файла windows-1251 и если Ваша кодировка отличается от данной, то стоит выполнить преобразование при помощи функции iconv().
Код парсера на PHP выглядит следующим образом:
//задаем путь к файлу кеширования $cache_file = "cache/currency_cbpmr.cache"; //список название/флагов интересующих нас валют $currency = array( 'USD' => array('flag' => 'us.gif'), 'EUR' => array('flag' => 'europeanunion.gif'), 'MDL' => array('flag' => 'md.gif'), 'UAH' => array('flag' => 'ua.gif'), 'RUR' => array('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"))) { $fp = @fopen('http://www.cbpmr.net/csv.php?lang=ru', 'r'); //если открыт файл на чтение if($fp) { while ($data = fgetcsv($fp, 1000, ',')) { $cur = array(); //пробегаем по списку валют foreach($currency AS $key => $code) if($data[2] == $key) $currency[$key]['value'] = $data[4]; //извлекаем дату, на которую установлен курс if(!isset($date)) $date = $data[0]; } //закрываем файл fclose($fp); //создаем новый контент - задаем шапку $content = '<table width="100%">'; //генерим строки с курсами foreach($currency AS $key => $code) $content .= '<tr><td>'.$key.'</td> <td><img src="/images/flags/'.$code['flag'].'" alt="'.$key.'" width="16" border="0" height="11"></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; |
Думаю, что комментариев в коде достаточно для понимания скрипта, поэтому дополнительных пояснений давать не буду. Если что — пишите в комментарии.