Парсер курса валюты с сайта Центробанка

09.01.2019  12:50

Итак, на сайте товары в евро, а по нашему законодательству все цены должны быть в рублях. Курс лучше брать с сайта Центробанка, т.к. курс устанавливает именно он.

Парсер простой:
$file_currency = $_SERVER["DOCUMENT_ROOT"].'/log/currency.txt';//файл с курсом
$filetime = date("d",filectime($file_currency));
if ($filetime != date("d")) {// если дата обновления файла с курсом не равна текущей, то запросить у ЦБ данные
class Currency {
    var $Value;  // название
    function Currency ($aa) 
    {
        foreach ($aa as $k=>$v)
            $this->$k = $aa[$k];
    }
}
function readDatabase($filename) 
{
    // чтение XML файла
    $data = implode("", file($filename));
    $parser = xml_parser_create();
    xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);
    xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1);
    xml_parse_into_struct($parser, $data, $values, $tags);
    xml_parser_free($parser);
    // проход через структуры
    foreach ($tags as $key=>$val) {
        if ($key == "Record") {
            $molranges = $val;
            for ($i=0; $i < count($molranges); $i+=2) {
                $offset = $molranges[$i] + 1;
                $len = $molranges[$i + 1] - $offset;
                $tdb[] = parseMol(array_slice($values, $offset, $len));
            }
        } else {
            continue;
        }
    }
    return $tdb;
}
function parseMol($mvalues) 
{
    for ($i=0; $i < count($mvalues); $i++) {
		$mvalues[$i]["value"] = str_replace(",",".",$mvalues[$i]["value"]);
        $mol[$mvalues[$i]["tag"]] = $mvalues[$i]["value"];
    }
    return new Currency($mol);
}
$daysAgo = mktime(0, 0, 0, date("m"), date("d")-5,   date("Y"));// получить данные за 5 дней
$daysAgo = date("d/m/Y", $daysAgo);
$cDay = date("d/m/Y");
$db = readDatabase("http://www.cbr.ru/scripts/XML_dynamic.asp?date_req1=".$daysAgo."&date_req2=".$cDay."&VAL_NM_RQ=R01239");
//1235 - usd
//1239 - euro
// echo count($db);exit;
$countdb = count($db);
if(!empty($countdb)) {// если данные есть
$array = get_object_vars($db[count($db)-1]);
//print_r($array);
$cur = number_format($array["Value"], 4, '.', ' ');
}
//echo $cur;
if (!empty($cur) && ($cur != '0.00')) {
$myfile = fopen ($file_currency,"w+");
if ($myfile) {
fwrite($myfile, $cur);
fclose($myfile);
}
}
}


Андрей Панёвин
Здравствуйте! Я — Андрей Панёвин и занимаюсь профессиональной разработкой сайтов на платформе 1С-Битрикс (исключительно программирование). Есть вопросы по статье? Могу подсказать и помочь по скайпу (andrey.panevin.ru), WhatsApp (+7-911-091-0670) или перепиской в ВК.
1000 р./час.






Помогла статья? На поездку на море (Охотское):


перейти в Блог

Ударим лайками по бездорожью, разгильдяйству и бюрократизму!


Ключевые слова (тэги): PHP 68  web-программирование 92  

Вам есть что сказать — ну я же чую.
Высказаться о наболевшем, я выслушаю-:
Имя


email (не публикуется)