MediaWiki APIを使ってWikipediaの情報を取得

More than 1 year has passed since last update.


はじめに


内容

MediaWiki APIを使うとWikipediaの情報をAPIを使って取得できる。

例えば次のようなことが可能。


  • 記事の内容を取得

  • 記事からのリンクや記事へのリンクの一覧を取得

  • 記事を含むカテゴリを取得

  • 記事で使われているテンプレートを取得

  • Wikipediaへのログイン・ログアウト

  • 記事の編集

フォーマットはXML, JSON, YAMLなどに対応している。

今回は主に記事に関する情報を取得する方法を紹介する。

より詳しい内容は公式ドキュメントを参照。

2014-12-19 追記: こちらでAPIサンドボックスが使えるようです。 @yukichi さん、ありがとうございます。

2018-07-14 追記: APIサンドボックスのURLが変更されたようです。 @mizoe@github さん、ありがとうございます。


注意

Wikipediaの提供するMediaWiki APIにはリクエスト数/時間などの制限はないが、大量のリクエストを送ってサーバに負担をかけてはいけない。

例えば次のことに気をつける。


  • レスポンスを受け取ってから次のリクエストを送る

  • 繰り返し操作はなるべく1つのリクエストにまとめる

  • User-Agent偽装はしない

詳しくはこちらを参照。


API仕様


URLフォーマット

Wikipedia日本語版の場合、URLは次のようになる。

http://ja.wikipedia.org/w/api.php?パラメータ1=値1&パラメータ2=値2&...&パラメータn=値n


パラメータの種類

パラメータには全てのAPIリクエストで使用できる汎用パラメータと、指定したactionごとに固有のパラメータがある。


汎用パラメータ

フォーマットやアクションを指定する。

パラメータ
意味

format
出力フォーマット
json, xml, yaml, ...

action
操作
query, login, logout, edit, ...


アクション固有パラメータ

汎用パラメータにaction=queryを指定した場合、取得したい情報の種類に応じて次のようなパラメータを指定する。

パラメータ
意味

prop
記事の各構成要素を取得
info, revisions, categories, links, templates, images, ...

list
記事などのリストを取得
backlinks, random, search, ...


記事の指定方法

prop=記事の構成要素を用いる場合、次のいずれかのパラメータを用いて記事を指定する。

パラメータ
意味

titles
記事タイトル
(URLエンコードされた文字列)

pageids
記事ID
(整数)


使用例

以下では目的ごとにAPIの使用法を説明する。

汎用パラメータはformat=xmlaction=queryを指定している。


記事の基本情報を取得


パラメータ

prop=infoを用いる。


記事「エマ・ワトソン」の基本情報を取得

http://ja.wikipedia.org/w/api.php?format=xml&action=query&prop=info&titles=%E3%82%A8%E3%83%9E%E3%83%BB%E3%83%AF%E3%83%88%E3%82%BD%E3%83%B3

<?xml version="1.0" encoding="UTF-8"?>

<api>
<query>
<pages>
<page pageid="128948" ns="0" title="エマ・ワトソン" contentmodel="wikitext" pagelanguage="ja" touched="2014-04-22T16:31:02Z" lastrevid="50754976" counter="" length="35154" />
</pages>
</query>
</api>


記事本文を取得


パラメータ

prop=revisionsを用いる。

この操作は本来記事のリビジョンを取得するためのものなので、本文を取得したい場合はさらにrvprop=contentを指定する。

デフォルトではMediaWiki記法で書かれた本文が返る。

本文をHTML形式で取得したければrvparseオプションを指定する。

タグなどがエスケープされた形式で返るので、元に戻す処理が必要。

パラメータ
意味

rvprop
取得する要素
ids, timestamp, content, ...

rvparse
本文をHTML形式で取得
(なし)


記事「エマ・ワトソン」の本文を取得

http://ja.wikipedia.org/w/api.php?format=xml&action=query&prop=revisions&titles=%E3%82%A8%E3%83%9E%E3%83%BB%E3%83%AF%E3%83%88%E3%82%BD%E3%83%B3&rvprop=content

<?xml version="1.0" encoding="UTF-8"?>

<api>
<query>
<pages>
<page pageid="128948" ns="0" title="エマ・ワトソン">
<revisions>
<rev contentformat="text/x-wiki" contentmodel="wikitext" xml:space="preserve">{{ActorActress
| 芸名 = Emma Watson
| ふりがな = エマ・ワトソン
...
{{Link FA|zh}}</rev>
</revisions>
</page>
</pages>
</query>
</api>


例(HTML)

記事「エマ・ワトソン」の本文を(エスケープされた)HTML形式で取得

http://ja.wikipedia.org/w/api.php?format=xml&action=query&prop=revisions&titles=%E3%82%A8%E3%83%9E%E3%83%BB%E3%83%AF%E3%83%88%E3%82%BD%E3%83%B3&rvprop=content&rvparse

<?xml version="1.0" encoding="UTF-8"?>

<api>
<query>
<pages>
<page pageid="128948" ns="0" title="エマ・ワトソン">
<revisions>
<rev xml:space="preserve">&lt;table class="infobox" style="width:20em; text-align:left; font-size:90%"&gt;
&lt;tr&gt;
&lt;td colspan="2" style="text-align:center; padding-top:0.1em; background-color:#ed8; color:#000"&gt; &lt;small&gt;エマ・ワトソン&lt;/small&gt;&lt;br/&gt;&lt;big&gt;&lt;b&gt;Emma Watson&lt;/b&gt;&lt;/big&gt;
...
&lt;/p&gt;</rev>
</revisions>
</page>
</pages>
</query>
</api>


記事からリンクしている記事の一覧を取得


パラメータ

prop=linksを用いる。

結果が多くて一度に表示できない場合、レスポンスに含まれるplcontinueの属性値をリクエストURLのplcontinueパラメータに与えることで、次のページを取得できる。

パラメータ
意味

plnamespace
記事の名前空間
0(通常の記事), 1(ノート), ...

pllimit
結果数の上限
(整数)

plcontinue
リクエストの継続情報
(レスポンスに含まれる属性値)


記事「エマ・ワトソン」からのリンクの一覧を取得

http://ja.wikipedia.org/w/api.php?format=xml&action=query&prop=links&titles=%E3%82%A8%E3%83%9E%E3%83%BB%E3%83%AF%E3%83%88%E3%82%BD%E3%83%B3

<?xml version="1.0" encoding="UTF-8"?>

<api>
<query-continue>
<links plcontinue="128948|0|MTVムービー・アワード" />
</query-continue>
<query>
<pages>
<page pageid="128948" ns="0" title="エマ・ワトソン">
<links>
<pl ns="0" title="1990年" />
<pl ns="0" title="2001年" />
...
<pl ns="0" title="IMDB" />
</links>
</page>
</pages>
</query>
</api>


例(次のページ)

http://ja.wikipedia.org/w/api.php?format=xml&action=query&prop=links&titles=%E3%82%A8%E3%83%9E%E3%83%BB%E3%83%AF%E3%83%88%E3%82%BD%E3%83%B3&plcontinue=128948|0|MTV%E3%83%A0%E3%83%BC%E3%83%93%E3%83%BC%E3%83%BB%E3%82%A2%E3%83%AF%E3%83%BC%E3%83%89

<?xml version="1.0" encoding="UTF-8"?>

<api>
<query-continue>
<links plcontinue="128948|0|ウォールフラワー_(映画)" />
</query-continue>
<query>
<pages>
<page pageid="128948" ns="0" title="エマ・ワトソン">
<links>
<pl ns="0" title="MTVムービー・アワード" />
<pl ns="0" title="Noah" />
...
<pl ns="0" title="インターネット・ムービー・データベース" />
</links>
</page>
</pages>
</query>
</api>


記事が属するカテゴリの一覧を取得


パラメータ

prop=categoriesを用いる。詳細はprop=linksと同様。

パラメータ
意味

cllimit
結果数の上限
(整数)

clcontinue
リクエストの継続情報
(レスポンスに含まれる属性値)


記事「エマ・ワトソン」が属するカテゴリの一覧を取得

http://ja.wikipedia.org/w/api.php?format=xml&action=query&prop=categories&titles=%E3%82%A8%E3%83%9E%E3%83%BB%E3%83%AF%E3%83%88%E3%82%BD%E3%83%B3

<?xml version="1.0" encoding="UTF-8"?>

<api>
<query>
<pages>
<page pageid="128948" ns="0" title="エマ・ワトソン">
<categories>
<cl ns="14" title="Category:1990年生" />
<cl ns="14" title="Category:イングランドの俳優" />
...
<cl ns="14" title="Category:存命人物" />
</categories>
</page>
</pages>
</query>
</api>


記事で使用されているテンプレートの一覧を取得


パラメータ

prop=templatesを用いる。詳細はprop=linksと同様。

パラメータ
意味

tllimit
結果数の上限
(整数)

tlcontinue
リクエストの継続情報
(レスポンスに含まれる属性値)


記事「エマ・ワトソン」で使用されているテンプレートの一覧を取得

http://ja.wikipedia.org/w/api.php?format=xml&action=query&prop=templates&titles=%E3%82%A8%E3%83%9E%E3%83%BB%E3%83%AF%E3%83%88%E3%82%BD%E3%83%B3

<?xml version="1.0" encoding="UTF-8"?>

<api>
<query-continue>
<templates tlcontinue="128948|10|Cite_press_release" />
</query-continue>
<query>
<pages>
<page pageid="128948" ns="0" title="エマ・ワトソン">
<templates>
<tl ns="10" title="Template:!" />
<tl ns="10" title="Template:Accessdate" />
...
<tl ns="10" title="Template:Cite news" />
</templates>
</page>
</pages>
</query>
</api>


記事に含まれる画像の一覧を取得


パラメータ

prop=imagesを用いる。詳細はprop=linksと同様。

パラメータ
意味

imlimit
結果数の上限
(整数)


記事「エマ・ワトソン」に含まれる画像の一覧を取得

http://ja.wikipedia.org/w/api.php?format=xml&action=query&prop=images&titles=%E3%82%A8%E3%83%9E%E3%83%BB%E3%83%AF%E3%83%88%E3%82%BD%E3%83%B3

<?xml version="1.0" encoding="UTF-8"?>

<api>
<query>
<pages>
<page pageid="128948" ns="0" title="エマ・ワトソン">
<images>
<im ns="6" title="ファイル:Commons-logo.svg" />
<im ns="6" title="ファイル:Emma Watson 2012.jpg" />
...
<im ns="6" title="ファイル:Wikiquote-logo.svg" />
</images>
</page>
</pages>
</query>
</api>


記事へリンクしている記事の一覧を取得


パラメータ

list=backlinksを用いる。

パラメータ
意味

bltitle
記事タイトル
(URLエンコードされた文字列)

blnamespace
記事の名前空間
0(通常の記事), 1(ノート), ...

blfilterredir
リダイレクト記事の扱い
all(全ての記事を取得), redirects(リダイレクト記事のみ取得), nonredirects(リダイレクト記事以外のみ取得)

bllimit
取得するリンク数の上限
(整数)

blredirect
リダイレクト経由でリンクしている記事を含める
(なし)

blcontinue
リクエストの継続情報
(レスポンスに含まれる属性値)


記事「エマ・ワトソン」へリンクしている記事の一覧を取得

https://ja.wikipedia.org/w/api.php?format=xml&action=query&list=backlinks&bltitle=%E3%82%A8%E3%83%9E%E3%83%BB%E3%83%AF%E3%83%88%E3%82%BD%E3%83%B3

<?xml version="1.0" encoding="UTF-8"?>

<api>
<query-continue>
<backlinks blcontinue="0|エマ・ワトソン|128963" />
</query-continue>
<query>
<backlinks>
<bl pageid="4870" ns="0" title="4月15日" />
<bl pageid="5694" ns="0" title="ハリー・ポッターシリーズ" />
...
<bl pageid="106220" ns="0" title="エマ" />
</backlinks>
</query>
</api>


単語を含む記事を検索


パラメータ

list=searchを用いる。

パラメータ
意味

srsearch
検索語
(URLエンコードされた文字列)

srlimit
結果数の上限
(整数)

srnamespace
記事の名前空間
0(通常の記事), 1(ノート), ...

sroffset
結果のオフセット
(整数)

srprop
結果に含める情報
size(記事サイズ), wordcount(記事の単語数), timestamp(記事の最終更新日時), score(検索エンジンのスコア), snippet(記事中の検索語を含む部分), ...

srredirects
リダイレクト記事を含める
(なし)


単語「エマ・ワトソン」を含む記事を検索

http://ja.wikipedia.org/w/api.php?format=xml&action=query&list=search&srsearch=%E3%82%A8%E3%83%9E%E3%83%BB%E3%83%AF%E3%83%88%E3%82%BD%E3%83%B3

<?xml version="1.0" encoding="UTF-8"?>

<api>
<query-continue>
<search sroffset="10" />
</query-continue>
<query>
<searchinfo totalhits="62" />
<search>
<p ns="0" title="エマ・ワトソン" snippet="| ふりがな = &lt;span class='searchmatch'&gt;エマ・ワトソン&lt;/span&gt;&#xA;...ンズ・チャイニーズ・シアター]]でサインを求められる&lt;span class='searchmatch'&gt;エマ・ワトソン&lt;/span&gt; ([[2007年]])]]&#xA;" size="35154" wordcount="1742" timestamp="2014-02-19T10:14:16Z" />
<p ns="0" title="ハリー・ポッターと死の秘宝" snippet="...[[ダニエル・ラドクリフ]]&amp;lt;br&amp;gt;[[ルパート・グリント]]&amp;lt;br&amp;gt;[[&lt;span class='searchmatch'&gt;エマ・ワトソン&lt;/span&gt;]]&amp;lt;br&amp;gt;[[レイフ・ファインズ]]&amp;lt;br&amp;gt;[[アラン・リックマン]]&amp;lt;br&amp;gt;&#xA;...ニエル・ラドクリフ]]&amp;lt;br /&amp;gt;[[ルパート・グリント]]&amp;lt;br /&amp;gt;[[&lt;span class='searchmatch'&gt;エマ・ワトソン&lt;/span&gt;]]&amp;lt;br /&amp;gt;[[ヘレナ・ボナム=カーター]]&amp;lt;br /&amp;gt;[[ロビー・コル�&#xA;" size="75627" wordcount="2711" timestamp="2014-01-31T09:28:04Z" />
...
<p ns="0" title="ハリー・ポッターと秘密の部屋" snippet="...ニエル・ラドクリフ]]&amp;lt;br /&amp;gt;[[ルパート・グリント]]&amp;lt;br /&amp;gt;[[&lt;span class='searchmatch'&gt;エマ・ワトソン&lt;/span&gt;]]&amp;lt;br /&amp;gt;[[ケネス・ブラナー]]&amp;lt;br /&amp;gt;[[ジョン・クリーズ]]&amp;lt;br/&amp;gt;[&#xA;| colspan=&amp;quot;2&amp;quot; | [[ハーマイオニー・グレンジャー]] || [[&lt;span class='searchmatch'&gt;エマ・ワトソン&lt;/span&gt;]] || [[須藤祐実]]&#xA;" size="31224" wordcount="488" timestamp="2014-04-02T09:56:07Z" />
</search>
</query>
</api>


記事をランダムに取得


パラメータ

list=randomを用いる。

パラメータ
意味

rnlimit
結果数の上限
(整数)

rnnamespace
記事の名前空間
0(通常の記事), 1(ノート), ...

rnredirect
リダイレクト記事のみを表示
(なし)


ランダムに10件の通常記事を取得

http://ja.wikipedia.org/w/api.php?format=xml&action=query&list=random&rnnamespace=0&rnlimit=10

<?xml version="1.0" encoding="UTF-8"?>

<api>
<query>
<random>
<page id="1928065" ns="0" title="小柴大始" />
<page id="240784" ns="0" title="ジェイムス・ミッシェル" />
...
<page id="350128" ns="0" title="OH!相撲" />
</random>
</query>
</api>