pub:2015.9.5/upd:2016.8.4

【スピード入門】Wikipedia API

Tags: , ,

Wikipediaからの情報取得

wikipediaのAPIは、Media Wikiの仕様に基づいてRESTで提供されている。

wikipediaへの問合せは、ひとつの「APIエンドポイント」に複数の「パラメータ」を追記することで表現される。問合せは形態は以下のようになる。

https://[APIエンドポイント] ? [パラメータ1=値] & [パラメータ2=値] & [パラメータ3=値] & [パラメータ4=値] …

問合せはhttpsで行われるのでWEBブラウザからも結果を確認することができる。

APIエンドポイントの概要

ここでいう、APIエンドポイントとは「Wikipedia」のURL (RESTの用語に従えば、Wikipediaを示すURI) のことである。以下に日本語版Wikipediaと英語版のWikipediaのエンドポイントを記載しておく。

  • 日本語版のエンドポイント : https://ja.wikipedia.org/w/api.php
  • 英語版のエンドポイント : https://en.wikipedia.org/w/api.php

Tips

  • エンドポイントにパラメータ無しでアクセスするとリファレンスが読める。
  • httpは使えない。httpsを使う。おれは20分ぐらいはまった(´・ω・`)
  • この手のAPIを利用する際のマナーとして、先方のサーバに負荷をかけないように適当な時間間隔を開けながらクエリする。

パラメータの概要

エンドポイントの後方にパラメータを追記していくと、特定のオペレーションを指定した問合せ文を作成することができる。

format

formatは結果のフォーマットを指定するパラメータである。結果が戻ってくる場合は指定することが好ましい。

例えば、format=jsonとするとjsonで結果が戻ってくる。以下にいくつかの対応するフォーマットの例を示しておく。

  • json
  • jsonfm (HTMLでフォーマットされたjson。デバック時に見やすい。)
  • xml
  • yaml

なお2015-09-06現在、jsonを指定すると結果の文字コードがASCIIになるようだ。当然日本語は文字化けする(´・ω・)「utf8=」パラメータを入れるとUTF-8で結果が戻るようになる。おれは20分ぐらいはまった(´・ω・)

action

actionはリソースに対して、どのようなアクションを行うのかを指定するパラメータである。全ての問合せで必須のパラメータである。

例えば、action=querytとすればデータの取得ができるということである。query以外のactionもいくつか存在している。興味があればリファレンスを確認しよう。

action=queryに付随するパラメータ

action=queryを使った時に付随して指定できるパラメータがある。以下、その一部を示す。

  • prop (対象の指定に使う)
  • list (対象が複数ある時につかう)
  • titles (ページタイトルでの検索に使う)

なお、以下のようにaction=helpを使うと各パラメータの仕様が確認できる。

  • https://ja.wikipedia.org/w/api.php?action=help&modules=query

問合せと結果の例

ここまでついてこられたおまいらなら、いくつかの例を見ればあとは自分で対処できるだろう。いくつかの例を示して本記事を終わる。ここからが本当のデモンズソウルだ

タイトルが山手線のページの基本情報を取得

以下の問合せは、タイトルが山手線のページの基本情報をjson(utf-8)の形式で取得するものである。

問合せ

  • https://ja.wikipedia.org/w/api.php?format=json&utf8=&action=query&titles=山手線

結果

{"batchcomplete":"","query":{"pages":{"1948892":{"pageid":1948892,"ns":0,"title":"山手線"}}}}

タイトルが山手線のページの全文を取得

問合せ

  • https://ja.wikipedia.org/w/api.php?format=json&utf8=&action=query&prop=revisions&titles=山手線&rvprop=content

結果

{"batchcomplete":"","query":{"pages":{"1948892":{"pageid":1948892,"ns":0,"title":"山手線","revisions":[{"contentformat":"text/x-wiki","contentmodel":"wikitext","*":"{{Otheruseslist|JR東日本の鉄道路線である'''山手線'''(やまのてせん)|神戸市営地下鉄の山手線(やまてせん)|神戸市営地下鉄西神・山手線|元[[阪和電気鉄道]]の鉄道路線で南海鉄道時代に山手線(やまのてせん)と称していたJR西日本の鉄道路線|阪和線|阪神高速道路の路線|阪神高速31号神戸山手線|山手線(やまてせん)とも呼ばれている福岡県北九州市の市道の一部|山手通り (北九州市)}}n{{Infobox rail linen| box_width     = {{{box_width|300px}}}; border-top:5px {{{line_color|#9acd32}}} solidn| name          = [[File:JR logo (east).svg|35px]] {{{line_name|{{PAGENAME}}}}}n| logo        = n| logo_width  = n| logo_alt    = n| image       = JRE-E231-500-for-JRyamanote-line.jpgn| image_width = 300pxn| image_alt   = E231系n| caption     = 山手線の主力車両 [[JR東日本E231系電車|E231系500番台]]n| type        = n| system      = n| stations    = 29駅(西日暮里駅-田町駅の12駅含む)n| ridership2  = n| open        = 1885年3月1日n| owner       = [[File:NipponRyLogo.svg|15px]] [[日本鉄道]]→[[File:National Railway Symbol of Japan.png|15px]] [[逓信省|鉄道作業局→帝国鉄道庁]]→[[鉄道省|鉄道院→鉄道省]]→[[運輸通信省 (日本)|運輸通信省]]→[[運輸省]]→<br />[[File:J ...

タイトルが山手線のページが所属するカテゴリーを取得

問合せ

  • https://jp.wikipedia.org/w/api.php?format=json&utf8=&action=query&prop=categories&titles=山手線

結果

{"batchcomplete":"","query":{"pages":{"1948892":{"pageid":1948892,"ns":0,"title":"山手線","categories":[{"ns":14,"title":"Category:出典を必要とする記述のある記事/2015年7月"},{"ns":14,"title":"Category:山手線"},{"ns":14,"title":"Category:日本国有鉄道の鉄道路線"},{"ns":14,"title":"Category:日本鉄道"},{"ns":14,"title":"Category:東京都の交通"},{"ns":14,"title":"Category:東日本旅客鉄道の鉄道路線"},{"ns":14,"title":"Category:関東地方の鉄道路線"}]}}}}

カテゴリーとしての山手線に所属するページのタイトルを100件を上限に取得

※ cmlimitを指定しない場合は10件が上限となる模様

問合せ

  • https://jp.wikipedia.org/w/api.php?format=json&utf8=&action=query&list=categorymembers&cmtitle=Category:山手線&cmlimit=100

結果

{"batchcomplete":"","query":{"categorymembers":[{"pageid":1948892,"ns":0,"title":"山手線"},{"pageid":11193,"ns":0,"title":"赤羽線"},{"pageid":2067607,"ns":0,"title":"湘南新宿ライン"},{"pageid":2885244,"ns":0,"title":"秋葉原駅"},{"pageid":1855048,"ns":0,"title":"池袋駅"},{"pageid":4523,"ns":0,"title":"上野駅"},{"pageid":8454,"ns":0,"title":"鶯谷駅"},{"pageid":7776,"ns":0,"title":"恵比寿駅"},{"pageid":7546,"ns":0,"title":"大崎駅"},{"pageid":1640709,"ns":0,"title":"大崎運輸区"},{"pageid":8218,"ns":0,"title":"大塚駅 (東京都)"},{"pageid":8456,"ns":0,"title":"御徒町駅"},{"pageid":26930,"ns":0,"title":"踊り子 (列車)"},{"pageid":43883,"ns":0,"title":"おはようとちぎ・ホームタウンとちぎ"},{"pageid":80824,"ns":0,"title":"おはようとちぎ"},{"pageid":96897,"ns":0,"title":"おはようライナー新宿"}, ...

Leave a Reply

Your email address will not be published.