Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
8
Help us understand the problem. What is going on with this article?
@kai_kou

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

More than 1 year has passed since last update.

概要

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作りたいなぁとか、実装やデプロイ方法もそのうちにまとめたいと思います。

8
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
kai_kou
2004年からWeb系のシステムエンジニアとして開発、運用、マネジメントを経験。現在はアイレット(クラウドパック)に所属。 べ、別にいいね貰えたからってモチベーションが上がって記事とコードの品質があがるわけじゃないんだからね///
cloudpack
Amazon Web Services (AWS) の導入設計、環境構築、運用・保守をサポートするマネジドホスティングサービス

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
8
Help us understand the problem. What is going on with this article?