API:Continue/de

From mediawiki.org
This page is a translated version of the page API:Continue and the translation is 100% complete.
MediaWiki Version:
1.26

Sehr oft erhältst du nicht alle gewünschten Daten in einer einzigen API-Abfrage. In diesem Fall fügt die API ein zusätzliches Element (mit der Bezeichnung continue) an die Ergebnisse an, um anzuzeigen, dass weitere Daten existieren.

Das Element, das zurückgegeben wird, besteht aus zwei Teilen: Der eine Teil ist ein Unterelement, das zudem den Namen continue trägt. In der Regel ist damit ein Wert verbunden, der die Symbole || enthält, wenn Daten zum Fortfahren existieren. Der zweite Teil ist ein Subelement (oder mehrere Subelemente), dessen Titel die Abkürzung des in der Abfrage verwendeten Liste ist, dem das Wort continue vorangestellt ist. (So wäre zum Beispiel das Unterelement für eine Abfrage mit categorymembers cmcontinue, das Unterelement für eine Abfrage mit allcategories accontinue, das Unterelement für eine Abfrage mit protectedtitles ptcontinue usw.)

Um weitere Daten abzurufen, wenn das Element continue vorhanden ist, musst du das zweite Unterelement als Parameter zur nächsten API-Anfrage hinzufügen. Wenn zum Beispiel eine Abfrage mit der Liste allcategories zusätzliche Ergebnisse enthält, sollte die nächste API-Abfrage accontinue= als Parameter enthalten, zusammen mit dem Wert von accontinue in den Ergebnissen der ersten Abfrage. Um alle Ergebnisse zu erhalten, kann dies so lange wiederholt werden, bis ein API-Ergebnis kein continue Element in den Ergebnissen hat, was bedeutet, dass keine Daten mehr existieren, die der Abfrage entsprechen.

batchcomplete

Wenn du eine API-Anfrage mit einem Generator zusammen mit Eigenschaften stellst, kann das API-Ergebnis signalisieren, dass du fortfahren sollst, weil noch mehr Eigenschaften für die bisherigen Seiten abgerufen werden müssen (in diesem Fall wird derselbe Satz von Seiten zurückgegeben, jedoch mit dem nächsten Satz von Eigenschaften), weil mehr Seiten aus dem Generator vorhanden sind, oder beides. Ab Version 1.25 gibt die API ein batchcomplete Element zurück, um anzuzeigen, dass alle Daten für den aktuellen "Stapel" von Seiten zurückgegeben wurden, und das Element continue enthält keine Fortsetzungsdaten für Eigenschaften, sondern kann stattdessen Fortsetzungsdaten für den Generator enthalten. Dies kann nützlich sein, um zu vermeiden, dass eine kombinierte Ergebnismenge für Tausende von Seiten festgelegt wird, wenn ein Generator zusammen mit Prop-Modulen verwendet wird, die ihrerseits eine Fortsetzung benötigen können.

Abwärtskompatibilität von continue

MediaWiki Version:
1.9

Von MediaWiki 1.21 bis 1.25 war es erforderlich, continue= (d.h. mit einem leeren String als Wert) in der ersten Anfrage anzugeben, um Fortsetzungsdaten in dem oben beschriebenen Format zu erhalten. Ohne dies zu tun, würden die API-Ergebnisse anzeigen, dass zusätzliche Daten existieren, indem sie ein Element query-continue zurückgeben, wie in Raw query continue erklärt. Vor 1.21 war diese rohe Fortsetzung die einzige Option.

Wenn deine Anwendung die Raw-Fortsetzung in MediaWiki 1.26 oder später verwenden muss, musst du rawcontinue= angeben, um sie anzufordern.

Beispiele

Beispiel 1: Fortsetzung von allcategories

Das folgende Beispiel verwendet die allcategories Liste , um Ergebnisse anzufordern, die das vorgegebene Limit überschreiten und daher fortgesetzt werden müssen, um weitere Ergebnisse zu liefern. Da die Liste allcategories verwendet wird, heißt das zweite Unterelement von continue accontinue.
Ergebnis
    "continue": {
        "accontinue": "List_of_19th_century_baseball_players",
        "continue": "-||"
    },
    "batchcomplete": "",
    "query": {
        "allcategories": [
            {
                "*": "List of"
            },
            {
                "*": "List ofPalestinians"
            },
            {
                "*": "List of \"M\" series military vehicles"
            },
            {
                "*": "List of ''The Fast and the Furious'' characters"
            },
            {
                "*": "List of 100 Deeds for Eddie McDowd"
            },
            {
                "*": "List of 1919 Actors"
            },
            {
                "*": "List of 1972 births"
            },
            {
                "*": "List of 1999 ballet premieres"
            },
            {
                "*": "List of 19th-century Russian artists"
            },
            {
                "*": "List of 19th century Russian artists"
            }
        ]
    }
}

Beispiel 2: Fortsetzung von categorymembers

Das folgende Beispiel verwendet die categorymembers Liste , um Ergebnisse anzufordern, die die Grenze (cmlimit) überschreiten und daher fortgesetzt werden müssen, um weitere Ergebnisse zu liefern. Beachte, dass durch die Verwendung der Liste categorymembers das zweite Unterelement von continue den Namen cmcontinue trägt.
Ergebnis
{
    "batchcomplete": true,
    "continue": {
        "cmcontinue": "page|2a2a4c4e2a402a443e382a403a30011201dc11|21583092",
        "continue": "-||"
    },
    "query": {
        "categorymembers": [
            {
                "pageid": 3801230,
                "ns": 10,
                "title": "Template:User history"
            },
            {
                "pageid": 7769732,
                "ns": 10,
                "title": "Template:User history2"
            },
            {
                "pageid": 56312624,
                "ns": 10,
                "title": "Template:User history3"
            },
            {
                "pageid": 8364349,
                "ns": 2,
                "title": "User:-1348-"
            },
            {
                "pageid": 12553892,
                "ns": 2,
                "title": "User:(RT)"
            },
            {
                "pageid": 60272884,
                "ns": 2,
                "title": "User:MPSHeritage"
            },
            {
                "pageid": 42055428,
                "ns": 2,
                "title": "User:Tyssil"
            },
            {
                "pageid": 10356432,
                "ns": 2,
                "title": "User:1GoodNight4Life"
            },
            {
                "pageid": 59180278,
                "ns": 2,
                "title": "User:1I0I1I0I1I0"
            },
            {
                "pageid": 51651783,
                "ns": 2,
                "title": "User:01iproject09"
            },
            {
                "pageid": 29595961,
                "ns": 2,
                "title": "User:3family6"
            },
            {
                "pageid": 43181830,
                "ns": 2,
                "title": "User:3family6/Education and interests"
            },
            {
                "pageid": 17919048,
                "ns": 2,
                "title": "User:03md"
            },
            {
                "pageid": 44202586,
                "ns": 2,
                "title": "User:4Sage Wiki"
            },
            {
                "pageid": 64607473,
                "ns": 2,
                "title": "User:05Pier"
            },
            {
                "pageid": 46626298,
                "ns": 2,
                "title": "User:16pedia2"
            },
            {
                "pageid": 33371141,
                "ns": 2,
                "title": "User:17adavis7"
            },
            {
                "pageid": 15797963,
                "ns": 2,
                "title": "User:21stCenturyGreenstuff"
            },
            {
                "pageid": 61571792,
                "ns": 2,
                "title": "User:28regiment"
            },
            {
                "pageid": 17053340,
                "ns": 2,
                "title": "User:37ophiuchi"
            },
            {
                "pageid": 9781448,
                "ns": 2,
                "title": "User:88wolfmaster"
            },
            {
                "pageid": 17120424,
                "ns": 2,
                "title": "User:88wolfmaster/Userboxes"
            },
            {
                "pageid": 16369371,
                "ns": 2,
                "title": "User:123w456t"
            },
            {
                "pageid": 69413683,
                "ns": 2,
                "title": "User:296cherry"
            },
            {
                "pageid": 41449363,
                "ns": 2,
                "title": "User:636Buster"
            },
            {
                "pageid": 8451054,
                "ns": 2,
                "title": "User:1549bcp"
            },
            {
                "pageid": 26153484,
                "ns": 2,
                "title": "User:1951bfrj"
            },
            {
                "pageid": 28820985,
                "ns": 2,
                "title": "User:11614soup"
            },
            {
                "pageid": 69602489,
                "ns": 2,
                "title": "User:16272js"
            },
            {
                "pageid": 9578722,
                "ns": 2,
                "title": "User:A Geographer"
            },
            {
                "pageid": 36155511,
                "ns": 2,
                "title": "User:A knyght ther was"
            },
            {
                "pageid": 6637293,
                "ns": 2,
                "title": "User:A student of history"
            },
            {
                "pageid": 22308356,
                "ns": 2,
                "title": "User:A Werewolf"
            },
            {
                "pageid": 39893010,
                "ns": 2,
                "title": "User:A. Pseudonym"
            },
            {
                "pageid": 36267514,
                "ns": 2,
                "title": "User:A.Aboumrad"
            },
            {
                "pageid": 8475873,
                "ns": 2,
                "title": "User:A.Arc"
            },
            {
                "pageid": 5283037,
                "ns": 2,
                "title": "User:A.J.Chesswas"
            },
            {
                "pageid": 26516505,
                "ns": 2,
                "title": "User:A.kamburov"
            },
            {
                "pageid": 40306753,
                "ns": 2,
                "title": "User:A.sky245"
            },
            {
                "pageid": 6320018,
                "ns": 2,
                "title": "User:A.Zhubrovsky"
            },
            {
                "pageid": 68777172,
                "ns": 2,
                "title": "User:A2Bros"
            },
            {
                "pageid": 26764821,
                "ns": 2,
                "title": "User:A2soup"
            },
            {
                "pageid": 68203375,
                "ns": 2,
                "title": "User:A0231050705"
            },
            {
                "pageid": 26356724,
                "ns": 2,
                "title": "User:Aaa8841"
            },
            {
                "pageid": 61127272,
                "ns": 2,
                "title": "User:Aaghi"
            },
            {
                "pageid": 5410981,
                "ns": 2,
                "title": "User:Aak044"
            },
            {
                "pageid": 23936323,
                "ns": 2,
                "title": "User:Aardvarkzz"
            },
            {
                "pageid": 2934321,
                "ns": 2,
                "title": "User:Aaron of Mpls"
            },
            {
                "pageid": 40974272,
                "ns": 2,
                "title": "User:Aaron-Kocourek"
            },
            {
                "pageid": 13618776,
                "ns": 2,
                "title": "User:Aaroncorey"
            }
        ]
    }
}

Beispiel 3: Python-Code zum Iterieren durch alle Ergebnisse

Hier ist ein Python-Code, der zeigt, wie man über Abfrageergebnisse iteriert (unter Verwendung der Python requests Bibliothek). Beachte, dass du die Werte, die im Element continue zurückgegeben werden, nicht manipulieren oder von ihnen abhängig machen solltest, da sie sich ändern können.

for result in query({'generator': 'allpages', 'prop': 'links'}):
    # process result data
...
def query(request):
    request['action'] = 'query'
    request['format'] = 'json'
    lastContinue = {}
    while True:
        # Clone original request
        req = request.copy()
        # Modify it with the values returned in the 'continue' section of the last result.
        req.update(lastContinue)
        # Call API
        result = requests.get('https://en.wikipedia.org/w/api.php', params=req).json()
        if 'error' in result:
            raise Exception(result['error'])
        if 'warnings' in result:
            print(result['warnings'])
        if 'query' in result:
            yield result['query']
        if 'continue' not in result:
            break
        lastContinue = result['continue']