【JavaScript】ランダムにWikipediaの記事を取得する関数
やりたいこと
現在作成中のLINE BOTの機能として、Wikipediaの1記事の情報をランダムにとってきて
- 記事のタイトル
- 記事のURL
をレスポンスしてくれる機能を作りたい。
使用したAPIとその使い方
MediaWiki APIを使用した。
基本的な仕様や使い方、使用上の注意点はこの記事を参照のこと。
以下のURLを指定することで、Wikipediaからランダムに1記事の基本情報を取得することが可能。
パラメータを簡単に説明すると、
- format=json でJSON形式を指定
- action=query でデータ取得のアクションを指定
- generator=random で記事をランダムに取得するよう指定
- grnamespace=0 で持ってくる記事の名前空間(分類のようなもの)を0(標準)に設定
- prop=info で記事の基本情報を取得
- inprop=url で記事のURLも持ってくるよう設定
- indexpageids でページのIDを付与 これを指定しなければいけない理由は後述
このURLでの取得例がこちら FF出てきた!!!
JavaScriptのサンプルコード
上記のURLを用いて記事の情報をJSONで取得し、記事のタイトルとURLを返すサンプルコード
function getRandomArticle() { const url = 'https://ja.wikipedia.org/w/api.php?format=json&action=query&generator=random&grnnamespace=0&prop=info&inprop=url&indexpageids'; const res = UrlFetchApp.fetch(url); const item = JSON.parse(res); // 取得したページのIDを取得 const pageID = item.query.pageids; // ページのタイトルを取得 const pageTitle = item.query.pages[pageID].title; // ページのURLを取得 const pageUrl = item.query.pages[pageID].fullurl; // リプライ用のテキスト生成 replyText = 'こんな記事を拾ってきたわん!'+'\n'; replyText += '【'+pageTitle +'】'+'\n'; replyText += pageUrl; return replyText; }
上に貼ったJSONサンプルを見ると分かるが、query.pagesの直下に該当記事のpageIDが変数名として入るフォーマットになっている。
記事はランダムに取得するため、当然このpageIDは都度変わる。
そのため、まずはquery.pageidsからpageIDを取得したうえ、その値をブラケット記法で用いて各変数にアクセスしている。
URLにindexpageidsを指定したのはこのquery.pageidsを表示するようにするためだった。
LINE BOTで動かしてみる
こんな感じ
おわり~