From MediaWiki.org
Jump to: navigation, search
Language: English  • Deutsch • español • فارسی • 日本語 • русский • 中文
Tools clipart.png This page is part of the MediaWiki action API documentation.
MediaWiki APIsAPI:Main page

MediaWiki action API

v · d · e

The action=query module allows you to get 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 change wiki content.

Introduction and guidelines[edit | edit source]

The query module has many submodules (called query modules), each with a different function. There are three types of query modules:

  • Meta information about the wiki and the logged-in user
  • Properties of pages, including page revisions and content
  • Lists of pages that match certain criteria

You should use multiple query modules together to get what you need in one request, e.g. prop=info|revisions&list=backlinks|embeddedin|allimages&meta=userinfo is a call to six modules in one request.

Unlike meta and list query modules, all property query modules work on a set of pages that you specify using either titles, pageids, revids, or generator parameters. Use one of the first three if you know the pages' titles, page ids, or revision ids. Do not ask for one page at a time – this is very inefficient, and consumes lots of extra resources and bandwidth. Instead you should request information about multiple pages by combining their titles or ids with the '|' pipe symbol: titles=PageA|PageB|PageC.

Use generator if you want to get data about a set of pages that would be the result of another API call. For example, if you want to get data about pages in a certain category, instead of querying list=categorymembers and then querying again with pageids set to all the returned pages, you should combine the two API calls into one by specifying generator=categorymembers in place of the list parameter. More details are in #Generators below.

If you're querying Wikimedia wikis and requesting results as format=json (or php), then specify formatversion=2. The original result format was designed around XML; the new structure is easier to process (and defaults to utf8). However, it is still subject to change in MediaWiki 1.26.

Lastly, you should always request the new "continue" syntax to iterate over results. To use it, always pass an empty continue= parameter, and check if the result contains a continue section. If it does, merge its returned values with your original request and call the api again. Repeat until there is no more continue section. More details are in #Continuing queries below.

Sample query[edit | edit source]

Before we get into the nitty-gritty, here's a useful sample query that simply gets the wiki markup (content) of a page:


This means fetch (action=query) the content (rvprop=content) of the most recent revision of Main Page (titles=Main%20Page) in JSON with whitespace to make it easier to read (format=jsonfm).

Alternatively, you can use action=raw as a parameter to index.php to get the content of a page: index.php?title=Main%20Page&action=raw

Specifying pages[edit | edit source]

You can specify pages in the following ways:

  • By name using the titles parameter, e.g. titles=Foo|Bar|Main_Page
  • By page ID using the pageids parameter, e.g. pageids=123|456|75915
  • By revision ID using the revids parameter, e.g. revids=478198|54872|54894545
    • Most query modules will convert revision ID to the corresponding page ID. Only prop=revisions actually uses the revision ID itself.
  • Using a generator

Specifying titles through the query string (either through titles or pageids) is limited to 50 titles per query (or 500 for those with the apihighlimits right, usually bots and sysops).

Title normalization[edit | edit source]

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. Title normalization is done automatically, regardless of which query modules are used. However, any trailing line breaks in page titles (\n) will cause odd behavior and they should be stripped out first.

Capitalization, localization, "_" → " " (space), "Project" → "Wikipedia", ...

Missing and invalid titles[edit | edit source]

Titles that don't exist or are invalid still appear in the <pages> section, but they have the missing="" or invalid="" attribute set. In output formats that support numeric array keys (such as JSON and PHP serialized), missing and invalid titles will have unique, negative page IDs. Query modules will just ignore missing or invalid titles, as they can't do anything useful with them. The titles in the Special: and Media: namespaces cannot be queried. If any such titles are found in the titles= parameter or passed to a module by a generator, a warning will be issued.

A missing title, an invalid one and an existing one in JSON

Resolving redirects[edit | edit source]

Redirects can be resolved automatically, so that the target of a redirect is returned instead of the given title. When present, they will always contain from and to attributes and may contain a tofragment attribute for those redirects that point to specific sections.

Both normalization and redirection may take place. 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 also below). Redirect resolution cannot be used in combination with the revids= parameter or with a generator generating revids; doing that will produce a warning and will not resolve redirects for the specified revids.

The examples below show how the redirects parameter works.

Using "redirects" parameter. "Main page" is a redirect to "Main Page"

Same request but without the "redirects" parameter.

Without "redirects" you may want to use prop=info to obtain redirect status.

Request with a section link. "Wikipedia:!--" is a redirect to "Wikipedia:Manual of Style#Invisible comments"

Here is a case of a circular redirect: Page1 → Page2 → Page3 → Page1. Also, in this example a non-normalized name 'page1' is used.

Limits[edit | edit source]

See here for more information on limits.

Continuing queries[edit | edit source]

MediaWiki version: 1.21

Warning Warning:

Very often you will not get all the data you want in one API query. When that happens the API result indicates there is more data. MediaWiki 1.21 introduced a coherent way of handling this: the result will have a continue element, and to get the next portion of the data, you make another request appending the values in the continue element. You must specify continue= in the initial query to select this approach, although we plan to make it the default in 1.26; see #Backwards compatibility of continue below.

Example of using the continue value

Because there are more data matching the query, the API result includes a continue element. If you want further data, you would add its values (in the example, continue=-|| and accontinue=List_of_19th_century_baseball_players) to the original request (the new value for continue replaces the initial empty string) to get the next set of results. You continue to do this until an API result does not have a continue element, indicating there are no more data matching the query.

Here is Python code showing how to iterate over query results (using the python requests lib). Note 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 = {'continue': ''}
    while True:
        # Clone original request
        req = request.copy()
        # Modify it with the values returned in the 'continue' section of the last result.
        # Call API
        result = requests.get('http://en.wikipedia.org/w/api.php', params=req).json()
        if 'error' in result: raise Error(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']

batchcomplete[edit | edit source]

When you make an API request using a generator together with properties, the API result may signal to continue because there are more properties to retrieve for the pages so far, or because there are more pages from the generator, or both. From version 1.25 onwards, the API returns a batchcomplete element to indicate that all data for the current "batch" of pages has been returned. This can be useful to avoid building a combined result set for thousands of pages when using a generator together with prop modules that may themselves need continuation.

Backwards compatibility of continue[edit | edit source]

Prior to MediaWiki 1.26, if you did not specify continue=, API results would indicate there is additional data by returning a query-continue element, explained in Raw query continue. In the 1.26 development cycle in July, API results will switch by default to the continue element approach described above.

  • If you don't handle continuation at all, you don't need to do anything.
  • If your client code handles the old query-continue and you don't want to adopt the new approach, then you must specify rawcontinue= to to get continuation data in the old format, otherwise your code will break when the default continuation handling changes.
    • rawcontinue was added in MediaWiki 1.24, if you specify it in API requests to MediaWiki installs running prior releases the API response will include an API warning.

Getting a list of page IDs[edit | edit source]

When not using the new JSON formatversion=2, the result page set in JSON is returned as an object keyed by page ID which can be difficult to properly iterate over in JavaScript. The indexpageids parameter returns these page IDs as an array for easier iteration. Note that the ordering of these page IDs still does not necessarily correspond to the ordering of the input (whether directly or via a generator). Getting a list of all page IDs

Exporting pages[edit | edit source]

You can export pages through the API with the export parameter. If the export parameter is set, an XML dump of all pages in the <pages> element will be added to the result. The export parameter only gives a result when used with specified titles (Generator, titles, pageids or revid). Note that the XML dump will be wrapped in the requested format; if that format is XML, characters like < and > will be encoded as entities (&lt; and &gt;) If the exportnowrap parameter is also set, only the XML dump (not wrapped in an API result) will be returned.

Exporting the contents of API

Exporting all templates used in API

See also: Importing pages

Generators[edit | edit source]

With generators, you can use the output of a list instead of the titles parameter. The output of the list must be a list of pages, whose titles are automatically used instead of the titles, pageids or revids parameter. Other query modules will treat generated pages as if they were given in a parameter. Only one generator is allowed. Some prop modules can also be used as a generator.

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

It should also be noted that generators only pass page titles to the 'real' query, and do not output any information themselves. Setting parameters like gcmprop will therefore have no effect.

Using list=allpages as generator[edit | edit source]

Get links and categories for the first three pages in the main namespace starting with "Ba"

Generators and redirects[edit | edit source]

Here, we use prop=links as a generator. This query will get all the links from all the pages that are linked from Title. For this example, assume that Title has links to TitleA and TitleB. TitleB is a redirect to TitleC. TitleA links to TitleA1, TitleA2, TitleA3; and TitleC links to TitleC1 and TitleC2. Redirect are solved because the redirects parameter is set.

The query will execute the following steps:

  1. Resolve redirects for titles in the titles parameter
  2. For all the titles in the titles parameter, get the list of pages they link to
  3. Resolve redirects in that list
  4. Run the prop=links query on that list of titles

Using redirect resolution with generators

Generators and continuation[edit | edit source]

You can continue queries using a generator the same way as other queries. In the first call to the API, the generator will create a batch of titles to work on. Each subsequent continuation will give you only data from that batch until you have all of it, at which point the batchcomplete property will be set. This enables you to process that batch before continuing with the rest of the query, if you wish. The next continuation will then create a new batch from the generator and so on. If you use rawcontinue, please read API:Raw Query Continue to understand which parameters you have to include in the continuation queries. If instead you use continue, you simply pass all parameters back, as you do for queries without generator. Please note that for generators used together with a non-query module, the continue format will always be used.

More generator examples[edit | edit source]

Show info about 4 pages starting at the letter "T"
Show content of first 2 non-redirect pages beginning at "Re"

Page types[edit | edit source]

Page type Example Used in the given page(s) Which pages have it List all in the wiki
Page link [[Page]] prop=links list=backlinks list=alllinks
Template transclusion {{Template}} prop=templates list=embeddedin list=alltransclusions
Categories [[category:Cat]] prop=categories list=categorymembers list=allcategories
Images [[file:image.png]] prop=images list=imageusage list=allimages
Language links [[ru:Page]] prop=langlinks list=langbacklinks
Interwiki links [[meta:Page]] prop=iwlinks list=iwbacklinks
URLs https://mediawiki.org prop=extlinks list=exturlusage

Possible warnings[edit | edit source]

  • No support for special pages has been implemented
    • Thrown if a title in the Special: or Media: namespace is given
  • Redirect resolution cannot be used together with the revids= parameter. Any redirects the revids= point to have not been resolved.
    • Note that this can also be caused by a generator that generates revids