2009-05-12 22 views
2

Ich benutze Curl, um Informationen aus Wikipedia zu erhalten. Bisher war es mir gelungen, grundlegende Textinformationen abzurufen, aber ich möchte sie wirklich in HTML abrufen.Informationen von Wikipedia erhalten - wie bekomme ich HTML-Formular?

Hier ist mein Code:

$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['*']; 

jedoch der Text auf diese Weise ist nicht gut genug abgerufen angezeigt zu werden :(es ist alles in dieser Art von Format

'' 'Aix-les- Bains '' 'ist eine [[Communes of Frankreich | Gemeinde]] in der Savoie] [[Departments of France | Abteilung]] in der Region Rhône-Alpes] [[Regionen von Frankreich | Region]] im Südosten [[Frankreich]].

Es liegt in der Nähe der [[Lac du Bourget]] {{convert | 9 | km | mi | abbr = on}} auf der Schiene nördlich von [[Chambéry]].

== == History '' Aix '' leitet sich von [[Latin]] '' Aquae '' (wörtlich: "Wasser", '' CF '' [[Aix-la-Chapelle]] (Aachen) oder Aix-en-Provence (Aix-en-Provence)), und Aix war ein Bad während des Römischen Reiches (Römisches Reich ), noch bevor es Aquae Gratianae (Aquae Gratianae) zum Gedenken an Kaiser Kaiser Gratian (Kaiser Gratian) umbenannt wurde ]], wer war ermordet nicht weit entfernt, in Lyon (Lyon), in 383 (383). Zahlreiche römische bleibt erhalten. [[Bild: IMG 0109 See Promenade.jpg | miniatur | links | Lac du Bourget Promenade]]

Wie kann ich den HTML-Code der Wikipedia-Artikel erhalten?


UPDATE: Danke, aber ich bin ein bisschen neu in diesem hier und jetzt eine XPath-Abfrage auszuführen, ich versuche, [wenn auch zum ersten Mal] und scheinen keine Ergebnisse zu erhalten. Ich muss hier eigentlich ein paar Dinge wissen.

  1. Wie kann ich nur einen Teil eines Artikels anfordern?
  2. Wie bekomme ich den HTML des Artikels angefordert.

Ich ging durch diese url auf Data Mining von wikipedia - es eine Idee stellte eine zweite Anforderung an wikipedia api mit der abgerufenen wikipedia Text als Parameter zu machen, und das würde die HTML abrufen - auch wenn es nicht scheint hat Arbeit so weit :(- Ich möchte nicht den ganzen Artikel als Chaos von HTML und dump es. Grundsätzlich meine Anwendung, was es tut, ist, dass Sie einige Orte und Städte Pin auf der Karte zeigen - Sie klicken auf die Stadtmarker und es würde über Ajax Details der Stadt verlangen, in einem angrenzenden div angezeigt zu werden. Diese Information möchte ich dynamisch aus Wikipedia bekommen. Ich werde mich sorgen über den Umgang mit Artikeln, die für eine bestimmte Stadt später nicht existieren muss nur sicherstellen, dass es an dieser Stelle funktioniert.

Kennt jemand ein nettes funktionierendes Beispiel, das tut, was ich suche, d. H. Gelesen und durch ausgewählte Teile eines Wikipedia-Artikels analysiert.


Nach der URL zur Verfügung gestellt - es sagt, ich sollte die wikitext auf die wikipedia api Standort Beitrag für das geparste HTML zurückzukehren. Das Problem ist, dass wenn ich die Informationen posten werde ich keine Antwort und stattdessen einen Fehler bekomme, auf den ich keinen Zugriff habe - aber wenn ich versuche, den Wikitext als GET zu integrieren, parst es ohne Probleme. Aber es scheitert natürlich, wenn ich zu viel Text habe, um zu analysieren.

Ist das ein Problem mit der Wikipedia Api? Weil ich es seit zwei Tagen mit nichts Glück hacken werde :(

+0

Verwenden Sie Render wie in: http://en.wikipedia.org/w/index.php?action=render&title=kirandul, um formatierten Text zu erhalten. – AgA

Antwort

6

Die einfachste Lösung wäre wahrscheinlich die Seite zu packen selbst (z http://en.wikipedia.org/wiki/Combination) und extrahieren Sie den Inhalt <div id="content">, möglicherweise mit einer XPath-Abfrage.

+0

Nette Idee - wie würde ich das tun, meine ich, sollte ich einen Sockel auf der Seite öffnen? Das Problem ist auch, dass ich Teile einer Seite und Abschnitte im Gegensatz zu einem vollständigen HTML-Dump des Inhalts erhalten muss. – Ali

+0

Hallo, Was ist die Abfrage auszuführen? – Leonardo

+0

etwas in der Art von '// div [@ id = 'content']' –

0

Soweit ich es verstehe, konvertiert die Wikipedia-Software das Wiki-Markup in HTML, wenn die Seite angefordert wird. Also mit Ihrer aktuellen Methode , werden Sie mit den Ergebnissen befassen müssen.

Ein guter Anfang ist die Mediawiki API. Sie auch http://pear.php.net/package/Text_Wiki können die Ergebnisse über cURL abgerufen zu formatieren.

+0

Dieser Link zu Text_Wiki funktioniert nicht für mich, etwas seltsam mit dem Unterstrich? –

+0

Ich habe es behoben. :) Hoffe das klappt besser. –

0

Versuchen am printable version der gewünschten Wikipedia suchen Artikel in Frage

Mit anderen Worten, ändern Sie das Zeile des Quellcodes:

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

zu so etwas wie:

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

Haftungsausschluss: nicht getestet haben, und das ist nur eine Vermutung, wie Ihr API funktionieren könnte.

+0

Das hilft nicht wirklich, weil es nicht das ganze HTML gibt; es streift Hyperlinks aus zum Beispiel – Gricey

0

Es gibt einen PEAR-Wiki-Filter, den ich benutzt habe und er macht einen sehr guten Job.

Text Wiki

Phil

+1

Es wird wahrscheinlich nicht die unzähligen Schablonen von Wikipedia richtig darstellen, oder? (Um dies zu tun, müssten Sie entweder Kopien der Templates lokal haben, oder sie müssten sie von Wikipedia holen) –

+0

Ich weiß, dass es das Standard-Wiki-Markup machen wird, es hat alles geschafft, was ich je gemacht habe Dadurch konnte man nicht mit Autorität sagen, ob es die Vorlagen machen kann oder nicht. Was das OP eingefügt hat, war Wiki mark up und das wird konvertiert. –

+0

Was das OP eingefügt hat, enthielt "{{convert | 9 | km | mi | abbr = on}}", was ein Vorlagenaufruf ist. –