API:Seiteninfo in Suchergebnissen

From mediawiki.org
This page is a translated version of the page API:Page info in search results and the translation is 100% complete.

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

Suchergebnisse in der Wikipedia Android-App

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: Einfache Abfrage für die Eigenschaften pageimages und pageterms für Albert Einstein:

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"
                    ]
                }
            }
        ]
    }
}
Du solltest in API-Abfragen immer 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: Abfrage für pageterms und pageimage-Titelbilder mehrerer Seiten

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: Eine Abfrage, die einen Generator zur Präfixsuche in Abfragen für hilfreiche Eigenschaften einsetzt.


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.

Früher musstest du eine eigene 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: Seitenvorschaubilder-API-Abfrage mit textextracts-Eigenschaften für Albert Einstein:

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