アドカレ開催中の流行はコレだ

# 前置き
アドベントカレンダーももう終わりですね．
たくさんの記事が投稿されましたが，どのような投稿が多いか見てみましょう！

データは<ins>2023年12月1日 ~ 2023年12月25日 までの期間</ins>です．

# 動作環境
- Python 3.12.0
- Qiita API v2

Qiita API v2を使用する際の下準備は以下のサイトを参考にしました．

https://qiita.com/koki_develop/items/57f86a1abc332ed2185d
# ソースコード
```python
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
```

# 解説
ざっくりとコードの解説をしていきます．
## 認証設定・取得対象の設定
```python
h = {'Authorization': 'Bearer 【アクセストークン】'}
conn = http.client.HTTPSConnection("qiita.com")
url = "/api/v2/items?"
```
認証情報の設定と今回は記事の取得なので```"/api/v2/items?"```としています．詳しくは<ins>[参考文献](#参考文献)</ins>のドキュメントを参照ください．

## 記事取得期間の準備
```python
# 記事を取得する期間を指定
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```は以下のようになります．
```python
date_list = [
    '2023-12-01',
    '2023-12-02',
    '2023-12-03',
    ...
    '2023-12-25'
    ]
```

## 記事取得の検索クエリ設定
```python
query = "&query=created:>=" + target_date + "+created:<=" + target_date + "&per_page=100"
```
指定期間に投稿された記事を取得するための検索クエリです．
今回は```for```文で1日ずつ取得するようにしています．これも詳しくは<ins>[参考文献](#参考文献)</ins>のドキュメントを参照ください．

あとはなんやかんやしてタグ情報を引っ張ってきます．

# 人気投稿タグランキング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 |


# 参考文献
https://qiita.com/api/v2/docs#get-apiv2item

https://qiita.com/UmiTak/items/9bef7b43d9005827fa7d