【Python】Qiita API 記事の閲覧数を集計
Qiitaは、エンジニアやプログラマー向けの情報共有プラットフォームとして広く利用されています。
自身の投稿記事のパフォーマンスを把握するために、記事の閲覧数を集計することは非常に有益です。
本記事では、Qiita APIを利用して自身の投稿記事の総閲覧数とトップ5の閲覧数を取得するPythonスクリプトについて、詳細に解説します。
スクリプトの概要
以下に示すスクリプトは、Qiita APIを使用して認証済みユーザーの投稿記事を取得し、各記事の閲覧数を集計します。
最終的に、総記事数、総閲覧数、および閲覧数の多い上位10記事をコンソールに表示します。
import requests
import time
def get_qiita_articles(access_token):
# 初期設定
base_url = "https://qiita.com/api/v2/authenticated_user/items"
headers = {
"Authorization": f"Bearer {access_token}"
}
all_articles = []
page = 1
per_page = 100 # 1ページあたりの最大記事数
while True:
# APIリクエストパラメータ
params = {
"page": page,
"per_page": per_page
}
# APIリクエスト実行
response = requests.get(base_url, headers=headers, params=params)
# レスポンスのステータスコードチェック
if response.status_code != 200:
print(f"Error: Status code {response.status_code}")
break
# 記事データの取得
articles = response.json()
# 記事がない場合は終了
if not articles:
break
all_articles.extend(articles)
# 総記事数を取得
total_count = int(response.headers.get('Total-Count', 0))
# 全ての記事を取得済みかチェック
if len(all_articles) >= total_count:
break
page += 1
# API制限を考慮して少し待機
time.sleep(1)
return all_articles
def calculate_total_views(articles):
total_views = 0
article_views = []
for article in articles:
views = article['page_views_count']
title = article['title']
created_at = article['created_at']
article_views.append({
'title': title,
'views': views,
'created_at': created_at
})
total_views += views
return total_views, article_views
def main():
# アクセストークンを設定
access_token = "YOUR_ACCESS_TOKEN" # ここに自分のアクセストークンを入力
# 記事データの取得
articles = get_qiita_articles(access_token)
# 閲覧数の計算
total_views, article_views = calculate_total_views(articles)
# 結果の表示
print(f"総記事数: {len(articles)}")
print(f"総閲覧数: {total_views:,}")
# 閲覧数トップ10の記事を表示
print("\n閲覧数トップ10の記事:")
sorted_articles = sorted(article_views, key=lambda x: x['views'], reverse=True)
for i, article in enumerate(sorted_articles[:10], 1):
print(f"{i}. {article['title']}: {article['views']:,} views ({article['created_at']})")
if __name__ == "__main__":
main()
スクリプトの詳細解説
1. 必要なライブラリのインポート
import requests
import time
-
requests
: HTTPリクエストを簡単に送信できるライブラリです。Qiita APIへのリクエストに使用します。 -
time
: 処理の待機時間を設けるために使用します。APIのレート制限を考慮する際に役立ちます。
2. Qiita APIから記事を取得する関数
def get_qiita_articles(access_token):
# 初期設定
base_url = "https://qiita.com/api/v2/authenticated_user/items"
headers = {
"Authorization": f"Bearer {access_token}"
}
all_articles = []
page = 1
per_page = 100 # 1ページあたりの最大記事数
while True:
# APIリクエストパラメータ
params = {
"page": page,
"per_page": per_page
}
# APIリクエスト実行
response = requests.get(base_url, headers=headers, params=params)
# レスポンスのステータスコードチェック
if response.status_code != 200:
print(f"Error: Status code {response.status_code}")
break
# 記事データの取得
articles = response.json()
# 記事がない場合は終了
if not articles:
break
all_articles.extend(articles)
# 総記事数を取得
total_count = int(response.headers.get('Total-Count', 0))
# 全ての記事を取得済みかチェック
if len(all_articles) >= total_count:
break
page += 1
# API制限を考慮して少し待機
time.sleep(1)
return all_articles
主な機能とポイント
-
認証ヘッダーの設定:
Authorization
ヘッダーにBearerトークンを設定し、認証済みユーザーとしてAPIにアクセスします。 -
ページネーションの処理: Qiita APIはページネーションを採用しており、
page
とper_page
パラメータを使用して複数ページにわたるデータを取得します。最大で1ページあたり100件のデータを取得可能です。 -
ループによる全記事の取得: 取得した記事数が総記事数に達するまで、ループを継続して全ての記事を取得します。
-
エラーハンドリング: ステータスコードが200以外の場合、エラーメッセージを表示してループを抜けます。
-
レート制限の考慮: 各APIリクエスト後に1秒の待機を設けることで、APIのレート制限に引っかかるリスクを低減します。
3. 記事の閲覧数を集計する関数
def calculate_total_views(articles):
total_views = 0
article_views = []
for article in articles:
views = article['page_views_count']
title = article['title']
created_at = article['created_at']
article_views.append({
'title': title,
'views': views,
'created_at': created_at
})
total_views += views
return total_views, article_views
主な機能とポイント
-
総閲覧数の計算: すべての記事の
page_views_count
を合計し、総閲覧数を算出します。 -
個別記事のデータ収集: 各記事のタイトル、閲覧数、作成日時をリストに格納し、後でランキング表示に使用します。
4. メイン関数
def main():
# アクセストークンを設定
access_token = "YOUR_ACCESS_TOKEN" # ここに自分のアクセストークンを入力
# 記事データの取得
articles = get_qiita_articles(access_token)
# 閲覧数の計算
total_views, article_views = calculate_total_views(articles)
# 結果の表示
print(f"総記事数: {len(articles)}")
print(f"総閲覧数: {total_views:,}")
# 閲覧数トップ5の記事を表示
print("\n閲覧数トップ5の記事:")
sorted_articles = sorted(article_views, key=lambda x: x['views'], reverse=True)
for i, article in enumerate(sorted_articles[:5], 1):
print(f"{i}. {article['title']}: {article['views']:,} views ({article['created_at']})")
主な機能とポイント
-
アクセストークンの設定:
access_token
変数に自身のQiitaアクセストークンを設定します。Qiita APIへのアクセスにはこのトークンが必要です。 -
記事データの取得と閲覧数の計算:
get_qiita_articles
関数を呼び出して記事データを取得し、calculate_total_views
関数で閲覧数を集計します。 -
結果の表示: 総記事数と総閲覧数をコンソールに表示し、閲覧数が多い上位5記事をランキング形式で表示します。
5. スクリプトの実行
if __name__ == "__main__":
main()
この部分により、スクリプトが直接実行された場合にmain
関数が呼び出されます。
スクリプトの使用方法
-
Qiitaアクセストークンの取得:
- Qiitaのアカウントにログインし、アクセストークンの設定ページにアクセスします。
- 必要なスコープ(例えば、
read_qiita
)を選択し、新しいアクセストークンを発行します。 - 発行されたトークンをコピーします。
-
スクリプトの準備:
- 上記のスクリプトをPythonファイル(例:
qiita_views.py
)として保存します。 -
access_token = "YOUR_ACCESS_TOKEN"
の部分を、取得したアクセストークンに置き換えます。
- 上記のスクリプトをPythonファイル(例:
-
必要なライブラリのインストール:
-
requests
ライブラリがインストールされていない場合、以下のコマンドでインストールします。pip install requests
-
-
スクリプトの実行:
- ターミナルやコマンドプロンプトでスクリプトのあるディレクトリに移動し、以下のコマンドを実行します。
python qiita_views.py
- 実行すると、総記事数、総閲覧数、そして閲覧数トップ5の記事が表示されます。
- ターミナルやコマンドプロンプトでスクリプトのあるディレクトリに移動し、以下のコマンドを実行します。
注意点
-
アクセストークンの管理: アクセストークンは個人の認証情報です。第三者に漏洩しないよう、コードを公開する際や共有する際には、トークンを含めないように注意してください。
-
APIのレート制限: Qiita APIにはレート制限が存在します。スクリプト内で1秒の待機時間を設けていますが、大量のリクエストを行う場合はQiitaのAPIドキュメントを確認し、適切なレート制限を遵守してください。
-
エラーハンドリングの強化: 現在のスクリプトでは、ステータスコードが200以外の場合にエラーメッセージを表示して処理を終了します。実運用では、より詳細なエラーハンドリングや再試行のロジックを追加すると良いでしょう。
まとめ
Qiita APIを活用することで、自身の投稿記事のパフォーマンスを効率的に把握することができます。今回解説したスクリプトは、総閲覧数の集計や人気記事のランキング表示を簡単に実現するための基本的なツールです。これを基に、さらなるデータ分析や自動化ツールの開発に挑戦してみてはいかがでしょうか。
ぜひ、この記事を参考にして、Qiita APIを活用したデータ分析に取り組んでみてください!
参考
- ODCからQiita APIを使って自分の記事の閲覧数を取得する