Qiita APIを公式ドキュメントだけ見て作ってみた


動機

これまでAPI実装といったら適当なサイトからコピペしてました。楽だし早い。
認証周りとか公式ドキュメントだけだと、自分の読解力では意味が分からない。
しかし!人生一度くらいは自分でやってみたい!
のでやってみます。

ドキュメント

APIドキュメント

1.認証認可を取る

Qiita::TeamのAPI、またはQiitaのGETリクエスト以外のAPIを利用するには、アクセストークンをリクエストに含める必要があります。アクセストークンは、後述するOAuthを利用した認可フローか、ユーザの管理画面から発行できます。

ユーザーの管理画面の方からやってみる。
OAuthを利用した認可フローは面倒そうなので。

1-1.個人用アクセストークンというやつ

1-2.スコープを設定

1-3.できた!

2.APIを早速使ってみる

2-1.アクセストークンの使い方はかんたん

アクセストークンは、以下のようにAuthorizationリクエストヘッダに含められます。

Authorization: Bearer 1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcd

2-2.ドキュメントに書いてあるAPIを使う

GET /api/v2/items/:item_id/likes
記事につけられた「いいね!」を作成日時の降順で返します。

GET /api/v2/items/:item_id/likes HTTP/1.1
Host: api.example.com

2-3.curlで試す

$ curl -H 'Authorization: Bearer xxxxxxxxx' https://qiita.com/api/v2/items/2fc47ea31c2de9037278/likes
[]

そうでした。私の記事に「いいね!」などありませんでした。。。
どの記事も空のjsonが返却されます。

3.気を取り直してAPIを使う

3-1.自分の記事を取得するAPI

GET /api/v2/authenticated_user/items
認証中のユーザの記事の一覧を作成日時の降順で返します。

  • page
    • ページ番号 (1から100まで)
    • Example: 1
    • Type: string
    • Pattern: /^[0-9]+$/
    • per_page
  • 1ページあたりに含まれる要素数 (1から100まで)
    • Example: 20
    • Type: string
    • Pattern: /^[0-9]+$/
    • GET /api/v2/authenticated_user/items?page=1&per_page=20 HTTP/1.1
    • Host: api.example.com

3-2.curlでやってみる。

$ curl -H 'Authorization: Bearer xxxxxx' https://qiita.com/api/v2/authenticated_user/items?page=1&per_page=1
[{"rendered_body":"\n\u003ch1\u003e\n\u003cspan id=\"rails-dbseedはマスターデータ投入でちょっと面倒だった\" 
・・・

取れた!けど見にくい。

3-3.curl + python -mjson.tool + grep で閲覧数を取る

"https://xxxxx" みたいにURLをダブルクオーテーションで囲わないと| python -mjson.toolNo JSON object could be decodedエラーが出る。

$ curl -H 'Authorization: Bearer xxxx' "https://qiita.com/api/v2/authenticated_user/items?page=1&per_page=100" |python -mjson.tool|grep 'page_views_count'
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 98154    0 98154    0     0   502k      0 --:--:-- --:--:-- --:--:--  504k
        "page_views_count": null,
        "page_views_count": null,
        "page_views_count": null,
        "page_views_count": null,
        "page_views_count": null,
        "page_views_count": null,
        "page_views_count": null,
        "page_views_count": null,
        "page_views_count": null,

ぐぬぬ。
ここでドキュメントしかみないことは諦めた。

3-4.できた

参考:自分の Qiita 記事の閲覧数を取得して報告する BOT を作ってみた

curl -H "Authorization: Bearer xxxxxx" "https://qiita.com/api/v2/items/2fc47ea31c2de9037278"  |python -mjson.tool | grep 'page_views'
    "page_views_count": 98,

振り返り

  • 良かった点
    • google先生とQiitaの人たちの偉大さを実感できた
  • 反省
    • 自分の無力さを思い知った
    • ちょっと息抜き程度に考えてたら1.5時間くらいかかった