日本語版「Stack Overflow」のAPIを利用してみた!
- カテゴリ :
- バックエンド(プログラミング)
- タグ :
- 入門
- WebAPI
こんにちは、渡辺です。
去年12月16日に「Stack Overflow」の日本語版がパブリックベータとして公開されましたね。
公開からちょうど一ヶ月の1月16日(20時現在)の利用状況は下記のとおりで、質問すると高確率で回答がもらえるんですね。
ユーザー数:5458人
質問数:782件
未回答質問:92件
今回は、今後ますます活発化する日本語版「Stack Overflow」をAPIで扱う方法を紹介します。
利用方法は簡単です。Stack Overflowからの情報取得だけであれば、API利用のための登録作業も必要ありません。
また、APIに問い合わせるURLは「StackExchange api」で作成することができます。下記の紹介もStackExchange apiで作成していきます。
今回は「javascript」タグを持つ質問を取得したいと思います。
まず、https://api.stackexchange.com/docs/questionsにアクセスして、tagged欄に「javascript」を入力します。
このまま「Run」ボタンをクリックすると英語版「Stack Overflow」の結果が返ってきてしまうので、リンクをクリックして、新規タブを開き、URLの「site=stackoverflow」を「site=ja.stackoverflow」に変更します。
この手順で下記のURLが作成されました。
【リクエストURL】
これだけで、「javascript」タグが付いている質問が取得できました。
(※下記はページの都合上1件に絞った結果です。)
次は、ページングを使って取得件数を変更しようと思います。
APIメソッドで取得できる件数は、初期状態では30件となっていますが、最大件数である100件を取得したいので、「pagesize」を100に設定します。また、次の100件を取得する場合は、「page」を2に設定します。
【リクエストURL】
期間を指定して質問を取得します。今回は、一ヶ月以内の質問を取得するようにしました。
「fromdate」と「todate」を設定するだけです。
【リクエストURL】
apiで用意されているソートを利用することで、
日本語版StackOverflowトップページの「人気」タブと同じ結果を取得することができます。
【リクエストURL】
ソートは6種類あり日本語版StackOverflowの記述に当てはめると、下のようになります。
・activity – アクティブ
・creation – 質問日時
・votes – 票数
・hot – 人気 (トップページのタブと同じソート(minとmaxは利用できないタイプのソート)
・week – 今週 (トップページのタブと同じソート(minとmaxは利用できないタイプのソート)
・month – 今月 (トップページのタブと同じソート(minとmaxは利用できないタイプのソート)
「フィルター」を利用することによって、回答の取得ができるようになっています。フィルターの「edit」ボタンをクリックして、「answer」→「body」にチェックすることで取得できるようなります。
【リクエストURL】
また、フィルターには下記の種類が用意されているので、「withbody」を利用することでも回答内容を取得することができます。
・default : 各種の型が持っているデフォルトフィルターが適用される
・withbody : デフォルトフィルターと各種型のbodyフィールドが含まる
・none : 空が返却される
・total : totalフィールドが返却される
「withbody」を利用する場合は下記の内容となります。
【リクエストURL】
「total」を利用すると下のような結果が返ってきました。
【リクエストURL】
ちなみに、本家StackOverflowの利用状況をapiで問い合わせたところ、下の値が返ってきました。ユーザー数が300万人以上いるんですね。そして、1分あたりに約2件の質問と、4件の回答が投稿されているとは、スゴイです。日本語版も期待しています!!それでは!
【リクエストURL】
去年12月16日に「Stack Overflow」の日本語版がパブリックベータとして公開されましたね。
公開からちょうど一ヶ月の1月16日(20時現在)の利用状況は下記のとおりで、質問すると高確率で回答がもらえるんですね。
ユーザー数:5458人
質問数:782件
未回答質問:92件
今回は、今後ますます活発化する日本語版「Stack Overflow」をAPIで扱う方法を紹介します。
利用方法は簡単です。Stack Overflowからの情報取得だけであれば、API利用のための登録作業も必要ありません。
また、APIに問い合わせるURLは「StackExchange api」で作成することができます。下記の紹介もStackExchange apiで作成していきます。
■特定のタグを持つ質問を取得する
今回は「javascript」タグを持つ質問を取得したいと思います。
まず、https://api.stackexchange.com/docs/questionsにアクセスして、tagged欄に「javascript」を入力します。
このまま「Run」ボタンをクリックすると英語版「Stack Overflow」の結果が返ってきてしまうので、リンクをクリックして、新規タブを開き、URLの「site=stackoverflow」を「site=ja.stackoverflow」に変更します。
この手順で下記のURLが作成されました。
【リクエストURL】
- https://api.stackexchange.com/2.2/questions?order=desc&sort=activity&tagged=javascript&site=ja.stackoverflow
これだけで、「javascript」タグが付いている質問が取得できました。
(※下記はページの都合上1件に絞った結果です。)
- {
items: [ { tags: [ javascript ,css ,jquery ] ,owner: { user_type: does_not_exist (string) ,display_name: user7487 (string) } ,is_answered: false (boolean) ,view_count: 21 (number) ,answer_count: 0 (number) ,score: 1 (number) ,last_activity_date: 1421460965 (number) ,creation_date: 1421459774 (number) ,last_edit_date: 1421460965 (number) ,question_id: 4715 (number) ,link: http://ja.stackoverflow.com/questions/4715/jquery-%e3%81%a7-%e3%82%b9%e3%82%af%e3%83%ad%e3%83%bc%e3%83%ab%e8%bf%bd%e5%be%93%e5%9e%8b%e3%81%ab%e3%83%a1%e3%83%8b%e3%83%a5%e3%83%bc%e3%82%92%e3%82%ab%e3%82%b9%e3%82%bf%e3%83%9e%e3%82%a4%e3%82%ba%e3%81%97%e3%81%9f%e3%81%84 (string) ,title: jQuery で、スクロール追従型にメニューをカスタマイズしたい (string) } ] ,has_more: true (boolean) ,quota_max: 300 (number) ,quota_remaining: 205 (number) - }
■取得する質問件数を増やす
次は、ページングを使って取得件数を変更しようと思います。
APIメソッドで取得できる件数は、初期状態では30件となっていますが、最大件数である100件を取得したいので、「pagesize」を100に設定します。また、次の100件を取得する場合は、「page」を2に設定します。
【リクエストURL】
- https://api.stackexchange.com/2.2/questions?page=1&pagesize=100&order=desc&sort=activity&tagged=javascript&site=ja.stackoverflow
■期間を指定して取得する
期間を指定して質問を取得します。今回は、一ヶ月以内の質問を取得するようにしました。
「fromdate」と「todate」を設定するだけです。
【リクエストURL】
- https://api.stackexchange.com/2.2/questions?page=1&pagesize=100&fromdate=1418688000&todate=1421366400&order=desc&sort=activity&tagged=javascript&site=ja.stackoverflow
■人気順で質問を取得する
apiで用意されているソートを利用することで、
日本語版StackOverflowトップページの「人気」タブと同じ結果を取得することができます。
【リクエストURL】
- https://api.stackexchange.com/2.2/questions?page=1&pagesize=100&fromdate=1418688000&todate=1421366400&order=desc&sort=hot&tagged=javascript&site=ja.stackoverflow
ソートは6種類あり日本語版StackOverflowの記述に当てはめると、下のようになります。
・activity – アクティブ
・creation – 質問日時
・votes – 票数
・hot – 人気 (トップページのタブと同じソート(minとmaxは利用できないタイプのソート)
・week – 今週 (トップページのタブと同じソート(minとmaxは利用できないタイプのソート)
・month – 今月 (トップページのタブと同じソート(minとmaxは利用できないタイプのソート)
■質問だけでなく回答も取得する
「フィルター」を利用することによって、回答の取得ができるようになっています。フィルターの「edit」ボタンをクリックして、「answer」→「body」にチェックすることで取得できるようなります。
【リクエストURL】
- https://api.stackexchange.com/2.2/questions?page=1&pagesize=100&fromdate=1418688000&todate=1421366400&order=desc&sort=hot&tagged=javascript&site=ja.stackoverflow&filter=!9YdnSM68i
また、フィルターには下記の種類が用意されているので、「withbody」を利用することでも回答内容を取得することができます。
・default : 各種の型が持っているデフォルトフィルターが適用される
・withbody : デフォルトフィルターと各種型のbodyフィールドが含まる
・none : 空が返却される
・total : totalフィールドが返却される
「withbody」を利用する場合は下記の内容となります。
【リクエストURL】
- https://api.stackexchange.com/2.2/questions?page=1&pagesize=100&fromdate=1418688000&todate=1421366400&order=desc&sort=hot&tagged=javascript&site=ja.stackoverflow&filter=withbody
「total」を利用すると下のような結果が返ってきました。
- {
total: 63 (number) - }
【リクエストURL】
- https://api.stackexchange.com/2.2/questions?page=1&pagesize=100&fromdate=1418688000&todate=1421366400&order=desc&sort=hot&tagged=javascript&site=ja.stackoverflow&filter=total
ちなみに、本家StackOverflowの利用状況をapiで問い合わせたところ、下の値が返ってきました。ユーザー数が300万人以上いるんですね。そして、1分あたりに約2件の質問と、4件の回答が投稿されているとは、スゴイです。日本語版も期待しています!!それでは!
- {
items: [ { new_active_users: 24 (number) ,total_users: 3854376 (number) ,badges_per_minute: 3.61 (number) ,total_badges: 12258396 (number) ,total_votes: 57183608 (number) ,total_comments: 40947181 (number) ,answers_per_minute: 4.31 (number) ,questions_per_minute: 2.55 (number) ,total_answers: 14656651 (number) ,total_accepted: 4958394 (number) ,total_unanswered: 2222839 (number) ,total_questions: 8681213 (number) ,api_revision: 2015.1.16.13962 (string) } ] ,has_more: false (boolean) ,quota_max: 300 (number) ,quota_remaining: 183 (number) - }
【リクエストURL】
- https://api.stackexchange.com/2.2/info?site=stackoverflow