Wikipedia für die eigene Webseite mit PHP – Teil 1Wikipedia ist in! Die deutschsprachige Ausgabe von Wikipedia ist die zweitgrößte weltweit und sie wächst und wächst weiter. Doch wie kann man Wikipedia für die eigenen Benutzer als nützliches Tool zugänglich machen und an die eigenen Wünsche anpassen?

Dieser Artikel ist ebenfalls bei Dr.Web erschienen!

Im Endeffekt braucht es hierfür nur ein wenig JavaScript und natürlich PHP – von da aus kann man Wikipedia auf die vielseitigsten Arten verwenden. Grundsätzlich hat man drei Optionen. Zum einen kann man die ganze Wikipedia MySQL Datenbank kopieren und auf dem eigenen Server samt Wikisoftware zum laufen bringen. Da die Datenbank nunmehr schon ein Gigabyte an Größe erreicht hat, ist das nicht unbedingt eine Option die wirklich jedem offen steht. Zudem wird der Inhalt nicht von der großen Wikipedia Usergemeinde auf dem Laufendem gehalten.
Eine zweite Möglichkeit ist die Verwendung des XML Exports, der neuerdings von Wikipedia unter http://de.wikipedia.org/wiki/Spezial:Export/ bereitgestellt wird. Dabei wird hinter das Spezial:Export/ schlicht der Name des Wikipedia-Artikels eingetragen. Die XML Antwort sieht dann in etwa so aus:

XML Antwort vom Wikipedia-Server - Zu sehen sind die WikiTax

Man wird aus dem zurückgegebenen Text nur schwer schlau. Das liegt daran, dass man den Inhalt zwar schön als XML zurückgeliefert bekommt, jedoch mit sämtlichen WikiTax. Das sind die wikimediaeigenen Tags, die vor jeder Ausgabe der Seite durch die Wikisoftware gerendert und in HTML umgesetzt werden. Zur Zeit gibt es noch Probleme bei dem XML Export von Wikipedia Daten, da es noch keine einheitliche Document Type Definition für die WikiTax gibt – deshalb kann man den XML Export noch nicht vollständig umsetzen. Zudem müsste man selbst etwa mit Redirects in Wikipedia umgehen – ruft man z.B. den Artikel "XML", so erhält man:

<text xml:space="preserve">#REDIRECT [[Extensible_Markup_Language]]</text>

Es gibt jedoch noch eine dritte Möglichkeit die Daten von Wikipedia direkt zu ermitteln – nämlich komplett mit allen HTML Formatierungen. Der Inhalt jeder Wikipedia-Seite ist von HTML Kommentaren eingeschlossen, nämlich den Kommentaren <!-- start content --> und <!-- end content -->. Über reguläre Ausdrücke und ein wenig PHP kann man diesen Inhalt vom Rest der Seite trennen und dann ausgeben. Ein solcher Ansatz wurde in der com!-Online Zeitschrift Ausgabe 8/05 vorgestellt. Das dabei verwendete PHP Skript von Stefan Kuhn und Andreas Dumont liest die Inhalte zwischen den beiden Kommentaren aus, passt die Verweise zu weiterführenden Artikel an das Skript an und stellt die Inhalte im Browser dar. Dabei wird auch auf die PHP eigene gzip-Kompression zurückgegriffen, um die Ladezeiten und die Last für den Wikipedia-Server zu reduzieren. Dies hat auch den Vorteil, dass man immer die aktuellste Version des Wikipedia-Eintrags auf der Seite dargestellt bekommt.

wikistatic.php
<?php
$query = $_SERVER['QUERY_STRING'];
$search = $_GET['search'];
?>
<h1><?php if (isset($search)) echo $search; ?></h1>
<?php
/*************************************************************
* Wikipedia-Skript : Version 1.05 : Mai 2005
* wikipedia.php
* Stefan Kuhn, Andreas Dumont
*
* erweitert für Wikipedia-Suche von Thiemo Fetzer am 22.
* Juli 2005
/*************************************************************/
function callback( $puffer ) { //zum Puffern!

$puffer = substr( $puffer, strpos( $puffer, '<!-- start content -->' ) ); // sucht erstes Vorkommen des Suchstrings und liefert die Position
$puffer = substr( $puffer, 0, strpos( $puffer, '<div class="printfooter">' ) );
$puffer = str_replace( "/w/index.php", "/wikipedia/wikistatic.php", $puffer ); //macht die Links für das Skript kompatibel
$puffer = str_replace( "/wiki/", "/wikipedia/wikistatic.php?title=Spezial:Search&search=", $puffer );
$puffer = '<style>.editsection {display:none;}</style>'.$puffer; //blendet die Bearbeiten-Links aus
($puffer);
return $puffer;
}
if(eregi("Spezial:Search",$query) or eregi("Spezial%3aSearch",$query) or eregi("Special:Search",$query)) { //falls kein Artikel gefunden wird, dann automatischer Fallback zur normalen Suche
$search = str_replace( " ", "+", $search ); //Leerzeichen HTTP konform umwandeln
ob_start("callback"); //Einschalten der Pufferung von Ausgaben (für Suchen)
include 'http://de.wikipedia.org/w/index.php?'.$query; //der Query wird wieder angehaengt
ob_end_flush();
}
print( '<small><p>
Text und Bilder dieses Beitrags stammen aus dem Artikel
<a href="http://de.wikipedia.org/wiki/'.$begriff.'" title="http://de.wikipedia.org/wiki/'.$begriff.'" target="_blank">'.$search.'</a>
der freien Enzyklop&auml;die <a href="http://de.wikipedia.org" title="http://de.wikipedia.org" target="_blank">Wikipedia</a>
und stehen unter der <a href="http://www.gnu.org/licenses/fdl.txt" target="_blank">GNU Free Documentation License</a>.
Die Liste der Autoren ist in der Wikipedia unter
<a href="http://de.wikipedia.org/w/wiki.phtml?title='.$search.'&action=history" target="_blank" title="http://de.wikipedia.org/w/wiki.phtml?title='.$search.'&action=history">dieser Seite</a> verf&uuml;gbar, der Original-Artikel l&auml;sst sich
<a href="http://de.wikipedia.org/w/wiki.phtml?title='.$search.'&action=edit" target="_blank" title="hierhttp://de.wikipedia.org/w/wiki.phtml?title='.$search.'&action=edit">hier</a>
bearbeiten.
</p></small>');
?>

Bei dem Skript handelt es sich im Endeffekt nur um einen gewöhnliche PHP Webseitengrabber, bei dem Inhalte von fremden Webseiten extrahiert werden um dann auf der eigenen Seite dargestellt zu werden. Das Skript wurde dahingehend erweitert, dass es nun auch die Wikipedia-Suche vollständig unterstützt. Falls zu einem gesuchten Begriff kein Artikel direkt gefunden wird, so wird automatisch die Wikipedia Suche gestartet und die Suchergebnisse dargestellt.

Man kann das Design der Ergebnisseite über CSS und etwas HTML komplett den eigenen Wünschen anpassen. Dafür könnte man das komplette Skript per PHP Include in eine andere Seite einbinden – etwa an die Stelle, an der man ohnehin den Inhalt dargestellt haben möchte. Da die deutschen Sonderzeichen in der Wikipedia-Datenbank nicht durch HTML Entitäten ersetzt werden, muss man im Head-Bereich der Ergebnisseite den verwendeten Zeichensatz auf utf-8 einstellen. Dies geschieht mit folgender meta-Anweisung:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

Screenshot – Wikipedia in Dr.Web Design integriert (mit herkömmlichen Dr.Web Stylesheet)

Zudem müssen Sie das PHP Skript so abändern, dass nicht mehr auf die Datei "wikistatic.php" verwiesen wird. In unserem Fall heißt die PHP Datei, in die wikistatic.php per Include eingefügt wurde "drweb.php". Wir müssen nun in der Datei wikistatic.php alle Verweise in drweb.php umbenennen.

$puffer = str_replace( "/w/index.php", "/wikipedia/drweb.php", $puffer ); //ersetzt alle Vorkommen eines Strings in einem anderen String
$puffer = str_replace( "/wiki/", "/wikipedia/drweb.php?title=Spezial:Search&search=", $puffer );

CSS Stylesheet
Grundsätzlich kann man das Design der Seiten einfach über Änderungen am Wikipedia Stylesheet nach den eigenen Wünschen anpassen. Man muss in dem Skript lediglich den Verweis auf das Stylesheet verändern. Da Wikipedia wenig mit CSS Klassen arbeitet, muss man die generellen Tag-Formatierungen verwenden. D.h. die Darstellung von Blocksätzen definieren etc. Das Standardstylesheet von Wikipedia gibt’s hier zum downloaden...

Eine Suchbox für Wikipedia
Eine einfache Suchbox für unser Wikipedia-Skript kann über folgende paar Zeilen HTML Code erzeugt werden:

<div class="wiki_suchbox">
<h4>Suchen in der Wikipedia Datenbank!</h4>
<form name="searchform" action="/wikipedia/drweb.php" method="get"><input type="hidden" name="title" value="Spezial:Search" />
<input id="searchInput" name="search" type="text" value="" />
<input type="submit" name="go" class="searchButton" value="Artikel" />&nbsp;
<input type="submit" name="fulltext" class="searchButton" value="Suche" />
</form>
</div>

Auch hier müssten Sie etwa den action-Parameter des Formular anpassen. Im nächsten Teil sollen weitere Möglichkeiten vorgestellt werden, wie Sie Wikipedia für ihre Besucher möglichst nützlich integrieren können.

Bookmark setzen... These icons link to social bookmarking sites where readers can share and discover new web pages.
  • Print
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Bloglines
  • MisterWong
  • MySpace
  • Reddit
  • SEOigg
  • Technorati
  • TwitThis
  • Y!GG
  • Google Bookmarks

Weiterführende Links: