С утра еще все работало Код (Text): <? $f = @fopen('http://www.cbr.ru/scripts/XML_daily.asp','r'); if($f) { while(!feof($f)) @$text.=fread($f, 4096); fclose($f); preg_match('|<Value>(.*)<\/Value>|Uis', $text, $curs); } else echo "'error'"; print_r($curs); ?> Не знаю, может я чего сломал, но курсы не парсятся. Результат Array ( ) Помогите найти ошибку, пожалуйста!
Регулярное выражение для парсинга xml? Может что то наподобие этого подойдет Код (PHP): if($parser = simplexml_load_string(file_get_contents('http://www.cbr.ru/scripts/XML_daily.asp'))){ $values = $parser->xpath('/ValCurs/Valute/Value'); $count = count($values); for($i = 0; $i < $count; $i++) echo (string)$values[$i]; } else echo 'Error. Cannot load resource'; Добавлено спустя 9 минут 13 секунд: Сейчас заметил когда запускашь несколько раз начинает писать failed to open stream: Redirection limit reached Потом начинает работать. Может и у тебя то же самое.
У меня не тоже самое, у меня тупо Array ( ). Другими словами массив отсутствует. Вопрос не в том "Как сделать парсинг курсов валют?", а в том "Почему мой код не работает?" Я аналогичным образом парсю кучу html страниц. Что в этом коде не так? Да здесь xml, но какая разница? До сегодняшнего дня код работал! Может я где-то накосячил?
Ты дебажить умеешь? Заставил запустить твой код((( убери собаку failed to open stream: Redirection limit reached - такое же как и у меня. A array() пишет потому что не может выкачать xml. 1. Данных не много, нахрена читать построчно? 2. Есть xml. Поверь, есть способы куда более удобные чем регулярные выражения. Один из способов я привел.
Согласен. Но твой код выдает "Error. Cannot load resource". Такое чувство что http://www.cbr.ru/scripts/XML_daily.asp не читается, хотя визуально отображается! Что за РЕДИРЕКТ??? WTF??? Добавлено спустя 8 минут 53 секунды: Проверил твой код на другом rss-канале. Все работает. Вообще ничего не понимаю. Почему не читается http://www.cbr.ru/scripts/XML_daily.asp ???
Код (PHP): $parse=file_get_contents('http://www.cbr.ru/scripts/XML_daily.asp'); $parse=new SimpleXMLElement($parse); foreach($parse->Valute as $key => $value) { echo'Валюта: '.$value->CharCode.' Название: '.$value->Name.' Курс: '.$value->Value.'<br>'; } P.S. Сильно часто нельзя обращаться к ресурсу, нужно кешить данные. Если валюты нужны по ID, в выборке нужно будет указать чтобы искало по иду. В данный момент выводит все.
Может в этом причина? Может меня тупо забанили? Your, попробовал твой код. Fatal error: Uncaught exception 'Exception' with message 'String could not be parsed as XML' in /home/public_html/parsing_.php:3 Stack trace: #0 /home/public_html/parsing_.php(3): SimpleXMLElement->__construct('') #1 {main} thrown in /home/public_html/parsing_.php on line 3 Вот чего пишет... Что за ошибка? Кто в курсе?
В банках обычно довольно суровая жизнь. Там не всегда высокопрофессиональные люди. По моему только у газпрома все пучком
Временно спарсил курсы с РБК, но проблема так и не решена. http://www.cbr.ru/scripts/XML_daily.asp по прежнему не читается, хотя визуально отображается!
P.S. сразу после первого обращения и обновлять их через указанное время к примеру через день. З.Ы. Когда вы уже научитесь читать, что вам пишут? Redirection limit reached, в переводчик сложно ввести и разобрать смысл этой ошибки? А раз данных нет то ошибка: 'String could not be parsed as XML'
Автор! Кажется в filename присутсвуют пробелы; наверно копировал... Код (PHP): $parse=file_get_contents('* http://www.cbr.ru/scripts* /XML_daily.asp');
PHP: $xml_daily_file = __DIR__.'/daily.xml'; // кеш на четыре часа if (!is_file($xml_daily_file) || filemtime($xml_daily_file) < time() - 7200) { if ($xml_daily = file_get_contents('http://www.cbr.ru/scripts/XML_daily.asp')) { file_put_contents($xml_daily_file, $xml_daily); } } // парсим как обычно... $file = simplexml_load_file($xml_daily_file); $result = array(); foreach ($file as $el) { $result["$el->CharCode"] = strtr($el->Value, ',', '.'); } echo $result['USD']; // другие коды валют аналогично print_r($result); Код честно украден с зеркала, которое легко гуглится по запросу "xml_daily.asp"