API:Query/ja

From MediaWiki.org
Jump to: navigation, search
Tools clipart.png このページは MediaWiki 操作 API の説明文書の一部です。

MediaWiki 操作 API

v · d · e

action=querymoduleによって、大部分のデータを取り出せるようになります。編集トークンを含みます。

queryモジュールは多くの下位モジュールを持ち(query modulesと呼ばれる)、それぞれの下位モジュールには異なる機能があります。queryモジュールには3つのタイプがあります:

Multiple modules should be used together to get what you need in one request, e.g. prop=info|revisions&list=backlinks|embeddedin|imagelinks&meta=userinfo is a call to six modules in one request.

Unlike meta and list modules, all property modules work on a set of pages provided with either titles, pageids, revids, or generator parameters. Use the first three if you know page's title/page id/revision id. Do not ask for one page at a time - this is very inefficient, and consumes lots of extra resources and bandwidth. You should combine multiple titles or ids with a "|" symbol: titles=PageA|PageB|PageC.

Use generator if you want to get data about pages that are the result of another api call. For example, if you want to get data about pages in a certain category (list=categorymembers), and then call api with pageids set to all the returned results, you should combine two calls into one by setting generator=categorymembers instead of the list parameter.

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 returned values with the original request and call the api again. Repeat until there is no more continue section.

Sample query[edit]

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

api.php?action=query&prop=revisions&rvprop=content&format=xml&titles=Main%20Page

This means fetch (action=query) the content (rvprop=content) of the most recent revision of Main Page (titles=Main%20Page) in XML format (format=xml).

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]

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).

タイトルの正規化[edit]

タイトルの正規化はページタイトルを正統的な形式に変換します。最初の文字は大文字に変換され、アンダースコアはスペースに置き換えられるなどのことが行われることを意味します。どのqueryモジュールが使われているかに関わらず、タイトルの正規化は自動的に行われます。However, any trailing line breaks in page titles (\n) will cause odd behavior and they should be stripped out first.

大文字化、ローカライゼーション、 "_" → " ", "Project" → "Wikipedia", ...

見つからないもしくは無効なタイトル[edit]

存在しないもしくは無効なタイトルが<pages>セクションに表示されますが、but それらはmissing=""もしくはinvalid=""属性のセットを持ちます。(JSONやPHPのシリアライズ化などの)数値の配列キーをサポートする出力フォーマットにおいて、見つからないタイトルと無効なタイトルはユニークで、負のページIDを持ちます。query modulesは見つからないもしくは無効なタイトルで何か便利なことはできないのでそれらのタイトルを無視します。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.

JSON形式で見つからない、無効なタイトルと既存のもの

リダイレクトを解決する[edit]

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.

"redirects"パラメーターを使う。"Main page"は"Main Page"にリダイレクトされます。

同じリクエストだが"redirects"パラメーター無しで。

"redirects"無しでリダイレクトステータスを取得するためにprop=infoを使いたい場合

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.

制限[edit]

See here for more information on limits.

クエリの続行[edit]

MediaWiki バージョン: 1.21
See legacy continue for the query-continue information

Very often you will not get all the data you want in one request. If there is more data, the result will have a continue element. Appending contained values to your original request will get the next portion of the data. For legacy reasons, until we introduce API 2.0, you should always include a continue= parameter to let the servers know you support this feature.

query-continueの値を使う

You can now add continue=-|| and accontinue=List of Baptist sub-denominations to the original request (the new value for continue would replace the initial empty string) to get the next set of results. If there is no more results, there will not be a continue element.

Here is the recommended way to iterate over query results (uses python requests lib). Note that clients should not be manipulating or depending 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.
        req.update(lastContinue)
        # 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']

Getting a list of page IDs[edit]

With the indexpageids parameter, you'll get a list of all page IDs listed in the <pageids> element. This is particularly useful for formats like JSON in which the pages array has numeric indexes. Getting a list of all page IDs

Exporting pages[edit]

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

関連項目: ページの取り込み

ジェネレーター[edit]

ジェネレーターによって、titlesパラメーターの代わりにリストの出力を使うことができます。リストの出力はページのリストでなければなりません。titles, pageidsもしくはrevidsパラメーターの代わりに、そのタイトルが自動的に使われます。多のquery modulesはtitlesパラメーターを通してあたかもユーザーによって提供されたものとしてそれらのページを取り扱います。1つのジェネレーターのみが許可されます。ページのリストを表示しないlist modulesはジェネレーターとして使うことはできません。prop modulesの中にはジェネレーターとして使うことができるものもあります。

ジェネレーターに渡されたパラメーターは接頭辞が'g'でなければなりません。例えば、generator=backlinksを使うとき、bltitleの代わりにgbltitleを使ってください。

ジェネレーターはページタイトルを'real'クエリに渡すだけで、それら自身の情報を出力できないことに注意してください。gcmpropのようなパラメーターを設定しても効果はありません。

ジェネレーターとしてlist=allpagesを使う[edit]

"Ba"で始まるmainの名前空間で最初の3つのページに対するリンクとカテゴリを取得する

ジェネレーターとリダイレクト[edit]

ここでは、prop=linksをジェネレーターとして使います。このクエリはTitleからリンクされたすべてのページからのすべてのリンクを取得します。この例では、TitleはTitleAとTitleBへのリンクを持つことを仮定します。TitleBはTitleCへのリダイレクトです。TitleAはTitleA1、TitleA2、TitleA3にリンクします; そしてTitleCはTitleC1とTitleC2にリンクします。redirectsパラメーターが設定されているので、リダイレクトは解決されます。

クエリは次のステップを実行します:

  1. titlesパラメーターでタイトルに対するリダイレクトを解決する
  2. titlesパラメーターのすべてのタイトルに対して、それらがリンクするページのリストを取得する
  3. そのリストでリダイレクトを解決する
  4. タイトルのそのリスト上でprop=linksクエリを実行する

ジェネレーターでリダイレクトの解決方法を使う

ジェネレーターのより詳しい例[edit]

"T"の文字で始まる4ページに関する情報を表示する
http://en.wikipedia.org/w/api.php?action=query&generator=allpages&gaplimit=4&gapfrom=T&prop=info
"Re"で始まる最初の2つの非リダイレクトのページの内容を表示する
http://en.wikipedia.org/w/api.php?action=query&generator=allpages&gaplimit=2&gapfilterredir=nonredirects&gapfrom=Re&prop=revisions&rvprop=content

ページの種類[edit]

ページの種類 Used in the given page(s) Which pages have it List all in the wiki
ページヘのリンク [[Page]] prop=links list=backlinks list=alllinks
テンプレートの参照読み込み {{Template}} prop=templates list=embeddedin list=alltransclusions
カテゴリ [[category:Cat]] prop=categories list=categorymembers list=allcategories
画像 [[file:image.png]] prop=images list=imageusage list=allimages
言語間リンク [[ru:Page]] prop=langlinks list=langbacklinks
ウィキ間リンク [[meta:Page]] prop=iwlinks list=iwbacklinks
URL http://mediawiki.org prop=extlinks list=exturlusage

Possible warnings[edit]

  • 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