API:FAQ

From MediaWiki.org
Jump to navigation Jump to search
This page is a translated version of the page API:FAQ and the translation is 69% complete.

Outdated translations are marked like this.
Other languages:
Bahasa Indonesia • ‎Deutsch • ‎English • ‎Ido • ‎Limburgs • ‎Nederlands • ‎Tiếng Việt • ‎Türkçe • ‎bosanski • ‎català • ‎dansk • ‎español • ‎français • ‎hrvatski • ‎italiano • ‎kurdî • ‎occitan • ‎polski • ‎português • ‎português do Brasil • ‎sicilianu • ‎suomi • ‎svenska • ‎čeština • ‎беларуская • ‎беларуская (тарашкевіца)‎ • ‎български • ‎русский • ‎українська • ‎العربية • ‎فارسی • ‎हिन्दी • ‎অসমীয়া • ‎মেইতেই লোন্ • ‎ಕನ್ನಡ • ‎ไทย • ‎中文 • ‎日本語 • ‎粵語 • ‎한국어
Diese Seite befindet sich in Bearbeitung

Lies auch die API:Hauptseite . Sie beantwortet ein paar Fragen, die hier nicht beantwortet werden und verweist auf andere nützliche Seiten.

Wie kann ich...

Hilfe bekommen?

  1. Lies diese FAQs
  2. Versuche die Antwort auf deine Frage in der API-Dokumentation oder der automatisch generierten API-Seite zu finden.
  3. Wenn du die Antwort auf deine Frage nicht im Web findest, kannst du deine Frage im Mediawiki-API-Verteiler stellen.

Soll man einen Fehler (Bug) oder eine Eigenschaft (Feature) einreichen?

Wenn Du einen Bug in der API gefunden hast oder ein Feature anfragen willst, melde dies in Phabricator.Suche zuerst, ob der Bug bereits berichtet wurde und gib die MediaWiki-API als Projekt an, wenn Du einen neuen Bug der API meldest. Wenn die Funktion, die Du anforderst, oder der Bug, den Du meldest, Teil einer Erweiterung ist (z. B. AbuseFilter, FlaggedRevs), füge das Projekt der Erweiterung hinzu, z. B. "MediaWiki-extensions-AbuseFilter".

herausfinden, welche Aktion oder welches Untermodul aufgerufen werden soll?

Die MediaWiki-API ist groß und Erweiterungen vergrößern sie noch weiter. Einige Empfehlungen:

  • Wenn Sie versuchen, Informationen über eine Seite zu erhalten, verwenden Sie wahrscheinlich ein prop= -Submodul von action=query. Andere Anfrage-Submodule geben Listen von Seiten und MetaInformationen über das Wiki zurück. Zeigen Sie die generierte API-Hilfe aller Abfrage-Submodule an.
  • Wenn Sie feststellen, dass eine Wiki-Seite nach dem ersten Laden etwas Interessantes tut, wird sie eine API-Anfrage stellen.
    • Öffnen Sie die Entwicklerkonsole ihres Browsers und suchen Sie nach der Netzwerkanfrage an api.php.
    • Der gesamte Code, der auf Wikimedia-Wikis ausgeführt wird, ist Open Source, sodass Du den Quellcode lesen kannst, der API-Anforderungen erstellt. Eine Strategie zum Auffinden des Quellcodes besteht darin, ?uselang=qqx an die URL der Wiki-Seite anzuhängen, um die Schlüsselwörter in der Nähe der API-Ergebnisse anzuzeigen. Anschließend kannst Du in den gefundenen Nachrichtendateien des Kerns und den Erweiterungen nach diesem Schlüsselwort suchen i18n/en.json.
  • Sie können die gesamte erweiterte generierte API-Hilfe auf einer Seite anzeigen, indem Sie recursivesubmodules=1 anhängen, hier ist es.

Die oben aufgeführten Links zur generierten API-Hilfe führen zur englischen Wikipedia. Du solltest die generierte API-Hilfe in dem Wiki durchsuchen, in dem Du API-Abfragen stellst, da unterschiedliche Wikis unterschiedliche Konfigurationen und unterschiedliche Erweiterungen enthalten.

die API aufrufen?

Sende HTTP-Anfragen an api.php. In der englischen Wikipedia lautet die URL beispielsweise https://en.wikipedia.org/w/api.php . Die meisten Wikis haben api.php unter einer ähnlichen URL: Verwende für Seitenaktionen einfach api.php anstelle von index.php. Ab 1.17 unterstützt MediaWiki "Einfachste Erkenntnisse"; Die HTML-Quelle jeder Seite enthält einen RSD-Link, der auf einen RSD-Deskriptor verweist, der angibt, wo sich die API befindet. Wenn Du die URL von api.php in einem Wiki eines Drittanbieters (nicht von Wikimedia betrieben) nicht herausfinden kannst, wende Dich an dessen Betreiber. Dieses Wiki kann die MediaWiki-API möglicherweise nicht aktivieren (siehe $wgEnableAPI).

API ausprobieren

  • verwende die Special:ApiSandbox
  • Aktiviere die Entwicklerkonsole Deines Browsers und beobachte die Internetanfragen an api.php, während Du mit dem Wiki interagierst

das Ausgabeformat kontrollieren?

Übergib &format=someformat in der Abfragezeichenfolge. Weitere Informationen findest Du in der Liste der Ausgabeformate.

Prüfe: Ist ein API-Modul verfügbar?

Mit action=paraminfo kannst Du Informationen zu den aufzurufenden API-Modulen und Submodulen (z. B. query+geosearch) anfordern. Das paraminfo.modules-Feld in der Antwort muss einen path-Schlüssel für jedes Modul und jedes Submodul enthalten. Fehlende Informationen sind nicht verfügbar.

Wenn ein API-Modul nicht verfügbar ist und Du aber weißt, welche Erweiterung es implementiert, kannst Du überprüfen, ob diese Erweiterung geladen ist, indem Du die Metainformationen siteinfo für siprop=extensions abfrägst. Suche in der ausgegebenen Liste nach ihrem Namen.

Auch wenn ein Modul verfügbar zu sein scheint, musst Du immer eventuelle API-Fehler gegebenenfalls bearbeiten.

Fehler entdecken?

Siehe Fehler und Warnungen.

Eine Fehlerantwort von der API setzt den HTTP-Header MediaWiki-API-Error und gibt eine error-Struktur zurück. Besuche für eine beispielhafte Fehlerantwort https://en.wikipedia.org/w/api.php?action=blah.

den Inhalt einer Seite erhalten (Wikitext)?

Wenn Du nur den rohen Wikitext ohne weitere Informationen haben möchtest, verwende am besten den action=raw-Modus von index.php anstelle der API: https://en.wikipedia.org/w/index.php?action=raw&title=Main_Page. Beachte, dass dies normalen Wikitext ohne Formatierung ausgibt. Siehe auch die Dokumentation action=raw

Verwende die API: https://en.wikipedia.org/w/api.php?action=query&prop=revisions&titles=Main_Page, um weitere Informationen zu der Seite und ihrer neuesten Version zu erhalten. Siehe auch die Dokumentation zum Modul prop=revisions .

Du kannst pro API-Anforderung 50 Seiten abrufen: https://en.wikipedia.org/w/api.php?action=query&prop=revisions&rvprop=content&titles=Main_Page%7CArticles. Dies funktioniert auch mit Generatoren.

den Inhalt einer Seite erhalten (HTML)?

Wenn Du nur den HTML-Code verwenden möchtest, verwende am besten den Modus index.php action=render anstelle der API: https://en.wikipedia.org/wiki/Main_Page?action=render. Siehe auch die Dokumentation action=render

With the advent of RESTBase, on Wikimedia wikis you can instead request the cached HTML of a page, for example https://en.wikipedia.org/api/rest_v1/page/html/Main_Page Unlike ?action=render this returns a complete HTML document (i.e. <html><head>various metadata</head><body>...</body></html>); you could use an HTML parsing library to get the inner HTML of the <body> tag (see the documentation).

Um beim Parsen weitere Informationen aus dem Wikitext zu erhalten (Links, Kategorien, Abschnitte usw.), hast Du folgende Möglichkeiten:

wie mit den Änderungen von 2015 an der API umgehen?

The default continuation behavior changed in MediaWiki 1.26. If you request additional data based on continue information from an API response, you must update your code. Either

Also, since MediaWiki 1.25 an improved output structure for JSON and PHP formats has been available if you add formatversion=2 to your requests. As of July 2015, this is still considered experimental because a few API modules may get further improvements in this mode. If you are willing to risk needing to make future changes to adapt, it's much nicer to process API results with formatversion=2.

Warum...

bekomme ich HTTP 403 Fehler?

This could mean you are not passing a User-Agent HTTP header or that your User-Agent is empty or blacklisted m:User-Agent policy. See API:Client code for more information. Also, it could mean that you are passing & in the query string of a GET request: Wikimedia blocks all such requests, use POST for them instead.

bekomme ich den Lese-API-Verweigerungs-Fehler? (readapidenied error)

The wiki you are querying contains private content and requires users to log in in order to be able to read all pages. This means that a client needs to be logged in to query any information at all through the API. See API:Login for more information. It's not currently possible to query the contents of whitelisted pages without logging in, even though they are available in the regular user interface.

bekomme ich schlechte Token-Fehler?

This is usually because you are either not passing a token at all (read about tokens in the documentation of the module you are using) or because you are having trouble staying logged in. It's also possible you are reusing a type of token that can't be reused (see module documentation for details) or that you are using a token that's associated with an expired session. In general, when using cached tokens, refetch the token (see API:Tokens) and try again before giving up.

bekomme ich Warnungen anstelle von Tokens (Aktion 'Bearbeiten' ist nicht für den aktuellen Benutzer erlaubt)?

You either don't have the right to execute the action you requested, or you are having trouble staying logged in.

do I get mustposttoken error?

The action you are attempting must be requested using HTTP POST. You probably clicked on api.php URL in a browser or modified an existing URL in the browser's location field, but that results in an HTTP GET request. You have to use a library (such as the mediawiki.api ResourceLoader module) or utility that can make POST requests; usually you also have to provide it your session cookies and an API:token so MediaWiki can verify that you are the logged-in user with rights to perform the action. As a hack, you might be able to use the cURL command-line utility, providing it each API parameter with -F 'action=delete' -F 'token=hexadecimal stuff+\' and the necessary browser cookies with -H 'Cookie:your session cookies'. The Network panel of the browser developer tools window (Ctrl+Shift+I) in Firefox and chromium has a "Copy as cURL" menu item that can help, but it's still fiddly.

Depending on what you want to do it's easier to learn how to use a bot or library that handles the details of login, cookies, and tokens for you.

steht X nicht über die API zur Verfügung?

Not all features available in the user interface are available through the API. Such features weren't implemented either because no one has gotten around to it yet or because no one has requested them. For information about filing feature requests, see above.

gibt mein API-Aufruf auf Wikimedia Wikis nur ein HTML-Fehler zurück?

If you use API calls with POST requests make sure that these requests don't use Content-Type: multipart/form-data. This happens for instance if you use CURL to access the API and you pass your POST parameters as an array. The Squid proxy servers which are used at frontend servers at the Wikimedia wiki farm don't handle that correctly, thus an error is returned.

Instead, use the "value1=key1&value2=key2..." notation to pass the parameters as a string, similar to GET requests.

On other wikis which you access directly it doesn't make a difference.

In addition, some software (such as cURL) send an Expect: 100-continue header for longer POST requests (>1024 bytes). The wikimedia wikis that go through Squid servers can't cope with this. If you are still getting HTML errors with post requests, and are not logged in, try setting a blank Expect header (e.g. using cURL on the command line, use the option --header 'Expect:').

funktionieren lange API-URLs wirklich nicht?

There is a maximum limit of the url size that can be used with the API when making GET requests. This limit varies depending on the website. Wikimedia's limit is roughly around 8100 characters. To get around this limit use POST requests instead (you may also need to set the Expect header, as described above)