API:Seiteninfo in Suchergebnissen
Use the MediaWiki API to provide more context searching for Wikipedia pages. |
Einleitung
Dies zeigt die API-Ergebnisse, die Suchergebnisse nutzen, um zusätzliche Informationen über Artikel anzuzeigen, darunter ein Bild und eine Kurzbeschreibung des Themas des Artikels aus Wikidata.
Nützliche Seiteninformationen anzeigen
Wenn du in den mobilen Wikipedia-Apps etwas suchst, wird eine Liste der passenden Seiten angezeigt, während du etwas eintippst. Auch das Bild des Artikels und eine Beschreibung werden angezeigt.
Das Bild wird von der Erweiterung Erweiterung:PageImages erhalten, die eine page_image-Eigenschaft zu Seiten hinzufügt, sofern sie ein geeignetes Bild für die Seite findet. Die Beschreibung kommt von Wikidata, wo eine lokalisierte Beschreibung des Themas jeder Wiki-Seite gepflegt wird.
Ein langsamer Weg, um dies zu tun, wäre, nach Seiten zu suchen, die dem entsprechen, was der Benutzer eintippt, und dann eine action=query
-API-Abfrage für die Eigenschaft pageimages
für die Titel zu stellen und über eine weitere API-Abfrage an wikidata.org die Wikidata-Beschreibung abzufragen.
Dies funktioniert, umfasst jedoch den Einsatz mehrerer API-Abfragen.
Wie es auf Wikimedia Wikis funktioniert
Stattdessen hat die WMF die meisten Wikis (Stand as of Mai 2015 jedoch nicht www.mediawiki.org) geändert, sodass die Wikibase-Client-Erweiterung geladen wird, um auf Wikidata zuzugreifen.
Dies erlaubt dir, in den Quellwiki prop=pageterms
zusammen mit prop=pageimages
abzufragen, statt eine zweite Abfrage an www.wikidata.org
zu stellen.
Beispiel:
Ergebnis |
---|
{
"query": {
"pages": [
{
"pageid": 736,
"ns": 0,
"title": "Albert Einstein",
"thumbnail": {
"source": "https://upload.wikimedia.org/wikipedia/commons/thumb/3/3e/Einstein_1921_by_F_Schmutzer_-_restoration.jpg/38px-Einstein_1921_by_F_Schmutzer_-_restoration.jpg",
"width": 38,
"height": 50
},
"pageimage": "Einstein_1921_by_F_Schmutzer_-_restoration.jpg",
"terms": {
"alias": [
"Einstein"
],
"description": [
"German-American physicist and founder of the theory of relativity"
],
"label": [
"Albert Einstein"
]
}
}
]
}
}
|
formatversion=2
nutzen, wenn du Ergebnisse im JSON-Format abfragst. Die Ergebnisse werden dann in einer Struktur ausgegeben, die einfacher zu verarbeiten ist und es wird standardmäßig UTF8 zum Encodieren genutzt.Wenn du eine Reihe von Seitentiteln hast, kannst du die Informationen von allen auf einmal abfragen. Setze pilimit
auf die Anzahl von Titeln, die du abfragst, ansonsten wird nur ein Bild von dem ersten Artikel der Reihe ausgegeben, der ein passendes Bild enthält. Du solltest auch die Größe der Antwort der API reduzieren, indem du nur die Eigenschaften angibst, die du von den API-Modulen erhalten möchtest, also hier nur das Titelbild und die Wikidata-Beschreibung. Schließlich möchtest du vielleicht auch noch, dass die Abfrage mit Seiten umgeht, die Weiterleitungen sind.
Beispiel:
Ergebnis |
---|
{
"query": {
"pages": [
{
"pageid": 736,
"ns": 0,
"title": "Albert Einstein",
"thumbnail": {
"source": "https://upload.wikimedia.org/wikipedia/commons/thumb/3/3e/Einstein_1921_by_F_Schmutzer_-_restoration.jpg/38px-Einstein_1921_by_F_Schmutzer_-_restoration.jpg",
"width": 38,
"height": 50
},
"terms": {
"description": [
"German-American physicist and founder of the theory of relativity"
]
}
},
{
"pageid": 243597,
"ns": 0,
"title": "Albert Ellis",
"thumbnail": {
"source": "https://upload.wikimedia.org/wikipedia/en/thumb/3/3e/Albert_Ellis.jpg/50px-Albert_Ellis.jpg",
"width": 50,
"height": 33
},
"terms": {
"description": [
"American psychologist"
]
}
},
{
"pageid": 4463732,
"ns": 0,
"title": "Albert Estopinal",
"thumbnail": {
"source": "https://upload.wikimedia.org/wikipedia/commons/thumb/4/4a/EstopinalOfLouisiana.jpg/35px-EstopinalOfLouisiana.jpg",
"width": 35,
"height": 50
},
"terms": {
"description": [
"American politician"
]
}
}
]
}
}
|
Abfrageergebnisse in einer Abfrage abfragen
Das obige Beispiel ist unvollständig, da die Seitentitel, deren Eigenschaften wir abfragen – Albert Einstein|Albert Ellis|Albert Estopinal – aus einer anderen Abfrage stammen müssen.
In vielen Situationen kannst du den Erhalt der Seiteneigenschaften mit der ersten Abfrage für eine Reihe von Seiten kombinieren, indem du die Generator-Funktion der MediaWiki-API nutzt. Die Liste von Seiten aus dem Generator wird die Reihe von Seiten für den anderen Teil der Abfrage, alles in einer einzigen API-Abfrage.
Das Abfragemodul der MediaWiki-API besitzt ein prefixsearch
-Submodul, das eine Liste von Seiten abfragt, die mit dem von dir angegebenen Präfix ("Albert Ei") beginnen und Listenabfragen können als Generator dienen.
Die MobileFrontend-Erweiterung und mobile Apps tun dies. Wenn du dir die API-Abfrage des MobileFrontend in SearchApi.js ansiehst, kannst du sehen, dass die generator=prefixsearch
mit einer Abfrage für die Eigenschaft pageimages
kombiniert wird. Wir können das gleiche tun, indem wir mit prop=pageimages|pageterms
die Wikidata-Beschreibung abfragen.
Beispiel:
Der prefixsearch
-Generator bietet ein index
für jede Seite im pages
-Array in den Ergebnissen; du kannst dies nutzen, um die Seitentitel in die korrekte Reihenfolge zu bringen, jeweils mit Titelbild und Beschreibung.
list=prefixsearch
-Abfrage anhängen, um die Titel in der korrekten Reihenfolge zu erhalten (phab:T98125).
Weitere Feinheiten
Wenn die Reihe von Artikeln, die mit dem Text beginnen, den der Benutzer eingibt, nicht die Suchergebnisliste füllt, suchen die mobilen Wikimedia-Apps innerhalb von Seiten nach Treffern, die du über Special:Search erhalten würdest.
Die mobilen Wikipedia-Android- und iOS-Apps kombinieren generator=prefixsearch
mit Abfragen für die Eigenschaften pageterms und pageimages und dem Erhalt einer Liste von Suchbegriffen. Aus der Implementierungsdatei:
@"action": @"query",
@"generator": @"prefixsearch",
@"gpssearch": self.searchTerm,
@"gpsnamespace": @0,
@"gpslimit": @(SEARCH_MAX_RESULTS),
@"prop": @"pageterms|pageimages",
@"piprop": @"thumbnail",
@"wbptterms": @"description",
@"pithumbsize" : @(SEARCH_THUMBNAIL_WIDTH),
@"pilimit": @(SEARCH_MAX_RESULTS),
// -- Parameters causing prefix search to efficiently return suggestion.
@"list": @"search",
@"srsearch": self.searchTerm,
@"srnamespace": @0,
@"srwhat": @"text",
@"srinfo": @"suggestion",
@"srprop": @"",
@"sroffset": @0,
@"srlimit": @1,
Darüber hinausgehend
Die mobile Wikipedia-iOS-App nutzt die Gesichtserkennung, um den Fokusbereich des Bildes zu bestimmen!
Alternativen
Als Alternative nutzt die Popups-Erweiterung hinter der Seitenvorschaubilder-Funktion das extracts
-Abfragesubmodul der TextExtracts-Erweiterung, um zwei Sätze aus dem Einleitungstext eines Artikels aus einem lokalen Wiki anzuzeigen (zusammen mit seinem Bild, Datum der letzten Bearbeitung, etc.), wenn du über einen Link fährst. Dieser Text aus dem lokalen Wiki ist üblicherweise länger und stellt weniger eine Definition dar, als die Wikidata-Beschreibung. Die API-Abfrage befindet sich in resources/ext.popups.renderer.article.js
Beispiel:
Ergebnis |
---|
{
"query": {
"pages": [
{
"pageid": 736,
"ns": 0,
"title": "Albert Einstein",
"extract": "Albert Einstein (/ˈælbərt ˈaɪnʃtaɪn/; German: [ˈalbɐrt ˈaɪnʃtaɪn]; 14 March 1879 – 18 April 1955) was a German-born theoretical physicist. He developed the general theory of relativity, one of the two pillars of modern physics (alongside quantum mechanics).",
"thumbnail": {
"source": "https://upload.wikimedia.org/wikipedia/commons/thumb/3/3e/Einstein_1921_by_F_Schmutzer_-_restoration.jpg/228px-Einstein_1921_by_F_Schmutzer_-_restoration.jpg",
"width": 228,
"height": 300
},
"revisions": [
{
"timestamp": "2015-06-24T12:17:17Z"
}
]
}
]
}
}
|
Die Abfrage gibt ein Array von Seiten aus, wenn sie erfolgreich ist, enthält sie ein Element, die einzige passende Seite. Es wird auch der Zeitstempel der letzten Änderung (`prop=revisions&rvprop=timestamp`) abgerufen, um "Zuletzt bearbeitet vor N Tagen/Stunden." anzuzeigen.
Nächste Schritte
Probiere diese API-Abfragen auf der Seite Special:ApiSandbox aus und stelle dann die gleichen API-Abfragen für deine eigenen Anwendungen.
Siehe auch
- Introducing lead images to Wikipedia’s Android beta app – ein Blog-Beitrag zu Titelbildern