Jump to content

API/Query

From Numinix MediaWiki Demo

<languages/>

<translate> The <tvar name=1>action=query</tvar> module allows you to fetch information about a wiki and the data stored in it, such as the wikitext of a particular page, the links and categories of a set of pages, or the token you need to . </translate>

<translate>

API documentation[edit]

</translate>


<translate>

Query modules[edit]

The query module has three types of submodules (also called query modules):

  • about the wiki and the logged-in user.</translate>

<translate>

  • of pages, including page revisions and content.</translate>

<translate>

  • of pages that match certain criteria.

Examples[edit]

</translate>


<translate>

Example 1: Specifying pages[edit]

Unlike meta and list query modules, all property query modules work on a set of pages that can be specified in one of the following ways:

  • By name using the <tvar name=1>titles</tvar> parameter, e.g. <tvar name=2>titles=Foo|Bar|Main_Page</tvar>.</translate>

<translate>

  • By page ID using the <tvar name=1>pageids</tvar> parameter, e.g. <tvar name=2>pageids=123|456|75915</tvar>.</translate>

<translate>

  • By revision ID using the <tvar name=1>revids</tvar> parameter, e.g. <tvar name=2>revids=478198|54872|54894545</tvar>.</translate> <translate> Most query modules will convert revision ID to the corresponding page ID.</translate> <translate> Only <tvar name=1>revisions}}</tvar> actually uses the revision ID itself.</translate>

<translate>

  • Using a [[<tvar name=1>#Generators</tvar>|generator]].

</translate>


<translate>

GET request[edit]

</translate> 5487548945 |p3=format=json |p4=formatversion=2 }} <translate>

Response[edit]

</translate> <syntaxhighlight lang="json"> {

   "batchcomplete": true,
   "query": {
       "pages": [
           {
               "pageid": 1130,
               "ns": 0,
               "title": "Avicenna"
           },
           {
               "pageid": 17412,
               "ns": 0,
               "title": "Klein bottle"
           },
           {
               "pageid": 33642,
               "ns": 0,
               "title": "Warrant"
           }
       ]
   }

} </syntaxhighlight>


<translate>

Example 2: Title normalization[edit]

Title normalization converts page titles to their canonical form.

This means capitalizing the first character, replacing underscores with spaces, and changing namespace to the localized form defined for that wiki. </translate>



<translate>

GET request[edit]

</translate> article_B | p3=format=json | p4=formatversion=2 }} <translate>

Response[edit]

</translate> <syntaxhighlight lang="json"> {

   "batchcomplete": true,
   "query": {
       "normalized": [
           {
               "fromencoded": false,
               "from": "Project:articleA",
               "to": "Wikipedia:ArticleA"
           },
           {
               "fromencoded": false,
               "from": "article_B",
               "to": "Article B"
           }
       ],
       "pages": [
           {
               "ns": 0,
               "title": "Article B",
               "missing": true
           },
           {
               "ns": 4,
               "title": "Wikipedia:ArticleA",
               "missing": true
           }
       ]
   }

} </syntaxhighlight>


<translate>

Example 3: Missing and invalid titles[edit]

Titles that don't exist or are invalid will have a <tvar name=1>missing</tvar> or <tvar name=2>invalid</tvar> attribute set in the response.

In output formats that support numeric array keys, missing and invalid titles will have negative page IDs. </translate>

<translate> In some cases, a title can be viewed by a user but cannot be accessed by the API, such as pages that mirror content from another wiki.</translate> <translate> These titles will have a <tvar name=1>known</tvar> attribute set in the response.</translate>


<translate>

GET request[edit]

</translate> Main%20PageTalk: |p3=format=json |p4=formatversion=2 }} <translate>

Response[edit]

</translate> <syntaxhighlight lang="json"> {

   "batchcomplete": true,
   "query": {
       "pages": [
           {
               "ns": 0,
               "title": "Doesntexist",
               "missing": true
           },
           {
               "title": "Talk:",
               "invalidreason": "The requested page title is empty or contains only the name of a namespace.",
               "invalid": true
           },
           {
               "pageid": 15580374,
               "ns": 0,
               "title": "Main Page"
           }
       ]
   }

} </syntaxhighlight>


<translate>

Example 4: Continuing queries[edit]

When all the data is not returned in the response of a query, there will be a <tvar name=1>continue</tvar> attribute to indicate that there is more data. </translate>


<translate>

GET request[edit]

</translate>

<translate>

Response[edit]

</translate> <syntaxhighlight lang="json"> {

   "continue": {
       "accontinue": "List_of_largest_companies_in_Sri_Lanka",
       "continue": "-||"
   },
   "query": {
       "allcategories": [
           {
               "category": "List of BioWare characters"
           },
           {
               "category": "List of Harlequin Romance novels"
           },
           {
               "category": "List of MPs elected in UK elections templates"
           },
           {
               "category": "List of Metamorphoses characters"
           },
           {
               "category": "List of Rockstar Games characters"
           },
           {
               "category": "List of Star Trek awards and nominations"
           },
           {
               "category": "List of Swedish films of the 2020s"
           },
           {
               "category": "List of association football clubs in the Republic of Ireland templates"
           },
           {
               "category": "List of awards and nominations received by Aleksej Pechkuroy"
           },
           {
               "category": "List of cabinet templates"
           }
       ]
   }

} </syntaxhighlight>


<translate> To get further data, add its values to the original request: </translate>


<translate>

GET request[edit]

</translate>

}} <translate>

Response[edit]

</translate> <syntaxhighlight lang="json"> {

   "batchcomplete": true,
   "query": {
       "allcategories": [
           {
               "category": "List of largest companies in Sri Lanka"
           },
           {
               "category": "List of longest beaches of the world"
           },
           {
               "category": "List of ministers by ministry of Bangladesh"
           },
           {
               "category": "List of people from Palm Beach, Florida"
           },
           {
               "category": "List of video game characters"
           }
       ]
   }

} </syntaxhighlight>


<translate>

Example 5: Batchcomplete[edit]

The API returns a <tvar name=1>batchcomplete</tvar> element to indicate that all data for the current batch of items has been returned. </translate>


<translate> In the response of the sample query below, <tvar name=1>batchcomplete</tvar> has been included to indicate that all the data for each of the three images has been returned.

The next continuation will begin returning data for the next set of 3 images. </translate>


<translate>

GET request[edit]

</translate>


<translate>

Response[edit]

</translate> <syntaxhighlight lang="json"> {

 "batchcomplete": true,
 "continue": {
   "aicontinue": "20020822143445|Do_You_Want_to_Know_a_Secret_(Beatles_song_-_sample).ogg",
   "continue": "-||"
 },
 "query": {
   "allimages": [
     {
       "name": "Simon_and_Garfunkel_-_Mrs_Robinson.ogg",
       "timestamp": "2002-08-04T19:55:17Z",
       "url": "https://upload.wikimedia.org/wikipedia/en/6/64/Simon_and_Garfunkel_-_Mrs_Robinson.ogg",
       "descriptionurl": "https://en.wikipedia.org/wiki/File:Simon_and_Garfunkel_-_Mrs_Robinson.ogg",
       "descriptionshorturl": "https://en.wikipedia.org/w/index.php?curid=67723",
       "ns": 6,
       "title": "File:Simon and Garfunkel - Mrs Robinson.ogg"
     },
     {
       "name": "Simon_and_Garfunkel_-_Scarborough_Fair.ogg",
       "timestamp": "2002-08-04T20:01:36Z",
       "url": "https://upload.wikimedia.org/wikipedia/en/c/c1/Simon_and_Garfunkel_-_Scarborough_Fair.ogg",
       "descriptionurl": "https://en.wikipedia.org/wiki/File:Simon_and_Garfunkel_-_Scarborough_Fair.ogg",
       "descriptionshorturl": "https://en.wikipedia.org/w/index.php?curid=67779",
       "ns": 6,
       "title": "File:Simon and Garfunkel - Scarborough Fair.ogg"
     },
     {
       "name": "Beatles_please_me.ogg",
       "timestamp": "2002-08-22T14:34:00Z",
       "url": "https://upload.wikimedia.org/wikipedia/en/e/ee/Beatles_please_me.ogg",
       "descriptionurl": "https://en.wikipedia.org/wiki/File:Beatles_please_me.ogg",
       "descriptionshorturl": "https://en.wikipedia.org/w/index.php?curid=74826",
       "ns": 6,
       "title": "File:Beatles please me.ogg"
     }
   ]
 }

} </syntaxhighlight>


<translate>

Example 6: Generators[edit]

Use generators if you want to get data about a set of pages.

For example, to get data about pages in a certain category, instead of querying <tvar name=1>list=categorymembers</tvar> and then querying again with <tvar name=2>pageids</tvar> set to all the returned pages, combine the two API calls into one by using <tvar name=3>generator=categorymembers</tvar>.

When using a list module as a generator, you don't need to specify the pages.

However, for a property module, you should [[<tvar name=1>#Specifying pages</tvar>|specify the pages]] which the generator will work on.

For example, to load all pages that are linked to from the main page, use <tvar name=1>generator=links&titles=Main%20Page</tvar>.

Parameters passed to a generator must be prefixed with a g. For instance, when using generator=backlinks, use gbllimit instead of bllimit.

The sample query below gets links and categories for the first three pages in the main namespace starting with "Ba". </translate>


<translate>

GET request[edit]

</translate> categories |p6=format=json |p7=formatversion=2 }} <translate>

Response[edit]

</translate> <syntaxhighlight lang="json"> {

    "continue": {
        "plcontinue": "14977970|0|Kirkwall_Ba_game",
        "continue": "||categories"
    },
    "query": {
        "pages": [
            {
                "pageid": 98178,
                "ns": 0,
                "title": "Ba",
                "links": [
                    {
                        "ns": 0,
                        "title": "BA"
                    },
                    {
                        "ns": 4,
                        "title": "Wikipedia:Mainspace"
                    },
                    {
                        "ns": 4,
                        "title": "Wikipedia:Naming conventions (capitalization)"
                    },
                    {
                        "ns": 4,
                        "title": "Wikipedia:Protection policy"
                    },
                    {
                        "ns": 4,
                        "title": "Wikipedia:Redirect"
                    },
                    {
                        "ns": 10,
                        "title": "Template:R from miscapitalisation"
                    },
                    {
                        "ns": 10,
                        "title": "Template:R from modification"
                    },
                    {
                        "ns": 10,
                        "title": "Template:R to disambiguation page"
                    },
                    {
                        "ns": 14,
                        "title": "Category:Redirects from ambiguous terms"
                    },
                    {
                        "ns": 14,
                        "title": "Category:Redirects from other capitalisations"
                    }
                ],
                "categories": [
                    {
                        "ns": 14,
                        "title": "Category:Redirects from ambiguous terms"
                    },
                    {
                        "ns": 14,
                        "title": "Category:Redirects from other capitalisations"
                    },
                    {
                        "ns": 14,
                        "title": "Category:Unprintworthy redirects"
                    }
                ]
            },
            {
                "pageid": 14977970,
                "ns": 0,
                "title": "Ba'"
            },
            {
                "pageid": 33351890,
                "ns": 0,
                "title": "Ba'Al Shem Tov"
            }
        ]
    }

} </syntaxhighlight>


<translate>

Continuing queries[edit]

</translate> <translate> Queries will often have more results available than are just shown in the original query.</translate> (Often this is because a query's result has been reached.) <translate> In these cases, queries can be continued.</translate> <translate> More detailed information on continuing queries can be at <tvar name=1></tvar>.</translate>

<translate>

Possible warnings[edit]

</translate>

<translate> Warning message</translate> <translate> Cause</translate>
<translate> No support for special pages has been implemented.</translate> <translate> Thrown if a title in the Special: or Media: namespace is given. The pages in these namespaces cannot be queried.</translate>
<translate> Thrown if the <tvar name=1>redirect</tvar> parameter is used in a query that specifies pages using <tvar name=2>revids</tvar>.</translate>

<translate>

Parameter history[edit]

</translate>

  • v1.34: <translate> Introduced <tvar name=1>exportschema</tvar></translate>
  • v1.24: <translate> Introduced <tvar name=1>rawcontinue</tvar></translate> <translate> (note: [[<tvar name=1>Special:MyLanguage/API:Raw query continue</tvar>|raw continuation]] was the default behavior until v1.26)</translate>
  • v1.21: <translate> Introduced <tvar name=1>continue</tvar></translate>

<translate>

Additional notes[edit]

</translate>

  • <translate> Specifying titles through <tvar name=1>titles</tvar> or <tvar name=2>pageids</tvar> is limited to 50 titles per query, or 500 for those with the <tvar name=3>apihighlimits</tvar> right.</translate>
  • <translate> Use multiple query modules together to get what you need in one request, e.g. <tvar name=1>prop=info|revisions&list=backlinks|embeddedin|allimages&meta=userinfo</tvar>.</translate>
  • <translate> Generators always pass page titles to the query module.</translate> <translate> Unlike lists (which may include additional data by default), generators should not output any information themselves, unless when explicitly requested via the generator module's query parameters.</translate>

<translate>

Resolving redirects[edit]

</translate> <translate> Redirects can be resolved automatically, so that the target of a redirect is returned instead of the given title.</translate> <translate> When present, they will always contain <tvar name=1>from</tvar> and <tvar name=2>to</tvar> attributes and may contain a <tvar name=3>tofragment</tvar> attribute for those redirects that point to specific sections.</translate>

<translate> Both normalization and redirection may take place.</translate> <translate> In the case of multiple redirects, all redirects will be resolved, and in case of a circular redirect, there might not be a page in the 'pages' section (see [[<tvar name=1>#circular_redirects</tvar>|an example request]]).</translate> <translate> Redirect resolution cannot be used in combination with the <tvar name=1>revids=</tvar> parameter or with a generator generating revids; doing that will produce a [[<tvar name=2>#Possible warnings</tvar>|warning]] and will not resolve redirects for the specified revids.</translate>

<translate> The examples below show how the <tvar name=1>redirects</tvar> parameter works. </translate>

Template:ApiEx Template:ApiEx Template:ApiEx Template:ApiEx <translate> Here is a case of a circular redirect: <tvar name=1>Page1 → Page2 → Page3 → Page1</tvar>.</translate> <translate> Also, in this example a non-normalized name <tvar name=1>'page1'</tvar> is used.</translate> |p1=action=query |p2=titles=page1 |p3=redirects |p4=format=json |p5=formatversion=2 |result=<syntaxhighlight lang="json"> {

   "batchcomplete": true,
   "query": {
       "normalized": [
           {
               "fromencoded": false,
               "from": "page1",
               "to": "Page1"
           }
       ],
       "redirects": [
           {
               "from": "Page1",
               "to": "Page2"
           },
           {
               "from": "Page2",
               "to": "Page3"
           },
           {
               "from": "Page3",
               "to": "Page1"
           }
       ],
       "pages": [
           {
               "ns": 0,
               "title": "Page1",
               "missing": true
           }
       ]
   }

} </syntaxhighlight>}}

<translate>

See also[edit]

</translate>

  • - <translate> The quick start guide.</translate>
  • - <translate> Contains information on how to use the <tvar name=1>rawcontinue</tvar> parameter.</translate>

Sample content adapted from mediawikiwiki:API:Query on mediawiki.org, licensed under CC BY-SA 4.0.