Qiita APIで自分の記事のLGTMとViewを取得する。


概要

Qiita APIについてのメモ。
Qiita API v2ドキュメント - Qiita:Developerを見れば全てわかりますが、自分に必要なところだけメモしてます。

この記事では、QiitaAPIの以下がわかります。

  • API利用制限について
  • LGTMの履歴の取得
  • 自分の全記事のView数の取得
  • アクセストークンの発行と使い方

APIの利用制限

認証ユーザー 1時間に1000回
認証なし 1時間に60回

Qiita API v2の使い方

LGTMの取得

ドキュメント

LTGM取得APIは以下

GET /api/v2/items/:item_id/likes HTTP/1.1

実践

この記事のLGTMを取ります。Swift Combine初めの1歩 - Qiita

記事URLはhttps://qiita.com/Sho-heikun/items/cc28fc8a41b9932ecfb1となっていて、末尾のIDがitem_idです。

よってURLは以下になります。

https://qiita.com/api/v2/items/cc28fc8a41b9932ecfb1/likes

こちらをブラウザのURLに貼り付ければ、結果を見られます。

LGTMの押された時間のみ表示

レスポンスの定義は以下となっており、userのデータが含まれます。

HTTP/1.1 200
Content-Type: application/json

[
  {
    "created_at": "2000-01-01T00:00:00+00:00",
    "user": {
      "description": "Hello, world.",
      "facebook_id": "qiita",
      "followees_count": 100,
      "followers_count": 200,
      "github_login_name": "qiitan",
      "id": "qiita",
      "items_count": 300,
      "linkedin_id": "qiita",
      "location": "Tokyo, Japan",
      "name": "Qiita キータ",
      "organization": "Increments Inc",
      "permanent_id": 1,
      "profile_image_url": "https://s3-ap-northeast-1.amazonaws.com/qiita-image-store/0/88/ccf90b557a406157dbb9d2d7e543dae384dbb561/large.png?1575443439",
      "team_only": false,
      "twitter_screen_name": "qiita",
      "website_url": "https://qiita.com"
    }
  }
]

今回はuserの情報は不要のため、jqでfilterします。

$ curl -s 'https://qiita.com/api/v2/items/cc28fc8a41b9932ecfb1/likes' | jq -r ".[].created_at"
2020-10-01T16:56:51+09:00
2020-10-01T02:33:46+09:00
2020-10-01T02:30:21+09:00
2020-10-01T00:43:09+09:00
2020-10-01T00:09:44+09:00
2020-09-30T12:54:58+09:00
2020-09-30T10:28:42+09:00
2020-09-30T09:15:20+09:00
2020-09-29T18:29:32+09:00
2020-09-29T17:59:22+09:00
2020-09-29T17:10:01+09:00
2020-09-29T16:10:12+09:00
2020-09-29T15:42:24+09:00
2020-09-29T14:03:53+09:00
2020-09-29T11:34:36+09:00
2020-09-29T10:42:48+09:00
2020-09-29T09:25:19+09:00
2020-09-28T23:52:41+09:00
2020-09-28T23:41:49+09:00
2020-09-28T23:35:23+09:00

無事取得できましたが、実はこちらは20件しか表示されていません。

per_pageの指定でより多くの件数を取得できます。

注意点として、per_pageは100が最大のため、100以上の場合はpageで調整します。

pageの初期値は1、pageの最大値は100に設定されています。また、per_pageの初期値は20、per_pageの最大値は100に設定されています。
[ページネーション]より(https://qiita.com/api/v2/docs#%E3%83%9A%E3%83%BC%E3%82%B8%E3%83%8D%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3)

https://qiita.com/api/v2/items/cc28fc8a41b9932ecfb1/likes?per_page=100

View数の取得

ドキュメント

View数を取得できるのは記事取得API

GET /api/v2/items/:item_id HTTP/1.1

実践

先ほどのLGTMのurlを少し変えるだけです。

https://qiita.com/api/v2/items/cc28fc8a41b9932ecfb1

しかし、ユーザ認証をしていないとView数を表すpage_views_countnullになります。

アクセストークン発行方法

アクセストークンを発行し認証ユーザーとしてAPIアクセスします。
ユーザの管理画面で発行が可能です。

一番下の「新しくトークンを発行する」を押してください。

  • 発行されたトークンは再表示できないことに注意してください。
  • トークンの削除は同じページで削除するボタンを押せば簡単にできます。

アクセストークン付きでAPI実施


curl -sH 'Authorization: Bearer 【アクセストークンを入れる】' https://qiita.com/api/v2/items/cc28fc8a41b9932ecfb1

記事のViewを取得する

こんな感じで記事のView数とLGTM数を取得できます。

curl -sH 'Authorization: Bearer 【アクセストークンを入れる】' https://qiita.com/api/v2/items/cc28fc8a41b9932ecfb1 | jq ".page_views_count, .likes_count"

自分の全ての記事のView数を取得する

最終的に以下のコードになりました。

curl -sH 'Authorization: Bearer 【アクセストークンを入れる】' \
"https://qiita.com//api/v2/authenticated_user/items?page=1&per_page=3" \
| jq -r ".[].id" \
| xargs -P 3 -I {id} curl -sH 'Authorization: Bearer 【アクセストークンを入れる】' https://qiita.com/api/v2/items/{id} \
| jq '"\(.title), VIEW: \(.page_views_count),  LGTM: \(.likes_count)"'

自分の記事の取得APIpage_views_countはあるのですが、nullです。
なので、1つ1つのidを入力に先ほどの記事取得APIでView数を取得します。

上を叩くと以下のような結果になります。

"Swift enum型を復習する, VIEW: 115,  LGTM: 3"
"Swift Combine初めの1歩, VIEW: 1198,  LGTM: 28"
"iOSDC 2020 1日目に参加しました。, VIEW: 196,  LGTM: 5"

まとめ

良いQiitaライフを!

参考記事