API:版
このページは MediaWiki 操作 API の説明文書の一部です。 |
MediaWiki バージョン: | ≧ 1.8 |
ページ (群) の版の情報を取得する GET リクエストです。
APIの説明文書
例 1: 複数ページから更新履歴データを取得
GET リクエスト
api.php? action=query& prop=revisions& titles=API|Main%20Page& rvprop=timestamp|user|comment& rvslots=main& formatversion=2 [ApiSandbox で試用する]
上記のリクエストでは、題名が API と メインページ のページから更新情報を抽出することが目的です。
レスポンス
レスポンス |
---|
{
"batchcomplete": true,
"query": {
"pages": [
{
"pageid": 1423,
"ns": 0,
"title": "Main Page",
"revisions": [
{
"user": "Bdk",
"timestamp": "2005-09-16T01:14:43Z",
"comment": "Reverted edit of 82.36.210.14, changed back to last version by Brion VIBBER"
}
]
},
{
"pageid": 55332,
"ns": 0,
"title": "API",
"revisions": [
{
"user": "Mainframe98",
"timestamp": "2017-08-19T18:23:42Z",
"comment": "Reverted edits by [[Special:Contributions/Sankaran kumar|Sankaran kumar]] ([[User talk:Sankaran kumar|talk]]) to last revision by [[User:Shirayuki|Shirayuki]]"
}
]
}
]
}
}
|
サンプル コード
Python
#!/usr/bin/python3
"""
get_pages_revisions.py
MediaWiki API Demos
Demo of `Revisions` module: Get revision data with content for pages
with titles [[API]] and [[Main Page]]
MIT License
"""
import requests
S = requests.Session()
URL = "https://www.mediawiki.org/w/api.php"
PARAMS = {
"action": "query",
"prop": "revisions",
"titles": "API|Main Page",
"rvprop": "timestamp|user|comment|content",
"rvslots": "main",
"formatversion": "2",
"format": "json"
}
R = S.get(url=URL, params=PARAMS)
DATA = R.json()
PAGES = DATA["query"]["pages"]
for page in PAGES:
print(page["revisions"])
PHP
<?php
/*
get_pages_revisions.php
MediaWiki API Demos
Demo of `Revisions` module: Get revision data with content for pages with titles [[API]] and [[Main Page]]
MIT License
*/
$endPoint = "https://www.mediawiki.org/w/api.php";
$params = [
"action" => "query",
"prop" => "revisions",
"titles" => "API|Main Page",
"rvprop" => "timestamp|user|comment|content",
"rvslots" => "main",
"formatversion" => "2",
"format" => "json"
];
$url = $endPoint . "?" . http_build_query( $params );
$ch = curl_init( $url );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
$output = curl_exec( $ch );
curl_close( $ch );
$result = json_decode( $output, true );
foreach( $result["query"]["pages"] as $k => $v ) {
var_dump( $v["revisions"] );
}
JavaScript
/*
get_pages_revisions.js
MediaWiki API Demos
Demo of `Revisions` module: Get revision data with content for pages with titles [[API]] and [[Main Page]]
MIT License
*/
var url = "https://www.mediawiki.org/w/api.php";
var params = {
action: "query",
prop: "revisions",
titles: "API|Main Page",
rvprop: "timestamp|user|comment|content",
rvslots: "main",
formatversion: "2",
format: "json"
};
url = url + "?origin=*";
Object.keys(params).forEach(function(key){url += "&" + key + "=" + params[key];});
fetch(url)
.then(function(response){return response.json();})
.then(function(response) {
var pages = response.query.pages;
for (var p in pages) {
console.log(pages[p].revisions);
}
})
.catch(function(error){console.log(error);});
MediaWiki JS
/*
get_pages_revisions.js
MediaWiki API Demos
Demo of `Revisions` module: Get revision data with content for pages with
titles [[API]] and [[Main Page]]
MIT License
*/
var params = {
action: 'query',
prop: 'revisions',
titles: 'API|Main Page',
rvprop: 'timestamp|user|comment|content',
rvslots: 'main',
formatversion: '2',
format: 'json'
},
api = new mw.Api();
api.get( params ).done( function ( data ) {
var pages = data.query.pages,
p;
for ( p in pages ) {
console.log( pages[ p ].revisions );
}
} );
例 2: 個別のページについて日付・利用者で絞り込んだ直近5件の更新履歴を取得
GET リクエスト
api.php? action=query& prop=revisions& titles=API:Geosearch& rvlimit=5& rvslots=main& rvprop=timestamp|user|comment& rvdir=newer& rvstart=2018-07-01T00:00:00Z& rvexcludeuser=SSethi_(WMF) [ApiSandbox で試用する]
上記のリクエストでは、目的は特定のページ API:Geosearch について、2018年7月1日つまり 2018-07-01以降の直近の更新5版についてデータの抽出です。ただし利用者 SSethi (WMF) による更新を除外しています。
レスポンス
レスポンス |
---|
{
"batchcomplete": "",
"query": {
"pages": {
"812323": {
"pageid": 812323,
"ns": 104,
"title": "API:Geosearch",
"revisions": [
{
"user": "Shirayuki",
"timestamp": "2018-11-04T05:25:34Z",
"comment": "translation tweaks"
},
{
"user": "Shirayuki",
"timestamp": "2018-11-25T06:06:50Z",
"comment": "translation tweaks"
}
]
}
}
}
}
|
サンプル コード
get_filtered_page_revisions.py |
---|
Python#!/usr/bin/python3
"""
get_filtered_page_revisions.py
MediaWiki API Demos
Demo of `Revisions` module: Get data including content of last 5 revisions
of the title [[API:Geosearch]] made after the 1st of July 2018 i.e 2018-07-01
excluding changes made by the user SSethi (WMF)
MIT License
"""
import requests
S = requests.Session()
URL = "https://www.mediawiki.org/w/api.php"
PARAMS = {
"action": "query",
"prop": "revisions",
"titles": "API:Geosearch",
"rvlimit": "5",
"rvprop": "timestamp|user|comment|content",
"rvdir": "newer",
"rvstart": "2018-07-01T00:00:00Z",
"rvexcludeuser": "SSethi (WMF)",
"rvslots": "main",
"formatversion": "2",
"format": "json"
}
R = S.get(url=URL, params=PARAMS)
DATA = R.json()
PAGES = DATA["query"]["pages"]
for page in PAGES:
print(page["revisions"])
PHP<?php
/*
get_filtered_page_revisions.php
MediaWiki API Demos
Demo of `Revisions` module: Get data including content of last 5 revisions of the title [[API:Geosearch]] made after July 1st 2018 excluding changes made by the user SSethi (WMF)
MIT License
*/
$endPoint = "https://www.mediawiki.org/w/api.php";
$params = [
"action" => "query",
"prop" => "revisions",
"titles" => "API:Geosearch",
"rvlimit" => "5",
"rvprop" => "timestamp|user|comment|content",
"rvdir" => "newer",
"rvstart" => "2018-07-01T00:00:00Z",
"rvexcludeuser" => "SSethi (WMF)",
"rvslots" => "main",
"formatversion" => "2",
"format" => "json"
];
$url = $endPoint . "?" . http_build_query( $params );
$ch = curl_init( $url );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
$output = curl_exec( $ch );
curl_close( $ch );
$result = json_decode( $output, true );
foreach( $result["query"]["pages"] as $k => $v ) {
var_dump( $v["revisions"] );
}
JavaScript/*
get_filtered_page_revisions.js
MediaWiki API Demos
Demo of `Revisions` module: Get data including content of last 5 revisions of the title [[API:Geosearch]] made after July 1st 2018 excluding changes made by the user SSethi (WMF)
MIT License
*/
var url = "https://www.mediawiki.org/w/api.php";
var params = {
action: "query",
prop: "revisions",
titles: "API:Geosearch",
rvlimit: "5",
rvprop: "timestamp|user|comment|content",
rvdir: "newer",
rvstart: "2018-07-01T00:00:00Z",
rvexcludeuser: "SSethi (WMF)",
rvslots: "main",
formatversion: "2",
format: "json"
};
url = url + "?origin=*";
Object.keys(params).forEach(function(key){url += "&" + key + "=" + params[key];});
fetch(url)
.then(function(response){return response.json();})
.then(function(response) {
var pages = response.query.pages;
for (var p in pages) {
console.log(pages[p].revisions);
}
})
.catch(function(error){console.log(error);});
MediaWiki JS/*
get_filtered_page_revisions.js
MediaWiki API Demos
Demo of `Revisions` module: Get data including content of last 5 revisions of the
title [[API:Geosearch]] made after July 1st 2018 excluding changes made by the user SSethi (WMF)
MIT License
*/
var params = {
action: 'query',
prop: 'revisions',
titles: 'API:Geosearch',
rvlimit: '5',
rvprop: 'timestamp|user|comment|content',
rvdir: 'newer',
rvstart: '2018-07-01T00:00:00Z',
rvexcludeuser: 'SSethi (WMF)',
rvslots: 'main',
formatversion: '2',
format: 'json'
},
api = new mw.Api();
api.get( params ).done( function ( data ) {
var pages = data.query.pages,
p;
for ( p in pages ) {
console.log( pages[ p ].revisions );
}
} );
|
例 3: リダイレクトをたどって特定ページの直近の更新履歴を取得
GET リクエスト
上記のリクエストでは、目的はリダイレクトを経て特定のページAntiSpoof で実行された更新のデータを抽出することです。 ページAntiSpoof は ページExtension:AntiSpoof にリダイレクトされるため、実際の更新データはページ Extension:AntiSpoof から抽出します。
レスポンス
レスポンス |
---|
{
"batchcomplete": true,
"query": {
"redirects": [
{
"from": "AntiSpoof",
"to": "Extension:AntiSpoof"
}
],
"pages": [
{
"pageid": 8993,
"ns": 102,
"title": "Extension:AntiSpoof",
"revisions": [
{
"revid": 3419761,
"parentid": 3053177,
"minor": true,
"user": "Shirayuki",
"timestamp": "2019-09-22T05:14:46Z",
"comment": ""
}
]
}
]
}
}
|
起こりうるエラー
コード | 情報 |
---|---|
rvdiffto | rvdiffto は "prev"、"next"、"cur" (「以前」「以降」「現在の版」) もしくは正の整数を取ります。 |
rvnosuchrevid | There is no revision with ID ID. |
rvnosuchsection | 更新版 rID には section という節はありません。 |
rvrevids | The revids parameter may not be used with the list options (rvlimit, rvstartid, rvendid, rvdir=newer, rvuser, rvexcludeuser, rvstart, and rvend). |
rvmultpages | titles, pageids or a generator was used to supply multiple pages, but the rvlimit, rvstartid, rvendid, rvdir=newer, rvuser, rvexcludeuser, rvstart, and rvend parameters may only be used on a single page. |
rvaccessdenied | 現在の利用者には title を閲読する権限がありません |
rvbadparams | パラメータ start と startid は同時に使えません |
rvbadparams | パラメータ end と endid は同時に使えません |
rvbadparams | パラメータ user と excludeuser は同時に使えません |
invalidparammix | titles, pageids or a generator was used to supply multiple pages, but the rvlimit, rvstartid, rvendid, rvdir=newer, rvuser, rvexcludeuser, rvstart, and rvend parameters may only be used on a single page. |
accessdenied | You are not allowed to view title. |
badid_startid | No revision was found for parameter startid. |
badid_endid | No revision was found for parameter endid. |
追加的な注記
- ページの特定に使うパラメータは
pageids
もしくはtitles
。 個別の更新を特定するパラメータはrevids
。 API:クエリ を参照してください。 - Slots の特定にはパラメータ
rvslots
も使用可能。 パラメータが無い場合、API は単に slot の情報を返します。 - (enum) とマークされたパラメータを使う場合、
titles=
には題名1件のみふくむことができます。 - このモジュールはバージョン 1.25 以前は、生成器の機能がありませんでした。
- このモジュールの差分関連の機能は、バージョン 1.30 以降廃止され、API:比較 へ移行されました。
- このクエリのコードは、git リポジトリのApiQueryRevisions.phpにあります。
パラメーターの履歴
- v1.32:
rvslots
,roles
を導入しましたrvcontentformat
を廃止予定にしました - v1.30:
parsetree
,rvprop
,rvexpandtemplates
,rvparse
,rvdiffto
,rvdifftotext
,rvdifftotextpst
を廃止予定にしました - v1.27:
rvdifftotextpst
を導入しました - v1.26:
parsetree
を導入しましたrvgeneratexml
を廃止予定にしました - v1.24:
rvtoken
を廃止予定にしました - v1.21:
contentmodel
,rvcontentformat
を導入しました - v1.19:
sha1
,rvparse
を導入しました - v1.17:
userid
,rvparse
を導入しました - v1.16:
parsedcomment
,tags
,rvdifftotext
,rvtag
を導入しました - v1.15:
rvdiffto
,rvcontinue
を導入しました - v1.14:
rvgeneratexml
を導入しました - v1.13:
rvsection
を導入しました - v1.12:
rvexpandtemplates
,rvtoken
を導入しました - v1.11:
ids
,flags
,size
,rvuser
,rvexcludeuser
を導入しました