概要
インフラ屋がアプリ屋のことを少しでも理解できるようにと思い、色々と実施してきた内容をQiitaに投稿しています。投稿した記事のView数等が気になってきたので、メンバー全員分を一括して取得できるようにする Python プログラムを作成しました。投稿数が多くなるとView数の取得に時間がかかるので、プログレスバー表示を追加しています。
実行環境
macOS Big Sur 11.1
python 3.8.3
個人トークンの取得
Qiitaアカウントの個人トークンを以下の手順で取得します
- 個人アカウントでログイン
- アカウント → 設定 → アプリケーション → 個人用アクセストークン → トークンを発行
実行プログラム
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数をいつでも確認できるようになりました、、、、、