#この記事の目的
なんとなく, Qiitaの記事データを分析してみたくなったので, APIをさわってみました.
記事情報だけ取得できれば良いので, 今回は認証の必要はないです.
大きく2つ試しました.
1.ユーザー情報一覧の取得
2.特定ユーザーの記事一覧の取得
順に説明します.
準備
ライブラリを読み込んでおきます.
import numpy as np
import pandas as pd
import requests
import json
from pandas.io.json import json_normalize
一番下のjson_normalize
というものは, APIで返ってきたjson形式のデータをpandasのデータフレームの形式に整形してくれる便利なやつです.
1.ユーザー情報一覧の取得
Qiita API v2 ドキュメントのサンプルには,
GET /api/v2/users?page=1&per_page=20
などと書いてあります.
つまり, 以下のようなURLにアクセスすれば情報を得られます.
https://qiita.com/api/v2/users?page=1&per_page=20
ここで, per_page
が一度に取得するユーザー数で, page
がその何番目かを表しています. 例えば1000件のユーザー情報が欲しければ, per_page=100(上限)
として最低でも10回のリクエストを送る必要があります.
ということで, コードにすると, 以下のようになります.
n = 333 # 取得したいユーザー数
per_page = 100
df = pd.DataFrame()
for page in range(1, int(n/per_page)+2): #多めに取得しておく
base_url = "https://qiita.com/api/v2/users?page={0}&per_page={1}"
url = base_url.format(page, per_page)
response = requests.get(url)
res = response.json()
tmp_df = json_normalize(res)
df = pd.concat([df, tmp_df])
df.reset_index(drop=True, inplace=True)
df = df.iloc[:n,:] #多めに取得した分削除
2.特定ユーザーの記事一覧の取得
Qiita API v2 ドキュメントのサンプルには,
GET /api/v2/items?page=1&per_page=20&query=qiita+user%3Ayaotti
などと書いてあります.
つまり, 以下のようなURLにアクセスすれば情報を得られます.
https://qiita.com/api/v2/items?page=1&per_page=20&query=qiita+user%3Ayaotti
ここで, 新たに, query
が登場しましたが, これはブラウザで検索するときと同様の検索オプションが使えます. ただし, :
がURLでは%3A
という表記にエンコードされている点は注意です.
これを使うことで, query=user%3A〇〇〇
という感じで特定ユーザーの情報を取得します.
ということで, コードは以下のようになります.
n = 125 # 取得したい記事数
user = "yaotti"
per_page = 100
df = pd.DataFrame()
for page in range(1, int(n/per_page)+2): #多めに取得しておく
base_url = "https://qiita.com/api/v2/items?page={0}&per_page={1}&query=user%3A{2}"
url = base_url.format(page, per_page, user)
response = requests.get(url)
res = response.json()
tmp_df = json_normalize(res)
df = pd.concat([df, tmp_df])
df.reset_index(drop=True, inplace=True)
df = df.iloc[:n,:] #多めに取得した分削除
以上!
参考
Qiita API v2 ドキュメント
pandasのjson_normalizeで辞書のリストをDataFrameに変換