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

# 概要

Qiita APIについてのメモ。
[Qiita API v2ドキュメント - Qiita:Developer](https://qiita.com/api/v2/docs)を見れば全てわかりますが、自分に必要なところだけメモしてます。

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

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

# APIの利用制限

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


# Qiita API v2の使い方

## LGTMの取得

### ドキュメント

[LTGM取得API](https://qiita.com/api/v2/docs#lgtm)は以下

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

### 実践

この記事のLGTMを取ります。[Swift Combine初めの1歩 - Qiita](https://qiita.com/Sho-heikun/items/cc28fc8a41b9932ecfb1)

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

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

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

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


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

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

```json
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](https://qiita.com/api/v2/docs#get-apiv2itemsitem_id)

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

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

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

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

## アクセストークン発行方法
アクセストークンを発行し認証ユーザーとしてAPIアクセスします。
[ユーザの管理画面](https://qiita.com/settings/applications)で発行が可能です。

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

![スクリーンショット 2020-10-03 10.10.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199256/ce740a38-a03c-1ada-302a-c1e80d33215f.png)

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

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

```bash

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

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

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

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

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

```bash
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)"'

```

[自分の記事の取得API](authenticated_user)の`page_views_count`はあるのですが、`null`です。
なので、１つ１つのidを入力に先ほどの記事取得APIでView数を取得します。

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

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


# まとめ
良いQiitaライフを!

# 参考記事
* [Qiita API v2ドキュメント - Qiita:Developer](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)
* [Qiita APIで記事のLGTM数と、View数を習得する - Qiita](https://qiita.com/seigot/items/14f507115256dfbf2784)