API:Query/ja
From MediaWiki.org
action=querymoduleによって、すべての種類のデータを取り出すことができるようになります。このモジュールは大まかには現在廃止されているQuery APIを基づいて開発されました。action=queryも使われます。編集などに必要なトークンを取り出すために使われます。
queryモジュールは多くのサブモジュールを持ち(query modulesと呼ばれる)、それぞれのサブモジュールは異なる機能を持ちます、queryモジュールは自由に結びつけることができます。queryモジュールには3つのタイプがあります:
queryモジュールとは別に、action=queryは独自の機能をいくつか持ちます。
Contents |
[edit] タイトルを指定する
次の方法でタイトルを指定できます:
titlesパラメータを使う、例えばtitles=Foo|Bar|Main_Pagepageidsパラメータを使う、例えばpageids=123|456|75915revidsパラメータを使う、例えばrevids=478198|54872|54894545- 大抵のqueryモジュールはリビジョンIDが所属するページを使います。 prop=revisionsのみが実際にリビジョンIDそれ自身を使います
- ジェネレータを使う
[edit] タイトルの正規化
タイトルの正規化はページタイトルを正統的な形式に変換します。最初の文字は大文字に変換され、アンダースコアはスペースに置き換えられるなどのことが行われることを意味します。どのqueryモジュールが使われているかに関わらず、タイトルの正規化は自動的に行われます。
| 大文字化、ローカライゼーション、 "_" => " ", "Project" => "Wikipedia", ... |
api.php ? action=query & titles=Project:articleA|article_B
<api> <query> <normalized> <n from="Project:articleA" to="Wikipedia:ArticleA" /> <n from="article_B" to="Article B" /> </normalized> <pages> <page ns="4" title="Wikipedia:ArticleA" missing="" /> <page ns="0" title="Article B" missing="" /> </pages> </query> </api>
[edit] 見つからないもしくは無効なタイトル
存在しないもしくは無効なタイトルが<pages>セクションに表示されますが、but それらはmissing=""もしくはinvalid=""属性のセットを持ちます。(JSONやPHPのシリアライズ化などの)数値の配列キーをサポートする出力フォーマットにおいて、見つからないタイトルと無効なタイトルはユニークで、負のページIDを持ちます。query modulesは見つからないもしくは無効なタイトルで何か便利なことはできないのでそれらのタイトルを無視します。
| JSON形式で見つからない、無効なタイトルと既存のもの |
api.php ? action=query & titles=Doesntexist|Main%20Page|Talk: & format=jsonfm
{ "query": { "pages": { "-2": { "ns": 0, "title": "Thisdoesntexist", "missing": "" }, "-1": { "title": "Talk:", "invalid": "" }, "54": { "pageid": 54, "ns": 0, "title": "Main Page", } } } }
[edit] リダイレクトを解決する
リダイレクトは自動的に解決されるので、リダイレクトのターゲットが任意のタイトルの代わりに返されます。下記の例は本当に役立ちません。それはquery modulesを使わないからですが、redirectsパラメータの動作方法を示します。標準化とリダイレクトの両方が起こることがあります。二重のリダイレクトの場合、すべてのリダイレクトは解決され、循環リダイレクトの場合、'pages'セクションにページが存在しないことがあります(下記も参照)。
| "redirects"パラメータを使う。"Main page"は"Main Page"にリダイレクトされます。 |
api.php ? action=query & titles=Main%20page & redirects
<api> <query> <redirects> <r from="Main page" to="Main Page" /> </redirects> <pages> <page pageid="11105676" ns="0" title="Main Page" /> </pages> </query> </api>
| 同じリクエストだが"redirects"パラメータ無しで。 |
api.php ? action=query & titles=Main%20page
<api> <query> <pages> <page pageid="217225" ns="0" title="Main page" /> </pages> </query> </api>
| "redirects"無しでリダイレクトステータスを取得するためにprop=infoを使いたい場合 |
api.php ? action=query & titles=Main%20page & prop=info
<api> <query> <pages> <page pageid="217225" ns="0" title="Main page" touched="2007-06-29T11:22:39Z" lastrevid="78280008" counter="0" length="56" redirect="" /> </pages> </query> </api>
[edit] 循環リダイレクト
Page1 → Page2 → Page3 → Page1 (循環リダイレクト)を想定します。また、この例では非標準的な名前である'page1'が使われます。
| 循環リダイレクトの振る舞い |
api.php ? action=query & titles=page1 & redirects
<?xml version="1.0" encoding="utf-8"?> <api> <query> <normalized> <n from="page1" to="Page1" /> </normalized> <redirects> <r from="Page1" to="Page2" /> <r from="Page2" to="Page3" /> <r from="Page3" to="Page1" /> </redirects> </query> </api>
[edit] 制限
サーバの加重負荷を防止するために、それぞれのクエリは処理できるアイテムの個数を制限します。匿名ユーザーとログインユーザーには1つの制限がある一方で、botとsysopはコミュニティに信用されているのでかない高い制限があります。現在、それぞれのクエリは可能な最大のリクエストサイズの一覧表示します。大抵のquery modulesのために、これは匿名ユーザーと正規のユーザーに対してこれは500、botとsysopに対しては5000になります。
- 欠点: 現在すべての制限は追加式なので、ユーザーがallpagesとbacklinksをリクエストする場合、ユーザーはそれぞれの500を取得します。これはあまりよくありません、アイテムが1つのリクエストにcompoundされるほど、サーバ上のロードは重くなります。代わりに、ある種の重み付きの(weighted)メカニズムが開発され、それぞれのリクエストアイテムはそれに関連したある"cost"を持ち、それぞれのユーザーはリクエストごとに修正された許可量(allowance)が割り当てられます。ユーザーがより多くの情報をリクエストするほど、そのリクエストに対する制限はより小さくなります。残念ながら、それによってクエリを実行するために最大制限を算出するのがとても難しくなるので、実現可能な解決方法ではないのかもしれません。
[edit] クエリを継続する
一つのリクエストで頻繁にすべてのデータを取得しません。1つのリクエストを継続するために、任意のquery-continueの値を使用できます。
| query-continueの値を使う |
api.php ? action=query & list=allcategories & acprefix=List%20of
<?xml version="1.0" encoding="utf-8"?> <api> <query-continue> <allcategories acfrom="List of Baptist sub-denominations" /> </query-continue> <query> <allcategories> <c>List of "M" series military vehicles</c> <c>List of Alternative Rock Groups</c> <c>List of Alumni of Philippine Science High School</c> <c>List of American artists</c> <c>List of Anglicans and Episcopalians</c> <c>List of Arizona Reptiles</c> <c>List of Artists by record label</c> <c>List of Australian Anglicans</c> <c>List of Bahá'ís</c> <c>List of Balliol College people</c> </allcategories> </query> </api>
次の10のカテゴリを取得するためにacfrom=List%20of%20Baptist%20sub-denominationsを使うことができます。
[edit] ジェネレータ
ジェネレータによって、titlesパラメータの代わりにリストの出力を使うことができます。リストの出力はページのリストでなければなりません。titles, pageidsもしくはrevidsパラメータの代わりに、そのタイトルが自動的に使われます。多のquery modulesはtitlesパラメータを通してあたかもユーザーによって提供されたものとしてそれらのページを取り扱います。1つのジェネレータのみが許可されます。ページのリストを表示しないlist modulesはジェネレータとして使うことはできません。prop modulesの中にはジェネレータとして使うことができるものもあります。
ジェネレータに渡されたパラメータは接頭辞が'g'でなければなりません。例えば、generator=backlinksを使うとき、bltitleの代わりにgbltitleを使って下さい。
ジェネレータはページタイトルを'real'クエリに渡すだけで、それら自身の情報を出力できないことに注意してください。gcmpropのようなパラメータを設定しても効果はありません。
[edit] ジェネレータとしてlist=allpagesを使う
| Aで始まるmainの名前空間で最初の3つのページに対するリンクとカテゴリを取得する |
api.php ? action=query & generator=allpages & gaplimit=3 & gapfrom=Ba & prop=links|categories
<?xml version="1.0" encoding="utf-8"?> <api> <query-continue> <allpages gapfrom="Ba'ad Sneen (Song)" /> </query-continue> <query> <pages> <page pageid="98178" ns="0" title="Ba"> <links> <pl ns="0" title="BA" /> <pl ns="4" title="Wikipedia:Redirect" /> <pl ns="4" title="Wikipedia:Template messages/Redirect pages" /> <pl ns="10" title="Template:R from alternative name" /> <pl ns="10" title="Template:R from alternative spelling" /> <pl ns="14" title="Category:Redirects from other capitalisations" /> </links> <categories> <cl ns="14" title="Category:Redirects from other capitalisations" /> <cl ns="14" title="Category:Unprintworthy redirects" /> </categories> </page> <page pageid="14977970" ns="0" title="Ba'"> <links> <pl ns="0" title="Kirkwall Ba game" /> </links> </page> <page pageid="10463369" ns="0" title="Ba'Gamnan"> <links> <pl ns="0" title="Characters of Final Fantasy XII" /> </links> </page> </pages> </query> </api>
[edit] ジェネレータとリダイレクト
ここでは、prop=linksをジェネレータとして使います。このクエリはTitleからリンクされたすべてのページからのすべてのリンクを取得します。この例では、TitleはTitleAとTitleBへのリンクを持つことを仮定します。TitleBはTitleCへのリダイレクトです。TitleAはTitleA1、TitleA2、TitleA3にリンクします; そしてTitleCはTitleC1とTitleC2にリンクします。redirectsパラメータが設定されているので、リダイレクトは解決されます。
クエリは次のステップを実行します:
titlesパラメータでタイトルに対するリダイレクトを解決するtitlesパラメータのすべてのタイトルに対して、それらがリンクするページのリストを取得する- そのリストでリダイレクトを解決する
- タイトルのそのリスト上でprop=linksクエリを実行する
| ジェネレータでリダイレクトの解決方法を使う |
api.php ? action=query & generator=links & titles=Title & prop=links & redirects
<?xml version="1.0" encoding="utf-8"?> <api> <query> <pages> <page pageid="32" ns="0" title="TitleA"> <links> <pl ns="0" title="TitleA1" /> <pl ns="0" title="TitleA2" /> <pl ns="0" title="TitleA3" /> </links> </page> <page pageid="54" ns="0" title="TitleC"> <links> <pl ns="0" title="TitleC1" /> <pl ns="0" title="TitleC2" /> </links> </page> </pages> <redirects> <r from="TitleB" to="TitleC" /> </redirects> </query> </api>
[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

