Qiita に投稿した記事の VIEW数 、いいねの数 、ストックされた数 を CSV に出力する方法（「Python + Qiita API v2」で作成）（100件以上）

# 前書き
以前、「[Qiita に投稿した記事の VIEW数 、いいねの数 、ストックされた数 を CSV に出力する方法（「Python + Qiita API v2」で作成）](https://qiita.com/yasushi-jp/items/5f10d5dcf21af07085a4 "Qiita に投稿した記事の VIEW数 、いいねの数 、ストックされた数 を CSV に出力する方法（「Python + Qiita API v2」で作成）")」で、**Python** と **Qiita API v2** を使用して、Qiita に投稿した自分の記事の VIEW数 、いいねの数 、ストックされた数 を CSV に出力する方法を紹介しました。しかし、記事が **100件** を超えると取得できない作りになっていたので、今回は記事が **100件** を超えても取得できるように修正した内容を紹介します。

# 実行した環境
+ Windows 10（64bit）
+ Python 3.6.4 :: Anaconda, Inc.

# 100件超え対応後のプログラム

### Python のプロラム
**Python** から **Qiita API v2** を使用して、タイトル、 VIEW数 、いいねの数 、ストック数を取得し、標準出力にCSV形式で一覧表示させるプログラム（**100件**超え対応版）です。

下記プログラムソースの`xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx`の部分には、自分のアクセストークンで置き換えてください。
アクセストークンは Qiitaページの「設定」－「アプリケーション」－「個人用アクセストークン」から取得可能です。

```python:getview.py
# -*- coding: utf-8 -*-
"""
Created on Thu Nov 17 23:12:00 2022

@author: yasushi
"""

import requests
import json

page = 1
per_page = 100
total_views_cnt = 0
total_likes_cnt = 0
total_stocks_cnt = 0

print("作成日,タイトル,URL,ビューカウント,いいねカウント,ストックカウント")

while True:
    url = 'https://qiita.com/api/v2/authenticated_user/items'
    headers = {"content-type" : "application/json", "Authorization" : "Bearer xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"}
    params = { "page" : str(page), "per_page" : str(per_page)}
    res = requests.get(url, headers=headers, params=params)
    list = res.json()
    if len(list) == 0:
        break
    for item in list:
        item_id = item['id']
        title = item['title']
        likes_cnt = item['likes_count']
        create_date = item['created_at']
        item_url = item['url']

        total_likes_cnt += likes_cnt

        url = 'https://qiita.com/api/v2/items/' + item_id
        res = requests.get(url, headers=headers)
        json = res.json()
        views_cnt = json['page_views_count']
        total_views_cnt += views_cnt

        url = 'https://qiita.com/api/v2/items/' + item_id + '/stockers'
        res = requests.get(url, headers=headers)
        users = res.json()
        stocks_cnt = len(users)
        total_stocks_cnt += stocks_cnt

        print(create_date + ", " + title + ", " + item_url + ", " + str(views_cnt) + ", " + str(likes_cnt) + ", " + str(stocks_cnt))

    page += 1

print("合計, , , " + str(total_views_cnt) + ", " + str(total_likes_cnt) + ", " + str(total_stocks_cnt))
```
前回との違いは、`while`文でループさせ、`page`をインクリメントさせているところです。`list`が **0件** だった場合、`while`文を抜けるようにしています。

### 起動用のbat
インストールされている **Python** で、先程作成した`getview.py`を呼び出し、結果を日付時刻付きのファイル（`viewcount_yyyyMMddHHmmss`）にリダイレクトしています。
「`C:\DK\Anaconda3\envs\tf_env`」の部分は、**Python** をインストールしたディレクトリに置き換えてください。

```bat:getview.bat
@echo off
set PY_PATH=C:\DK\Anaconda3\envs\tf_env

set yyyy=%date:~0,4%
set mm=%date:~5,2%
set dd=%date:~8,2%
set time2=%time: =0%
set hh=%time2:~0,2%
set mn=%time2:~3,2%
set ss=%time2:~6,2%
set filename=%yyyy%%mm%%dd%-%hh%%mn%%ss%

%PY_PATH%\python getview.py > viewcount_%filename%.csv
pause
```

# 実行
上記で作成した`getview.bat`を実行（ダブルクリック）すると、`viewcount_yyyyMMdd_HHmmss.csv`が作成されます。

# 参考
> [Qiita API v2ドキュメント](https://qiita.com/api/v2/docs "Qiita API v2ドキュメント")
> [Qiita に投稿した記事の VIEW数 、いいねの数 、ストックされた数 を CSV に出力する方法（「Python + Qiita API v2」で作成）](https://qiita.com/yasushi-jp/items/5f10d5dcf21af07085a4 "Qiita に投稿した記事の VIEW数 、いいねの数 、ストックされた数 を CSV に出力する方法（「Python + Qiita API v2」で作成）")

---
以上