LoginSignup
1
0

More than 1 year has passed since last update.

Python で Qiitaの投稿記事に対するView数を取得してみました

Posted at

概要

インフラ屋がアプリ屋のことを少しでも理解できるようにと思い、色々と実施してきた内容をQiitaに投稿しています。投稿した記事のView数等が気になってきたので、メンバー全員分を一括して取得できるようにする Python プログラムを作成しました。投稿数が多くなるとView数の取得に時間がかかるので、プログレスバー表示を追加しています。

実行環境

macOS Big Sur 11.1
python 3.8.3

個人トークンの取得

Qiitaアカウントの個人トークンを以下の手順で取得します

  1. 個人アカウントでログイン
  2. アカウント → 設定 → アプリケーション → 個人用アクセストークン → トークンを発行

実行プログラム

QiitaAPI_GetView.py
import time
import argparse
import requests
import json
from tabulate import tabulate
from tqdm import tqdm

# メンバー全員の投稿アカウント毎の個人トークンの定義
tokens = {
    "yamahiro": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    "himorishuhei": "yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy",
    "Alex-hiro": "zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz",
    'turupon': "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
}

# https のパラメータ情報
params = {
    "page": "1",
    "per_page": "100",
}


# アカウント毎に投稿した記事のListを取得
def GetPostList():

    # 投稿アカウントでの取得
    cnt = 0
    for (key, token) in zip(tokens.keys(), tokens.values()) :

        # https のヘッダー情報 with 個人トークン
        print("\n ■---■---■ 投稿者:{}".format(key))
        headers = {
            "Authorization": "Bearer " + token
        }

        # 個人トークンを利用してのその個人の投稿記事情報の取得
        res1 = requests.get('https://qiita.com/api/v2/authenticated_user/items', params=params, headers=headers)
        jsonlist = json.loads(res1.text)

        # 投稿記事毎View数の取得
        cnt += GetView(jsonlist, headers)

    return cnt


# 投稿した記事のView数の取得
def GetView(jsonlist, headers):

    # 取得する情報のキーと値の準備
    item_key=['User', 'url', 'page_views_count', 'likes_count', 'created_at', 'updated_at', 'Title']
    item_value=[]
    se=[]

    # 投稿記事毎の情報の取得
    # プログレスバーで進捗状況を表示
    for i, item in enumerate(tqdm(jsonlist)):

        # その記事情報の取得
        se.clear()
        res2 = requests.get('https://qiita.com/api/v2/items/' + item['id'], headers=headers)
        rec = json.loads(res2.text)

        # アカウント名、記事URL、View数、いいね数、作成日、更新日、記事タイトル 情報の取得
        item_value.append([rec['user']['id'], rec['url'], rec['page_views_count'], rec['likes_count'], rec['created_at'], rec['updated_at'], rec['title']])


    # json形式への変換
    rows = [dict(zip(item_key,item)) for item in item_value]

    # 取得情報の表示
    print(tabulate(rows, headers='keys'))
    print("\n   ---> 投稿数:{}\n".format(len(rows)))

    return len(rows)


if __name__ == '__main__':    
    parser = argparse.ArgumentParser(description='Qiitaの投稿記事に対するView数を取得する')
    args = parser.parse_args()

    start = time.time()
    cnt = GetPostList()
    generate_time = time.time() - start

    print("")
    print(" Qiita Post 総数 : " + str(cnt))
    print("  取得時間:{0}".format(generate_time) + " [sec] \n")

プログラムの実行

## 実行結果
$ python QiitaAPI_GetView.py                                          

 ■---■---■ 投稿者:yamahiro
100%|██████████████████████████████████████████████████████████████████████████████████████████████| 12/12 [00:03<00:00,  3.65it/s]
User      url                                                      page_views_count    likes_count  created_at                 updated_at                 Title
--------  -----------------------------------------------------  ------------------  -------------  -------------------------  -------------------------  ---------------------------------------------------------------------------------------
yamahiro  https://qiita.com/yamahiro/items/dfbdb2de55812d6b2506                 334              0  2020-12-20T05:37:36+09:00  2021-02-21T15:38:50+09:00  Cloudianオブジェクトストレージ/マルチスレッドによるファイルのアップロード
    :
yamahiro  https://qiita.com/yamahiro/items/7b8a11c773106b641795                 859              1  2020-12-18T05:38:27+09:00  2021-02-21T15:27:15+09:00  [Cloudian #1] AWS SDK for Python(boto3)で、オブジェクトストレージにアクセスしてみる

   ---> 投稿数:12


 ■---■---■ 投稿者:himorishuhei
100%|████████████████████████████████████████████████████████████████████████████████████████████████| 4/4 [00:00<00:00,  4.69it/s]
User          url                                                          page_views_count    likes_count  created_at                 updated_at                 Title
------------  ---------------------------------------------------------  ------------------  -------------  -------------------------  -------------------------  --------------------------------------------
himorishuhei  https://qiita.com/himorishuhei/items/cb53613b49846f53fb91                 174              0  2021-10-21T11:16:11+09:00  2021-10-21T11:20:50+09:00  Azure Databricksにおける日本語文字化けの対処
    :
himorishuhei  https://qiita.com/himorishuhei/items/201f7de74670aee85c6d                 718              0  2021-05-19T10:42:22+09:00  2021-05-19T10:42:22+09:00  Azure仮想マシン料金を計算してみた

   ---> 投稿数:4


 ■---■---■ 投稿者:Alex-hiro
100%|████████████████████████████████████████████████████████████████████████████████████████████████| 5/5 [00:01<00:00,  4.35it/s]
User       url                                                       page_views_count    likes_count  created_at                 updated_at                 Title
---------  ------------------------------------------------------  ------------------  -------------  -------------------------  -------------------------  -----------------------------------------------------------------
Alex-hiro  https://qiita.com/Alex-hiro/items/7f096462f4622c0ea24d                 242              2  2021-11-10T16:17:53+09:00  2021-11-10T16:17:53+09:00  Confluent Platformのデモを試してみる(Kafkaコネクト編)
    :
Alex-hiro  https://qiita.com/Alex-hiro/items/3769d6052f216791ded4                 408              5  2021-04-20T14:44:20+09:00  2021-09-01T20:07:10+09:00  Azure Kubernetes Service(ASK)上でConfluent Platformを構築してみる

   ---> 投稿数:5


 ■---■---■ 投稿者:turupon
100%|██████████████████████████████████████████████████████████████████████████████████████████████| 73/73 [00:26<00:00,  2.71it/s]
User     url                                                     page_views_count    likes_count  created_at                 updated_at                 Title
-------  ----------------------------------------------------  ------------------  -------------  -------------------------  -------------------------  -------------------------------------------------------------------------------------------------------------------------------------------------
turupon  https://qiita.com/turupon/items/b69d867e3e05b05e307e                 299              0  2021-11-12T15:11:44+09:00  2021-11-12T15:11:44+09:00  Python の DataFrame を利用してデータ抽出変換をしてみました (1レコード → 複数レコード)
    :
turupon  https://qiita.com/turupon/items/f458e37f200185843420                 573              0  2020-12-23T11:51:18+09:00  2020-12-24T11:26:42+09:00  オブジェクトストレージ Cloudian/S3 にあるJSON形式のデータから特定のデータを抽出してみます

   ---> 投稿数:73


 Qiita Post 総数 : 94
  取得時間:35.04356503486633 [sec] 

まとめ

これでメンバー全員の投稿した記事のView数をいつでも確認できるようになりました、、、、、

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0