Category: Tech articles

  • Парсинг котировок валют

    Как то надо было доставать котировки валют с внешнего сайта. Использовал CURL для получения контента и простой xml_parser_create для парсинга информации.

    $res = \'\';
    
    function startElement($parser, $name, $attrs) {
    global $res;
    switch ($name) {
    case \'VALCURS\':
    $d = mb_convert_encoding(urldecode($attrs[\'DATE\']),\'UTF-8\', \'windows-1251\');
    //$dd = $d[0].$d[1].$d[2].$d[3].$d[4];
    //$res .= \'Дата: \'.$dd.\'\';
    break;
    }
    }
    
    function endElement($parser, $name) {}
    
    function contents($parser, $data) {
    global $res;
    $data = mb_convert_encoding($data,\'windows-1251\',\'UTF-8\');
    //$res .= trim($data).\"\";
    }
    
    $ch = curl_init();
    
    //$date = date(\"d/m/Y\");
    //$url = \"http://www.cbr.ru/scripts/XML_daily.asp?///date_req=\".$date;
    $url = \"http://www.cbr.ru/scripts/XML_daily.asp\";
    
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_TIMEOUT, 30);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_PROXYPORT, 0);
    curl_setopt($ch, CURLOPT_PROXY, \'\');
    
    $data = curl_exec($ch);
    
    curl_close($ch);
    
    $XMLparser = xml_parser_create();
    
    xml_set_element_handler($XMLparser, \'startElement\', \'endElement\');
    xml_set_character_data_handler($XMLparser, \'contents\');
    
    $xml_array = file($url);
    
    $res .= \"\".$xml_array[67].\": \".$xml_array[70].\"\";
    $res .= \"\".$xml_array[74].\": \".$xml_array[77].\"\";
    print $res;
    
    if (!xml_parse($XMLparser, $data)) {
    die(\'Ошибка обработки данных\');
    }
    
    xml_parser_free($XMLparser);
    ?>

    Интересная инфа тут: http://parsing-and-i.blogspot.com