Получение данных XML с внешней страницы и их анализ с помощью PHP - PullRequest
0 голосов
/ 17 июня 2010

Я пытаюсь создать базу данных драгоценных камней World of Warcraft.Если я зайду на эту страницу:

http://www.wowarmory.com/search.xml?fl[source]=all&fl[type]=gems&fl[subTp]=purple&searchType=items

и перейду к View Source в Firefox, я увижу тонну XML-данных, что именно то, что я хочу.Я написал этот быстрый скрипт, чтобы попытаться разобрать некоторые из него:

<?php

$gemUrls = array(
                 'Blue' => 'http://www.wowarmory.com/search.xml?fl[source]=all&fl[type]=gems&fl[subTp]=blue&searchType=items',
                 'Red' => 'http://www.wowarmory.com/search.xml?fl[source]=all&fl[type]=gems&fl[subTp]=red&searchType=items',
                 'Yellow' => 'http://www.wowarmory.com/search.xml?fl[source]=all&fl[type]=gems&fl[subTp]=yellow&searchType=items',
                 'Meta' => 'http://www.wowarmory.com/search.xml?fl[source]=all&fl[type]=gems&fl[subTp]=meta&searchType=items',
                 'Green' => 'http://www.wowarmory.com/search.xml?fl[source]=all&fl[type]=gems&fl[subTp]=green&searchType=items',
                 'Orange' => 'http://www.wowarmory.com/search.xml?fl[source]=all&fl[type]=gems&fl[subTp]=orange&searchType=items',
                 'Purple' => 'http://www.wowarmory.com/search.xml?fl[source]=all&fl[type]=gems&fl[subTp]=purple&searchType=items',
                 'Prismatic' => 'http://www.wowarmory.com/search.xml?fl[source]=all&fl[type]=gems&fl[subTp]=purple&searchType=items'
                 );


// Get blue gems

$blueGems = file_get_contents($gemUrls['Blue']);

$xml = new SimpleXMLElement($blueGems);

echo $xml->items[0]->item;

?>

Но я получаю множество ошибок, таких как:

Предупреждение: SimpleXMLElement :: __ construct ()[simplexmlelement .-- construct]: Сущность: строка 20: ошибка синтаксического анализатора: xmlParseEntityRef: нет имени в C: \ xampp \ htdocs \ WoW \ index.php в строке 19

Предупреждение: SimpleXMLElement :: __ construct ()[simplexmlelement .-- construct]: if (Browser.iphone && Number (getcookie2 ("mobIntPageVisits")) <3 && getcookie2 (в C: \ xampp \ htdocs \ WoW \ index.php в строке 19 </p>

Я не уверен, что не так. Я думаю, file_get_contents() возвращает данные, которые не являются XML, возможно, некоторые файлы Javascript, судя по частям iPhone в ошибках.

Есть ли способпросто вернуть XML с этой страницы? Без HTML или чего-либо еще?

Спасибо:)

1 Ответ

1 голос
/ 17 июня 2010

То, что возвращается, это xhtml, это xml-ish, но недостаточно для анализатора XML. Чтобы использовать SimpleXMLElement , вам понадобится правильно сформированный XML. Из документации конструктора :

Подпись метода:

__construct ( string $data [, int $options [, bool $data_is_url 
             [, string $ns [, bool $is_prefix ]]]] )

$data описывается как:

Правильно сформированная строка XML или путь или URL к документу XML, если data_is_url имеет значение TRUE.

Таким образом, случайная веб-страница не удовлетворит этого анализатора Вы спрашиваете:

"Есть ли способ просто вернуть XML с этой страницы? Без какого-либо HTML или что-нибудь? "

Вы можете связаться с веб-мастерами и узнать, есть ли у них представление данных в формате XML. В противном случае вы можете использовать обычный HTML-анализатор, чтобы попытаться извлечь данные. Мне нравится PHP Простой HTML DOM Parser . Проверьте Как реализовать веб-скребок в PHP ?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...