Einstieg in die Wikipedia-API am Beispiel einer Infobox-Abfrage
In diesem Beitrag zeige ich, wie die Wikipedia-API in PHP angesprochen werden kann. Wir werden viele Details besprechen, wie die API genutzt wird und wie man zu einem Suchbegriff eine Infobox anzeigen lässt. Zuletzt zeige ich die Nutzung der Wikipedia-API anhand einer PHP-API-Klasse und wie diese eingerichtet und verwendet wird.
Was ist eine API?
Was ist genau eine API? API steht für Application Programming Interface, und vereinfacht gesagt, ermöglicht es einer Anwendung, mit anderen Anwendungen zu arbeiten, meist in Form von JSON-Daten.
Die API (Application Programming Interface) der Wiki-Projekte erlaubt die Abfrage von Informationen über Projekte oder Seiten, die auch automatisiert durch Software abgerufen und verarbeitet werden können.
1. Verwendung der Wikipedia-API
Nehmen wir an, dass eine Webanwendung Daten aus einer Quelle wie Wikipedia bezieht. Mit einer API könne die Informationen programmgesteuert direkt aus Wikipedia bezogen und so formatiert werden, dass sie gut zu dem Projekt, der App oder der Website passen. Außerdem kann gezielt die Informationen ausgewählt werden, die benötigt wird.
2. Wikipedia API-Endpunkt einrichten
Woah, woah, woah. Langsam! Was ist ein API-Endpunkt? Gute Frage! Ein API-Endpunkt ist im Wesentlichen die Adresse der jeweiligen Daten, die wir benötigen. Wikipedia bietet die Daten somit auch maschinenlesbar an.
Für ein erstes Beispiel werden wir Wikipedia-Artikel über „Loriot“ einholen. So sieht unser Endpunkt aus:
https://de.wikipedia.org/w/api.php?action=query&format=json&list=search&srsearch=intitle:Loriot
Einfach mal diese URL 👆 in den Browser 💻 kopieren.
Die Details und das Innenleben der obigen URL wollen wir an der Stelle erstmal außer acht lassen. Hier klicken, um zu sehen, wie der Endpunkt tatsächlich aussieht.
Das sollte dann in etwa so aussehen:
{"batchcomplete":"","query":{"searchinfo":{"totalhits":10},"search":[{"ns":0,"title":"Loriot","pageid":2914,"size":69056,"wordcount":6888,"snippet":"Loriot [lo.\u0280i'o:], b\u00fcrgerlich Bernhard-Viktor Christoph-Carl von B\u00fclow ['by\u02d0lo], kurz Vicco von B\u00fclow (*\u00a012. November 1923 in Brandenburg an der Havel;","timestamp":"2019-01-04T22:59:23Z"},{"ns":0,"title":"Loriot (Begriffskl\u00e4rung)","pageid":8559895,"size":517,"wordcount":49,"snippet":"Loriot (franz\u00f6sisch: Pirol) steht f\u00fcr: Loriot, K\u00fcnstlername des deutschen Humoristen Vicco von B\u00fclow Loriot (Fernsehserie), deutsche Comedy-Fernsehserie","timestamp":"2015-05-03T08:21:35Z"},{"ns":0,"title":"Loriot (Fernsehserie)","pageid":7379580,"size":24225,"wordcount":1128,"snippet":"Loriot ist eine von 1976 bis 1978 produzierte deutsche Comedy-Fernsehserie des Senders Radio Bremen. In jeder der sechs Folgen (nummeriert mit den r\u00f6mischen","timestamp":"2019-01-10T13:52:42Z"},{"ns":0,"title":"Pappa ante portas","pageid":816989,"size":9536,"wordcount":848,"snippet":"portas ist eine deutsche Filmkom\u00f6die von 1991 und der zweite Spielfilm mit Loriot in der Hauptrolle und als Regisseur. Als Heinrich Lohse, Einkaufsdirektor","timestamp":"2019-03-02T09:43:40Z"},{"ns":0,"title":"Loriot-Sofa als Bronzedenkmal","pageid":8511709,"size":3294,"wordcount":335,"snippet":"Das Loriot-Sofa als Bronzedenkmal ist eine Skulptur in Bremen-Mitte vor dem Eingang des Sendezentrums Radio Bremen an der Diepenau. Sie wurde 2013 aufgestellt","timestamp":"2019-02-24T17:04:35Z"},{"ns":0,"title":"Feierabend (Loriot)","pageid":10503981,"size":2951,"wordcount":345,"snippet":"dreieinhalb Minuten langer Zeichentrick-Sketch des deutschen Humoristen Loriot, der von dem Ehe- bzw. Kommunikationsproblem der auch in anderen Sketchen","timestamp":"2019-01-22T17:18:49Z"},{"ns":0,"title":"Frantz Loriot","pageid":8822000,"size":3158,"wordcount":326,"snippet":"Frantz Loriot (* 1980) ist ein franz\u00f6sischer Improvisationsmusiker (Bratsche). Loriot begann bereits dreij\u00e4hrig mit dem Geigenunterricht. In der Universit\u00e4t","timestamp":"2018-01-26T07:09:10Z"},{"ns":0,"title":"Fernand Loriot","pageid":8323789,"size":933,"wordcount":59,"snippet":"Fernand Loriot (* 10. Oktober 1870 in Ceton; \u2020 12. Oktober 1932) war ein franz\u00f6sischer Pazifist und Mitbegr\u00fcnder der franz\u00f6sischen kommunistischen Partei","timestamp":"2018-07-01T17:42:01Z"},{"ns":0,"title":"Robert Loriot","pageid":8559615,"size":2504,"wordcount":287,"snippet":"Robert Loriot (* 1907; \u2020 1980) war ein franz\u00f6sischer Romanist und Dialektologe. Loriot habilitierte sich 1960 an der Universit\u00e4t Montpellier (bei Jean","timestamp":"2015-01-21T08:31:56Z"},{"ns":0,"title":"Otacilia loriot","pageid":7072259,"size":4368,"wordcount":386,"snippet":"Otacilia loriot ist eine asiatische Art aus der Gattung Otacilia innerhalb der Familie Phrurolithidae. Die Erstbeschreibung erfolgte nur anhand eines M\u00e4nnchens","timestamp":"2018-02-25T13:27:41Z"}]}}
🔥 TIPP: Einfach den Text in einen JSON Formatter eingeben. Mit einem solchen Programm sieht das hässliche JSON-Durcheinander 👆 gleich viel besser aus👇:
Oder man nimmt diesen Endpunkt, der gibt die Infos (dank dem Parameter format=jsonfm für JSON formatiert) direkt im Browser in HTML formatiertem JSON aus:
https://de.wikipedia.org/w/api.php?action=query&format=jsonfm&list=search&srsearch=intitle:Loriot
Weitere Informationen zum Erstellen von Wikipedia-API-Endpunkten sind in der Wikipedia-API-Dokumentation zu finden.
3. Daten vom Wikipedia Server holen
A. HTTP-Anfrage stellen
Mit der URL des API Entpunktes holen wir per PHP (mit der funktion file_get_contents) jetzt die Antwort von Wikipedia mittels einer einfachen HTTP-Anfrage:
<?php $url = 'https://de.wikipedia.org/w/api.php?action=query&format=json&list=search&srsearch=intitle:Loriot'; $content = file_get_contents($url); echo '<pre>'; var_dump($content);
B. JSON-Antwort konvertieren
Der Befehl json_decode übernimmt das decodieren der JSON Daten für uns. Setzen wir den zweiten Parameter auf TRUE wird das zurückgegebene Objekt für uns direkt in ein assoziatives Array umgewandelt:
<?php $url = 'https://de.wikipedia.org/w/api.php?action=query&format=json&list=search&srsearch=intitle:Loriot'; $content = file_get_contents($url); $content = json_decode($content, TRUE); echo '<pre>'; var_dump($content);
Mehr Informationen über JSON im Mozilla Developer Network.
C. API Daten ausgeben
Dank des var_dump Befehls haben wir eben genau sehen können wo die von uns gewünschten Informationen in dem assoziativen Array abgelegt sind und können diese direkt ansprechen und z.B. ausgeben:
<?php $url = 'https://de.wikipedia.org/w/api.php?action=query&format=json&list=search&srsearch=intitle:Loriot'; $content = file_get_contents($url); $content = json_decode($content, TRUE); echo '<pre>'; echo '<strong>'.$content['query']['search'][0]['title'].'</strong><br>'; echo '<small>'.$content['query']['search'][0]['snippet'].'</small>';
4. Code der PHP Wikipedia API Klasse
Das ist im Wesentlichen schon alles, was es dazu zu sagen gibt! 👏👏👏 Wenn das ganze etwas komfortabler mit etwas mehr Funktionen funktionieren soll, ist diese Wikipedia API Klasse in PHP genau die richtige Anwendung um eine Wikipedia-Infobox über ein gewünschtes Suchwort in unserem Browser ausgeben.
<?php require_once __DIR__.'/wiki2api.php'; // Include the Wikipedia API Class $wiki = new wiki(); // Start the Wikipedia API Class echo $wiki->api($_GET['q']); // Output the API Response
Wenn Sie dieses PHP Beispiel als example.php auf einem Webserver speichern, können Sie die Funktion im Browser mit der URL http://localhost/example.php?q=Loriot
testen. Natürlich muss die PHP Klasse für die Wikipedia API wiki2api.php
und das HTML Template wiki2api.phtml
im gleichen Ordner gespeichert sein. Beide Dateien finden Sie in meinem GitHub Account. Viel Spaß damit!
5. Hier geht es zu meiner Wikipedia-API-Klasse
Hoffentlich haben Sie festgestellt, dass dies ein hilfreicher Artikel zur Verwendung der Wikipedia-API ist! Besuchen Sie mich auf Github, um zu sehen, wie ich die PHP Wikipedia-API Klasse verwendet habe, oder um meine anderen Arbeiten zu sehen! 👨💻
Schicken Sie mir eine E-Mail an pro@gaffling.com mit Fragen und wenn Ihnen das gefallen hat, bleiben Sie dran und kommentieren Sie unten! 👇
Dieser Artikel ist ein Gastbeitrag von I. Gaffling. Er arbeitete als CEO in einer Internetagentur. Nach über 10 Jahren mit nine-to-five Job entschied er sich, als Freiberufler zu arbeiten. Derzeit berät und schreibt er für suchmaschine.biz, ein Search Tech Blog zum Thema Web-Crawler Search Engine in PHP für Entwickler.