Парсим xml отзывов яндекс маркета


Появилась как-то задача: вытащить информацию из xml-файла, который яндекс маркет выдает в ответ на запрос по поводу отзывов. Можно, конечно, воспользоваться имеющимися библиотеками, но если есть время и желание разобраться самому, то почему бы и не изобрести свой велосипед? Это не только интересно, но и полезно для развития навыков программирования. К тому же, оказалось все очень просто.

Итак, в каком виде поступает информация с отзывов? Структура такая (упрощенная, просто для наглядности отброшены другие элементы):

<?xml version="1.0" encoding="UTF-8"?>
<opinion-list>
<opinion id>комментарий</text><pro>достоинства</pro><contra>недостатки</contra><date>дата</date><author>автор</author></opinion>
<opinion id>комментарий</text><pro>достоинства</pro><contra>недостатки</contra><date>дата</date><author>автор</author></opinion>
</opinion-list>
Нам требуется написать такую функцию, которая бы извлекала информацию между определенными тэгами. То есть на вход она должна принимать тэг и текст. Стоп. Для начала нам надо получить этот текст, то есть выделить отельный отзыв. 4 строки кода сделают это:

$pos = strpos($data, "opinion id");
$data = substr($data, $pos);
$pos = strpos($data, "</opinion>");
$data = substr($data, 0, $pos);
Теперь мы имеем переменную $data, в которой только первый отзыв. Вот сейчас можно уже и запускать нашу функцию. Листинг:

function izv($txt, $tag) {
$pos = strpos($txt, $tag);
if ($pos===false){
return "no";	
}
else{
$txt = substr($txt, $pos+strlen($tag)+1);
$pos = strpos($txt, $tag);
$txt = substr($txt, 0, $pos-2);	
$txt = str_replace(PHP_EOL, "<br>", $txt);
return $txt;
}
}
Разберемся, что и где конкретно тут происходит. Сначала идет проверка. Зачем она нужна? Дело в том, что не каждый отзыв на яндекс маркете имеет все поля. Например, может не быть недостатков – в этом случае функция нам возвратит no. Если же все в порядке, такой тэг имеется, то идем разбирать дальше.

В строке мы отрезаем все, что идет до тэга включительно плюс один символ (попутно определяя длину самого тэга). После этого обрезаем все, что идет после закрывающего тэга минусом (точнее, получается, что плюсом) еще два символа. Особое внимание обратите на следующую строку: здесь мы заменяем на нормальные символы непонятные переносы. Зачем это нужно? Дело в том, что простом выводе ошибок может и не возникнуть, но вот если вы попытаетесь использовать для этой цели JavaScript, то могут появиться проблемы и данная строчка покажется вам совсем нелишней.

Собственно говоря, и все. Несложно, согласитесь? Можно проверить скрипт в «боевых» условиях – на том примере, который идет в самом яндекс маркете. Лично у меня все заработало :)

Если вам требуется написать скрипт на php, js или сделать любые работы по сайту, то вы всегда можете написать мне на почту up777up@yandex.ru илисразу же стучитесь в скайп up777up2 с описанием проблемы.
Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.

тегистатьи IT, яндекс, xml, парсинг




Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.




Java: нахождение и скачивание файла
Урок 13. Индексаторы C#
Возможные проблемы при подключении к Firebird из Visual Studio