必要な準備:Qiitaのアクセストークンを取得する
Step1. 下記にアクセス
Step2. 個人用アクセストークン
からトークンを発行
必要な権限(この記事ではread_qiita
を使用します)を選択し、トークンを発行します。
Step3. トークンを環境変数に埋め込む
コマンド例:
export QIITA_ACCESS_TOKEN="your_access_token"
- APIキーは、流出厳禁です。ソースコードに直接トークンを入力することは避けて、環境変数に埋め込みましょう。
- 流出した恐れがある場合は、先ほどトークンを発行したページから削除できます。
実装: Qiita APIを使って記事の「タイトル」「いいね数」「ストック数」を取得してCSVに書き出す
以下のコードは、Qiita APIを利用してユーザーの記事データを取得し、「タイトル」「いいね数」「ストック数」をCSVファイルに書き出します。
import csv
import os
import requests
def get_qiita_access_token() -> str:
"""
環境変数からQiitaのアクセストークンを取得します。
Returns:
str: Qiitaのアクセストークン
"""
token = os.getenv("QIITA_ACCESS_TOKEN")
if not token:
raise ValueError("環境変数 'QIITA_ACCESS_TOKEN' が設定されていません。")
return token
def fetch_recent_articles(user_id: str, count: int = 10) -> list[dict]:
"""
指定したユーザーの直近の記事を取得します。
Parameters:
user_id (str): ユーザーID
count (int): 取得する記事の数(デフォルトは10)
Returns:
list[dict]: 記事情報のリスト
"""
url = f"https://qiita.com/api/v2/users/{user_id}/items"
headers = {"Authorization": f"Bearer {get_qiita_access_token()}"}
params = {"page": 1, "per_page": count}
response = requests.get(url, headers=headers, params=params)
response.raise_for_status()
return response.json()
def fetch_stock_count(item_id: str) -> int:
"""
指定した記事のストック数を取得します。
Parameters:
item_id (str): 記事のID
Returns:
int: ストック数
"""
url = f"https://qiita.com/api/v2/items/{item_id}/stockers"
headers = {"Authorization": f"Bearer {get_qiita_access_token()}"}
response = requests.get(url, headers=headers, params={"page": 1, "per_page": 100})
response.raise_for_status()
return len(response.json())
def write_to_csv(articles: list[dict], output_file: str):
"""
記事情報をCSVファイルに書き出します。
Parameters:
articles (list[dict]): 記事情報のリスト
output_file (str): 書き出すCSVファイル名
"""
with open(output_file, mode="w", newline="", encoding="utf-8") as file:
writer = csv.writer(file)
# ヘッダー行の書き出し
writer.writerow(["タイトル", "いいね数", "ストック数"])
# 各記事の情報を行として書き出し
for article in articles:
title = article["title"]
likes_count = article["likes_count"]
stocks_count = fetch_stock_count(article["id"])
writer.writerow([title, likes_count, stocks_count])
def main():
user_id = "your_id_here" # QiitaのユーザーID
output_file = "qiita_articles.csv"
# 記事データを取得
articles = fetch_recent_articles(user_id)
# CSVファイルに書き出し
write_to_csv(articles, output_file)
print(f"データが {output_file} に書き出されました。")
if __name__ == "__main__":
main()
$ python src/main.py
データが qiita_articles.csv に書き出されました。
実行後、カレントディレクトリに qiita_articles.csv
というCSVファイルが生成されます。
より多くの記事を対象にする場合は、下記のように取得する記事数を明示的に指定してください。
※デフォルトでは10件取得します。
# 記事データを取得
articles = fetch_recent_articles(user_id, 20)
参考にしたもの