Продолжая предыдущий пост про парсер курсов с сайта ЗАО «Агропромбанк» сегодня рассмотрим парсер для курсов Приднестровского Республиканского банка.

Курс валют на этом сайте представлен в виде 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;

Думаю, что комментариев в коде достаточно для понимания скрипта, поэтому дополнительных пояснений давать не буду. Если что — пишите в комментарии.

Опубликовать в Яндекс
Опубликовать в Facebook
Опубликовать в Мой Мир
Опубликовать в Одноклассники
Опубликовать в LiveJournal
Опубликовать в Google Plus
Опубликовать в Google Buzz