LoginSignup
13
11

More than 5 years have passed since last update.

Qiita APIを利用して記事のViewsとストック数がまとめて取得できるAPIを作ってみた

Posted at

概要

Qiita APIを利用すると簡単に記事情報が取得できるのですが、記事のViewsやストック数は個別で取得する必要があり不便だったので、それらを含めて取得できるAPIを作ってみました。

Qiita APIについては公式ドキュメントを参考にしました。
https://qiita.com/api/v2/docs

ついでに以下の環境でデプロイ・利用ができるようにしました。
言語はPythonになります。

  • ローカル(コマンドライン実行)
  • AWS Lambda
  • Google Cloud Functions

ソースはGitHubに置いていますので、よければご参考ください。
デプロイ・利用方法も簡単にですが、READMEにまとめています。

kai-kou/extend-qiita-items-api
https://github.com/kai-kou/extend-qiita-items-api

利用方法

今回はAWS LambdaとAPI Gatewayには無料枠が設定されているので、それを利用して、関数をデプロイして、APIのエンドポイントを作成しました。

無料枠を超えたら消しますが、それまではご自由にお試しください^^

AWS Lambda 料金
https://aws.amazon.com/jp/lambda/pricing/

Amazon API Gateway の料金
https://aws.amazon.com/jp/api-gateway/pricing/

注意点

本記事で紹介しているAWS Lambdaのエンドポイントを利用する場合、アクセストークンを含める必要があるため、アクセスログなどにアクセストークンが含まれてしまいます。下手に権限がついていると悪用される恐れがありますので、不安に思われる方は、ご自身で環境構築されることをおすすめします。または試用後、すぐにアクセストークンを削除ください。

Qiitaでアクセストークンを取得する

Qiita APIから記事のViewsを取得するには認証されている必要があります。
そのため、ご自身のQiitaアカウントでアクセストークンを発行してください。

スコープは「read_qiita」が必要になります。他の権限はつけないでください。

Qiita アクセストークンの発行
https://qiita.com/settings/tokens/new

URLの設定

下記URLの[Qiitaのアクセストークン] を取得したアクセストークンに置き換えてください。

https://l0lnp1f6p2.execute-api.ap-northeast-1.amazonaws.com/default/extend_qiita_api?token=[Qiitaのアクセストークン]&page=1&per_page=20

利用できるパラメータは以下となります。

  • Token(必須): Qiitaのアクセストークン
  • page: 取得するページ数(1から100、初期値: 1)
  • per_page: 1度に取得する記事数(1から100、初期値: 20)

ブラウザからアクセスする

設定したURLでブラウザからアクセスしてみます。
スクリーンショット_2018-10-06_11_47_23.png
はい。
JSON形式で結果が返ってくるので、見やすくするにのGoogle Chromeの拡張機能「JSON Viewer」を利用しています。それでも、記事本文が含まれているので、見えにくいですね^^

tulios/json-viewer
https://github.com/tulios/json-viewer

拡張機能のインストールはこちら
https://chrome.google.com/webstore/detail/json-viewer/gbmdgpbipfallnflgajpaliibnhdgobh

コマンドラインから取得する

取得したJSONデータを加工するならコマンドラインを利用するのが良いですよね^^
curljq を利用して取得してAPIから情報を取得して加工してみます。
トークンはQiita APIと同じくリクエストヘッダーAuthorization で設定することができます。[Qiitaのアクセストークン] はご自身のアクセストークンに置き換えてください。

> curl -sSLH "Authorization: Bearer [Qiitaのアクセストークン]" \
  "https://l0lnp1f6p2.execute-api.ap-northeast-1.amazonaws.com/default/extend_qiita_api?page=1&per_page=20" \
  | jq -r ".[] | [.title, .comments_count, .likes_count, .page_views_count, .stockers_count] | @csv"

"Google Cloud Buildを利用してUnity ML-AgentsのDockerイメージを作成する(v0.5.0対応)",0,2,248,2
"PythonのPyYAMLでJSON形式の文字列が読み込めたのが不思議で調べてみた",0,1,162,0
"iPhoneでMarkdown書きたい欲求に答えてくれそうなアプリを見つけた",0,7,268,4
"Google Cloud Functions(Python)からCloud Buildでビルド実行してみる",0,4,227,2
"Vue.js+TypeScriptのコンポーネントのクラス定義ミスでハマった話",0,0,481,2
"別docker-compose同士のネットワークを繋げる方法",0,1,334,4
"Google Cloud Functions(Python)からGoogle Kubernetes Engine(GKE)のジョブを登録する",0,1,219,0
"api blueprint関連記事まとめ",0,1,241,0
"Google Kubernetes EngineでUnity ML-Agentsを動かしてみる(V0.5.0対応)",0,4,432,6
"Vue.js+TypeScriptでElement-ui利用時に単体テストが完了しなくて悩んだ話",0,2,1640,2
"Unity ML-Agents関連の記事まとめ",0,4,279,5
"Cloud FunctionsでPython利用記事まとめ",0,2,277,2
"Vue.jsのerrorHandlerがいまいちつかめない",5,1,299,3
"api blueprintでData Structuresを利用する際の注意点",0,2,136,1
"Dockerとapi blueprint+aglio+drakovを使ってAPI開発を楽にする",0,0,362,0
"Vue.jsでVuex+axiosを利用してAPIを叩く",0,10,2274,9
"api blueprintとdrakovを利用してAPIモックサーバを立ち上げる",0,3,226,0
"Vue.js+TypeScriptで開発するときの参考記事まとめ",0,108,5884,144
"api blueprintとaglioを利用してAPI仕様書を作成する",0,1,194,1
"Vue.js+TypeScriptのテストでRouterLinkがないって怒られたときの対応",0,3,1656,3

はい。
jq コマンドを利用するとJSONから値を抜き出したり、集計・整形ができて便利です。詳しくは下記が参考になります。

jq コマンドを使う日常のご紹介
https://qiita.com/takeshinoda@github/items/2dec7a72930ec1f658af

利用制限

Qiita APIをアクセストークンを用いて認証された状態で利用していますので、API利用が「1時間に1000回」という制限があります。
本APIではViews、ストック数取得のために、下記のようにAPIを利用していますので、20記事を取得する場合、トータルで41回APIを利用することになります。

  • 認証ユーザーの記事リストを取得: GET /api/v2/authenticated_user/items (1回)
  • Views取得のため記事情報を再取得: GET /api/v2/items/:item_id (20回)
  • 記事ごとのストックユーザー情報を取得: GET /api/v2/items/:item_id/stockers (20回)

認証している状態ではユーザごとに1時間に1000回まで、認証していない状態ではIPアドレスごとに1時間に60回までリクエストを受け付けます。

参考

Qiita API v2 ドキュメント
https://qiita.com/api/v2/docs

AWS Lambda 料金
https://aws.amazon.com/jp/lambda/pricing/

Amazon API Gateway の料金
https://aws.amazon.com/jp/api-gateway/pricing/

jq コマンドを使う日常のご紹介
https://qiita.com/takeshinoda@github/items/2dec7a72930ec1f658af

まとめ

Qiita APIでViews、ストック数が取得できない!キー!っとなって勢いで作ってみましたが、実装2時間、デプロイ環境構築3時間と、比較的簡単に作成することができました。各環境にデプロイするのにハンドラーを実装が地味に手間でした。

ざくっと作成したので、Qiita APIから返されるヘッダー情報を含んでいないことに今更気がついたり、Web UI作りたいなぁとか、実装やデプロイ方法もそのうちにまとめたいと思います。

13
11
0

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
13
11