LoginSignup
397
356

More than 5 years have passed since last update.

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

Last updated at Posted at 2014-04-29

はじめに

内容

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を用いる。

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

<?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形式で取得 (なし)

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

<?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形式で取得

<?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 リクエストの継続情報 (レスポンスに含まれる属性値)

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

<?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>

例(次のページ)

<?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 リクエストの継続情報 (レスポンスに含まれる属性値)

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

<?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 リクエストの継続情報 (レスポンスに含まれる属性値)

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

<?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 結果数の上限 (整数)

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

<?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 リクエストの継続情報 (レスポンスに含まれる属性値)

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

<?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 リダイレクト記事を含める (なし)

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

<?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件の通常記事を取得

<?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>
397
356
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
397
356