Получение информации из Википедии - как получить форму HTML? - PullRequest
2 голосов
/ 12 мая 2009

Я использую curl для получения информации из Википедии. До сих пор я успешно извлекал основную текстовую информацию, но я действительно хотел бы получить ее в HTML.

Вот мой код:

$s = curl_init();       

$url = 'http://boss.yahooapis.com/ysearch/web/v1/site:en.wikipedia.org+'.$article_name.'?appid=myID';
curl_setopt($s,CURLOPT_URL, $url);
curl_setopt($s,CURLOPT_HEADER,false);
curl_setopt($s,CURLOPT_RETURNTRANSFER,1);

$rs = curl_exec($s);

$rs = Zend_Json::decode($rs);

$rs = ($rs['ysearchresponse']['resultset_web']);

$rs = array_shift($rs);
$article= str_replace('http://en.wikipedia.org/wiki/', '', $rs['url']);

$url = 'http://en.wikipedia.org/w/api.php?';
$url.='format=json';
$url.=sprintf('&action=query&titles=%s&rvprop=content&prop=revisions&redirects=1', $article);

curl_setopt($s,CURLOPT_URL, $url);
curl_setopt($s,CURLOPT_HEADER,false);
curl_setopt($s,CURLOPT_RETURNTRANSFER,1);

$rs = curl_exec($s);
//curl_close( $s );
$rs = Zend_Json::decode($rs);

$rs = array_pop(array_pop(array_pop($rs)));
$rs = array_shift($rs['revisions']);
$articleText = $rs['*'];

Однако текст, полученный таким способом, недостаточно хорош для отображения :( Все это в таком формате

'' 'Экс-ле-Бен' '' является [[Коммуны Франция | коммуна] в [Савойя] [[Отделы Франции | отдел]] в [[Рона-Альпы]] [[районы Франция | регион]] на юго-востоке [[Франция]].

Он находится возле [[Lac du Bourget]], {{конвертировать | 9 | км | ми | abbr = on}} по железной дороге к северу от [[Шамбери]].

== История == '' Экс '' происходит от [[Latin]] '' Aquae '' (буквально, «вода»; '' cf '' [[Aix-la-Chapelle]] (Ахен) или [[Экс-ан-Прованс]]), и Экс была баня во время [[Роман Империя]], еще до того, как она была переименована Aquae Gratianae, чтобы почтить память [[Император Грациан]], который был убит не далеко, в [[Лион]], в [[383]]. Многочисленные римские остается выжить. [[Image: IMG 0109 Озеро Promenade.jpg | thumb | left | Lac du Променад Бурже]]

Как мне получить HTML-код статьи в Википедии?


ОБНОВЛЕНИЕ: Спасибо, но я немного новичок в этом здесь и сейчас, я пытаюсь выполнить запрос xpath [хотя и в первый раз] и не могу получить никаких результатов. Мне действительно нужно знать кое-что здесь.

  1. Как запросить только часть статьи?
  2. Как получить HTML-код запрошенной статьи.

Я прошел этот url при извлечении данных из Википедии - он выдвинул идею сделать второй запрос к API-интерфейсу Википедии с извлеченным текстом Википедии в качестве параметров, который будет извлекать html - хотя он не имеет Похоже, это работает до сих пор :( - Я не хочу просто взять всю статью в виде беспорядка html и выбросить ее. По сути, мое приложение состоит в том, что у вас есть несколько местоположений и городов, отмеченных на карте - вы нажмите на маркер города, и он запросит через ajax подробности о городе, которые будут показаны в соседнем div. Эту информацию я хочу получить из википедии динамически. Я буду беспокоиться о работе со статьями, которые не существуют для конкретного город позже, просто нужно убедиться, что он работает на этом этапе.

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


Согласно предоставленному URL - там написано, что я должен опубликовать вики-текст в расположении API википедии, чтобы он возвращал проанализированный html. Проблема в том, что, если я публикую информацию, я не получаю ответа и вместо этого получаю сообщение об ошибке, в котором мне отказано в доступе - однако, если я пытаюсь включить вики-текст как GET, он анализируется без проблем. Но это, конечно, не получается, когда у меня слишком много текста для анализа.

Это проблема с API википедии? Потому что я уже два дня хакнул на это без всякой удачи: (

Ответы [ 4 ]

6 голосов
/ 12 мая 2009

Самым простым решением, вероятно, будет захват самой страницы (например, http://en.wikipedia.org/wiki/Combination), а затем извлечение содержимого <div id="content">, возможно с помощью запроса xpath.

0 голосов
/ 12 мая 2009

Попробуйте посмотреть версию для печати требуемой статьи в Википедии.

Другими словами, измените эту строку вашего исходного кода:

$url.=sprintf('&action=query&titles=%s&rvprop=content&prop=revisions&redirects=1', $article);

что-то вроде:

$url.=sprintf('&action=query&titles=%s&printable=yes&redirects=1', $article);

Отказ от ответственности: не тестировали, и это всего лишь предположение о том, как может работать ваш API.

0 голосов
/ 12 мая 2009

Я использовал фильтр PEAR Wiki, и он отлично справляется со своей работой.

Текст Wiki

Phil

0 голосов
/ 12 мая 2009

Насколько я понимаю, программное обеспечение Wikipedia преобразует разметку Wiki в HTML при запросе страницы. Таким образом, используя ваш текущий метод, вам нужно иметь дело с результатами.

Хорошее место для начала - Mediawiki API . Вы также можете использовать http://pear.php.net/package/Text_Wiki для форматирования результатов, полученных с помощью cURL.

...