wikipediaについて
wikipediaのデータを使いたいと思い、APIがないか調べたら結構豊富で、無料で使えたので、まとめておきます。
wikipediaの種類
まずは、そもそもwikipediaにどんな種類があるのか。
一言にwikipediaと言っても姉妹サービスが色々あります。
- wikipedia
- 一番メジャーなサービス
- 世界中のあらゆるモノについて説明が書かれているサイト
- wikimedia
- wikipediaの姉妹的なやつをまとめたサイト
- wikipediaもwikiMediaのうちの一つ
辞書サービスのwiktionary、動植物・細菌など生物の種についてまとめられているwikispeciesなど
- mediawiki
- wikipediaを動かしているソフト
- 無料で使える
- wikimediaと名前が紛らわしいが別物
他にもジャンル特化型のwikipediaのようなサービスが色々あるので、詳しくはwikimediaから辿ってみるといいです。
wikipediaとwikimediaのAPI
今回の目的は、wikipediaのデータをAPIで取得したい、ということで使えそうなAPIを探したら、wikimediaのAPIが使えそうでした。
ドキュメントを貼っておくので、詳細な使い方はそちらを見てもらうとして、どんなことができるのかざっくりとまとめていきます。
wikimedia API
wikimedia APIでできること
- 記事の内容を取得
- 記事のタイトル一覧を取得
- 記事内のリンクやカテゴリ、写真を取得
- wikipediaへのログイン
- wikipediaの記事編集、コメント
など、結構何でもできちゃいます。
全て無料で利用可能ですが、大量のリクエストを送信して負荷をかけすぎないように。
詳しくはこちら。
APIのフォーマット
日本語のwikipediaを対象にしたAPIのエントリーポイントはこれです。
https://ja.wikipedia.org/w/api.php?key1=value1&key2=value2
詳しくはこの辺りを参考にしてください。
メインページ:https://www.mediawiki.org/wiki/API:Main_page/ja
使えるパラメータ:https://www.mediawiki.org/w/api.php
お試しで叩けるサンドボックスもあるので、ここで試してみるといいです。
APIサンドボックス
使用例
ざっくりと使い方のイメージを書いておきます。
- actionで、どんな操作をしたいかを指定
- listで、何を取得したいか指定
- propで、詳細に取得したいフィールドを指定
- formatで、レスポンスの形式を指定
この辺りが基本パラメータなので、これと他パラメータを組み合わせていくことになります。
記事一覧を取得
キーワードを指定して、タイトルにキーワードを含む記事一覧を取得できます。
- srsearchでキーワードを指定
.https://ja.wikipedia.org/w/api.php?action=query&list=search&srsearch=iphone&format=json
# レスポンス一部抜粋
{
ns: 0,
title: "IPhone",
pageid: 2115905,
size: 207196,
wordcount: 22158,
snippet: "<span class="searchmatch">iPhone</span>(アイフォーン)は、Appleのスマートフォン。第1世代は2007年1月9日に発表され、同年6月29日にアメリカ合衆国で販売を開始した。初代<span class="searchmatch">iPhone</span>は当時すでに流通していたiPAQなどのPDAの基本的な操作やデザインを踏襲し、一部のWindows",
timestamp: "2021-04-29T15:17:05Z"
},
{
ns: 0,
title: "IPhone 5s",
pageid: 2846541,
size: 16233,
wordcount: 1591,
snippet: "アップル > <span class="searchmatch">iPhone</span> > iPhone5s <span class="searchmatch">iPhone</span> 5s(アイフォーン ファイブエス)は、アップルが開発したタッチスクリーンベースのスマートフォンである。<span class="searchmatch">iPhone</span> 5の後続機であり、<span class="searchmatch">iPhone</span>の第7世代目の機種である。 2013年9月10日、アメリカ・カリフォルニア州クパチーノのア",
timestamp: "2021-04-22T19:40:40Z"
},
{
ns: 0,
title: "IPhone 5c",
pageid: 2855736,
size: 12441,
wordcount: 1188,
snippet: "アップル > <span class="searchmatch">iPhone</span> > <span class="searchmatch">iPhone</span> 5c <span class="searchmatch">iPhone</span> 5c(アイフォーン ファイブシー)は、アップルが開発したタッチスクリーンベースのスマートフォンである。<span class="searchmatch">iPhone</span> 5の後続機であり、<span class="searchmatch">iPhone</span>の第7世代目の機種である。 2013年9月10日、アメリカ・カリフォルニア州クパチーノ",
timestamp: "2021-03-18T15:58:36Z"
},
記事の概要を取得
タイトルを指定して記事の概要を取得できます。
- titleで記事タイトルを指定
- prop=extractsでレスポンスに概要を指定
{
batchcomplete: "",
query: {
normalized: [
{
from: "iPhone",
to: "IPhone"
}
],
pages: {
2115905: {
pageid: 2115905,
ns: 0,
title: "IPhone",
extract: "iPhone(アイフォーン)は、Appleのスマートフォン。第1世代は2007年1月9日に発表され、同年6月29日にアメリカ合衆国で販売を開始した。初代iPhoneは当時すでに流通していたiPAQなどのPDAの基本的な操作やデザインを踏襲し、一部のWindows Mobile機よりも低コストで製品化した。「通信キャリア」とのシームレスな通話をも可能にしたこと、当初はアプリケーションも自社限定であり機能は多くなかったが、GPSも内蔵していたことで話題になった。 現行最新モデルである、iPhone 12 / 12 mini・iPhone 12 Pro / 12 Pro Max は2020年10月13日(日本時間14日)に発表された。"
}
}
}
}
記事の概要、サムネ画像などをまとめて取得
タイトルをパスとして指定し、記事の概要、サムネ画像URLなどをまとめて取得できます。
.https://ja.wikipedia.org/api/rest_v1/page/summary/IPhone
# レスポンス一部抜粋
titles: {
canonical: "IPhone",
normalized: "IPhone",
display: "iPhone"
},
pageid: 2115905,
thumbnail: {
source: "https://upload.wikimedia.org/wikipedia/commons/thumb/3/3e/IPhone_12_Pro_Gold.svg/langja-158px-IPhone_12_Pro_Gold.svg.png",
width: 158,
height: 320
},
extract: "iPhone(アイフォーン)は、Appleのスマートフォン。第1世代は2007年1月9日に発表され、同年6月29日にアメリカ合衆国で販売を開始した。初代iPhoneは当時すでに流通していたiPAQなどのPDAの基本的な操作やデザインを踏襲し、一部のWindows Mobile機よりも低コストで製品化した。「通信キャリア」とのシームレスな通話をも可能にしたこと、当初はアプリケーションも自社限定であり機能は多くなかったが、GPSも内蔵していたことで話題になった。",
記事の内容を取得 (wikiText)
wikiText記法というwikipedia独自の記法で記事の内容を取得できます。
wikiText用のparserも用意されているので、この形式で取得しても使えるとは思います。
# レスポンス一部抜粋
pageid: 2115905,
ns: 0,
title: "IPhone",
revisions:
[
{
contentformat: "text/x-wiki",
contentmodel: "wikitext",
*: "{{小文字}} {{Infobox mobile phone | name = iPhone | logo = (省略)
記事の一部の段落を取得 (html)
記事全体の内容ではなく、段落を指定してhtmlで取得できます。
wikiTextのparserがあるとはいえ、やはりhtmlの方が扱いやすいと思います。
- pageidで記事idを指定
- sectionで段落番号を指定
{
parse: {
title: "IPhone",
pageid: 2115905,
text: {
*: "<h3><span id="iPhone.EF.BC.88.E5.88.9D.E4.BB.A3.EF.BC.89"></span><span class="mw-headline" id="iPhone(初代)">iPhone(初代)</span></h3>(略)"
}
}
}
htmlではなくplain textで取得したいという方もいると思いますが、段落を指定してplain textで取得する方法はありませんでした。
記事全体を取得 (plain text)
記事の一部をplain textで取得することはできませんが、記事全体なら一応取得できます。
※ただし、めちゃくちゃ重いので、あまり実用的ではないかもしれません。
.https://ja.wikipedia.org/wiki/iPhone?action=cirrusdump
# レスポンス一部抜粋
language: "ja",
title: "IPhone",
text: "iPhone(アイフォーン)は、Appleのスマートフォン。第1世代は2007年1月9日に発表され(略)
plain textを取得したい場合は、htmlで取得してパースするのが一番楽だと思います。
緯度経度を指定して周囲の記事を取得
駅や学校など位置情報を持つ記事には位置情報が付与されているおり、位置情報で記事の検索ができます。
- gscoordで緯度経度を指定
- gsradiusで範囲を指定
- gslimitで最大レスポンス数を指定
# レスポンス一部抜粋
{
batchcomplete: "",
query: {
geosearch: [
{
pageid: 4188418,
ns: 0,
title: "烏帽子岳 (札幌市)",
lat: 43.01186111111111,
lon: 141.18471666666667,
dist: 2368.9,
primary: ""
},
{
pageid: 967178,
ns: 0,
title: "手稲平和霊園",
lat: 43.05291666666666,
lon: 141.23333333333332,
dist: 3719.1,
primary: ""
},
(略)
まとめ
以上、mediawiki APIでwikipediaのデータを取得する方法でした。
無料でこれだけ色々使えるのは素晴らしいですね。
改めて注意点ですが、大量のリクエストを送りすぎないようにしましょう。
今回紹介した以外にもできることはまだまだあるので、ドキュメントを見て色々試してみてください。
本日のオススメの一冊
APIによって業務がどう効率化されて、どんな未来になっていくか書かれています。
技術的な内容ではなく、APIが世の中に与える影響について書かれているので、APIを利用開発するなら読んでみると面白いです。
コメント