Python Qiita API を使ってキーワード検索


Python Qiita API を使ってキーワード検索

Qiita API ドキュメント
https://qiita.com/api/v2/docs

アクセストークンの取得

設定 > アプリケーションからアクセストークンを発行
https://qiita.com/settings/applications

検索クエリ

page ... ページ番号(1~100)
per_page ... 1ページあたりに含まれる要素数
query ... 検索クエリ
検索オプション ... https://help.qiita.com/ja/articles/qiita-search-options

例:PHPタグを含み作成日付2021-02-09の投稿を取得
注)日付検索条件はUTC時刻を元に行われる模様

https://qiita.com/api/v2/items?page=1&per_page=100&query=tag:PHP+created:>=2021-02-09+created:<=2021-02-09

Python取得

QIITA_ACCESS_TOKENは アクセストークンの取得 で取得
リクエストして結果をJsonで取得
DataFrameに保存

search = qiita.get_search("Python", "2021-02-08", "2021-02-10")
QIITA_ACCESS_TOKEN = ""
PER_PAGE = 100


def get_search(tag: str, start_date: str, end_date: str, count: int = 1000):

    df = pd.DataFrame(
        columns=[
            "created_at",
            "id",
            "title",
            "likes_count",
            "url",
            "user_id",
            "user_name",
        ]
    )

    loop = ceil(count / PER_PAGE)
    page = 1

    for v in range(loop):

        page += v
        per_page = PER_PAGE if count - len(df) > PER_PAGE else count - len(df)

        url = (
            f"https://qiita.com/api/v2/items?page={page}&per_page={per_page}&"
            f"query=tag:{tag}+created:>={start_date}+created:<={end_date}"
        )
        headers = {"Authorization": f"Bearer {QIITA_ACCESS_TOKEN}"}
        response = requests.get(url, headers=headers)
        text = json.loads(response.text)

        if not text:
            break

        for v2 in text:
            df = df.append(
                {
                    "created_at": v2["created_at"],
                    "id": v2["id"],
                    "title": v2["title"],
                    "likes_count": v2["likes_count"],
                    "url": v2["url"],
                    "user_id": v2["user"]["id"],
                    "user_name": v2["user"]["name"],
                },
                ignore_index=True,
            )

    return df

結果

                   created_at                    id  ...              user_id       user_name
0   2021-02-10T22:39:34+09:00  f64d7918bb3e39e897a4  ...          tancematrix
1   2021-02-10T22:33:24+09:00  7c1ffc2112252730743c  ...           k_yokozuka  yokozuka kento
2   2021-02-10T22:32:07+09:00  6f2213e9ecfcfc37d5b6  ...           k_yokozuka  yokozuka kento
3   2021-02-10T22:02:35+09:00  28f12e509f10f35fd9cb  ...       RyosukeHattori          Raylan
4   2021-02-10T21:27:46+09:00  6a390e86ff8bd22aa5e8  ...             AKpirion
..                        ...                   ...  ...                  ...             ...
87  2021-02-08T11:26:30+09:00  dae3d01cb1ff6ecb074e  ...       ohisama@github
88  2021-02-08T11:02:58+09:00  aaeb0dccbb30e17bfba9  ...                etern
89  2021-02-08T10:58:13+09:00  2d14c71178f834dfc985  ...       ohisama@github
90  2021-02-08T10:13:23+09:00  1f90724a797f1b63a9c9  ...  morita-toyscreation  TAKASHI MORITA
91  2021-02-08T10:00:57+09:00  ff32350710617bd50544  ...               yudwig

Qiita投稿を取得できました
いいね!と思ったら LGTM お願いします

【PR】週末ハッカソンというイベントやってます! → https://weekend-hackathon.toyscreation.jp/about/