Wikipedia für die eigene Webseite – Teil 1

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.

This entry was posted in PHP. Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *