7
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

QiitaAPIAdvent Calendar 2024

Day 8

Qiita APIを使って記事の「タイトル」「いいね数」「ストック数」を取得してCSVに書き出す

Posted at

必要な準備: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ファイルが生成されます。

image.png

より多くの記事を対象にする場合は、下記のように取得する記事数を明示的に指定してください。
※デフォルトでは10件取得します。

# 記事データを取得
articles = fetch_recent_articles(user_id, 20)

参考にしたもの

7
1
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
7
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?