API:Pokračování

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

Velmi často nezískáte všechna požadovaná data v jednom API dotazu. Když k tomu dojde, rozhraní API k výsledkům připojí další prvek (s názvem continue), který označuje, že existuje více dat.

Prvek, který se vrátí, bude mít dvě části: Jedna část bude dílčí prvek také nazvaný continue. To bude mít obvykle přidruženou hodnotu, která zahrnuje symboly ||, pokud jsou k dispozici data pro pokračování. Druhá část bude dílčí prvek (nebo více dílčích prvků), jehož název je zkratkou toho, který seznam je použit v dotazu, s předponou na slovo continue. (Takže například dílčí prvek pro dotaz používající categorymembers by byl cmcontinue, dílčí prvek pro dotaz používající allcategories by byl accontinue, dílčí prvek pro dotaz pomocí protectedtitles by byl ptcontinue atd.)

Chcete-li načíst další data, když je přítomen prvek continue, musíte přidat druhý dílčí prvek jako parametr k dalšímu požadavku API. Pokud například dotaz používající seznam allcategories obsahoval další výsledky, pak by další dotaz API měl obsahovat accontinue= jako parametr spolu s jakoukoli hodnotou accontinue ve výsledcích prvního dotazu. Chcete-li získat všechny výsledky, lze to opakovat, dokud výsledek rozhraní API nebude mít ve výsledcích prvek continue, což znamená, že dotazu neodpovídají žádná další data.

batchcomplete

Když odešlete požadavek API pomocí generátoru spolu s vlastnostmi, výsledek API může signalizovat pokračování, protože zatím existuje více vlastností k načtení pro stránky (v takovém případě je vrácena stejná sada stránek, ale s další sadou vlastností), nebo protože existuje více stránek z generátoru, nebo obojí. Od verze 1.25 vrací API prvek batchcomplete, který označuje, že byla vrácena všechna data pro aktuální "dávku" stránek a prvek continue neobsahuje data pokračování pro vlastnosti, ale místo toho může obsahovat data pokračování pro generátor. To může být užitečné, abyste se vyhnuli vytváření kombinované sady výsledků pro tisíce stránek při použití generátoru společně s pomocnými moduly, které samy o sobě mohou vyžadovat pokračování.

Zpětná kompatibilita pokračování

Verze MediaWiki:
1.9

Od MediaWiki 1.21 až 1.25 bylo nutné v počátečním požadavku zadat continue= (tj. s prázdným řetězcem jako hodnotou), aby bylo možné získat data o pokračování ve výše popsaném formátu. Bez toho by výsledky API indikovaly, že jsou zde další data, a to vrácením prvku query-continue, jak je vysvětleno v Nezpracovaný dotaz pokračovat . Před 1.21 bylo toto nezpracované pokračování jedinou možností.

Pokud vaše aplikace potřebuje používat nezpracované pokračování v MediaWiki 1.26 nebo novější, musíte zadat rawcontinue=, abyste o něj požádali.

Příklady

Příklad 1: Pokračování všech kategorií

The following example uses the allcategories list to request results that exceed the default limit , and thus need to be continued to return more results. Všimněte si, že protože je použit seznam allcategories, má druhý dílčí prvek continue název accontinue.

Výsledek
{
    "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"
            }
        ]
    }
}

Example 2: Continuing categorymembers

The following example uses the categorymembers list to request results that exceed the limit (cmlimit), and thus need to be continued to return more results. Notice that because the categorymembers list is used, the continue's second sub-element is titled cmcontinue.

Výsledek
{
    "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"
            }
        ]
    }
}

Example 3: Python code for iterating through all results

Here is Python code showing how to iterate over query results (using the python requests lib). Note that you should not manipulate or depend on any specifics of the values returned inside the continue element, as they may change.

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']