前置き
アドベントカレンダーももう終わりですね.
たくさんの記事が投稿されましたが,どのような投稿が多いか見てみましょう!
データは2023年12月1日 ~ 2023年12月25日 までの期間です.
動作環境
- Python 3.12.0
- Qiita API v2
Qiita API v2を使用する際の下準備は以下のサイトを参考にしました.
ソースコード
import collections
import datetime
import http.client
import pandas as pd
import math
import time
h = {'Authorization': 'Bearer 【アクセストークン】'}
conn = http.client.HTTPSConnection("qiita.com")
url = "/api/v2/items?"
# 記事を取得する期間を指定
start = '2023-12-01'
end = '2023-12-25'
# 日付をリスト化
date_list = [d.strftime('%Y-%m-%d')
for d in pd.date_range(start, end, freq='D')]
tags = []
wait_time = 3600
for target_date in date_list:
# 対象の検索日を取得
query = "&query=created:>=" + target_date + "+created:<=" + target_date + "&per_page=100"
# 検索で指定した日に作成された記事数を取得
conn.request("GET", url + query, headers=h)
res = conn.getresponse()
if res.status == 403:
after_time = datetime.datetime.fromtimestamp(time.time() + wait_time)
print("アクセス制限です.少なくとも {} までは待機します.".format(after_time.strftime('%Y/%m/%d %H:%M:%S')))
time.sleep(wait_time)
res = conn.getresponse()
res.read()
total_count = int(res.headers['Total-Count'])
# 取得した記事数をもとにリクエスト回数を算出
page_count = math.ceil(total_count / 100)
print(target_date + "に作成されたデータを取得するのに必要なリクエスト回数は" + str(page_count) + "回です.")
# 各記事のタグ情報取得・
for p in range(1, page_count+1):
page = "page=" + str(p)
conn.request("GET", url + page + query, headers=h)
res = conn.getresponse()
data = res.read().decode("utf-8")
df = pd.read_json(data)
for tag_list in df["tags"]:
for tag in tag_list:
tags.append(tag["name"])
rank = 10
ctags = collections.Counter(tags)
for tag in ctags.most_common():
rank -= 1
print(tag)
if rank == 0:
break
解説
ざっくりとコードの解説をしていきます.
認証設定・取得対象の設定
h = {'Authorization': 'Bearer 【アクセストークン】'}
conn = http.client.HTTPSConnection("qiita.com")
url = "/api/v2/items?"
認証情報の設定と今回は記事の取得なので"/api/v2/items?"
としています.詳しくは参考文献のドキュメントを参照ください.
記事取得期間の準備
# 記事を取得する期間を指定
start = '2023-01-01'
end = '2023-12-25'
# 日付をリスト化
date_list = [d.strftime('%Y-%m-%d')
for d in pd.date_range(start, end, freq='D')]
指定期間の日付を全てリストに格納します.date_list
は以下のようになります.
date_list = [
'2023-12-01',
'2023-12-02',
'2023-12-03',
...
'2023-12-25'
]
記事取得の検索クエリ設定
query = "&query=created:>=" + target_date + "+created:<=" + target_date + "&per_page=100"
指定期間に投稿された記事を取得するための検索クエリです.
今回はfor
文で1日ずつ取得するようにしています.これも詳しくは参考文献のドキュメントを参照ください.
あとはなんやかんやしてタグ情報を引っ張ってきます.
人気投稿タグランキングTOP10発表
さあさあ,集計結果を発表します!
順位 | タグ名 | 投稿数 |
---|---|---|
1位 | Python | 1221 |
2位 | AWS | 887 |
3位 | 初心者 | 728 |
4位 | AdventCalendar2023 | 660 |
5位 | JavaScript | 580 |
6位 | ChatGPT | 426 |
7位 | ポエム | 369 |
8位 | React | 352 |
9位 | TypeScript | 350 |
10位 | Unity | 272 |
参考文献