QiitaAPI

Qiita APIのGET /api/v1/users/:user_id/items を GET /api/v2/itemsに移行する

More than 1 year has passed since last update.

はじめに

不特定多数のQiitaユーザの記事取得にGET /api/v1/users/:user_id/itemsを使っていたが、2017年9月中にv1が廃止になるとのことでv2でそれっぽいのを探したところ、GET /api/v2/itemsが使えることがわかった。追記: /api/v2/users/:user_id/items が必要十分だった。

なぜそもそもv1を使っていた?

GET /api/v2/authenticated_user/items が既にあったが、これは使えねーなと思ってv1を使っていたが、v1が廃止となってよくよく調べるとGET /api/v2/itemsが使えそうだった。

  • GET /api/v2/authenticated_user/items
    • トークンが必要っぽいので認可済みユーザの記事でないと無理なのでこれは使わない
  • GET /api/v2/items
    • パラメータなしだと全ユーザ対象だがパラメータ query でユーザ名を指定すればいけそう
    • 例: "query":"qiita user:yimajo"
  • GET /api/v2/users/:user_id/items
    • トークンが必要なくユーザの記事が取得できる

試す

access_tokenを利用した際に限定共有を取得しないで済むか

GET /api/v2/itemsで利用制限をゆるくしたいためaccess_tokenを使いたいが限定共有記事を取得したくないのでcURLで試した(GET /api/v1/users/#{qiita_id}/itemsでは限定共有記事を取得していた)

curl -X GET https://qiita.com/api/v2/items -d '{"per_page":"10", "query":"qiita user:yimajo"}' -H "Content-Type: application/json" -H ‘Authorization: Bearer ここがトークン‘
  • 想定してた自分の記事が取得できた

その他注意事項

APIの利用制限が変わっている

v2ではaccess_tokenが無い/無効な場合に同一IPアドレスから1時間に60回までしかリクエストできない。つまり一回のリクエストで60sec待たなければいけなくなる。

そのため、最初は2secだけ余裕をもたせた62secだけsleepしてリクエストしていたがそれでも403 Rate Limitになってしまった。さらに余裕を持たせて70secに変更して運用することにした。