この記事では、Steam Store APIの appreviews を使い、Steamレビューの評価サマリーやレビュー本文をPythonで取得する方法をまとめます。
SteamworksのUser Reviewsドキュメントでは、ストアページに表示されるレビュー情報を取得するAPIとして説明されています。レビュー本文はユーザー投稿に近い情報なので、公開記事では全文転載ではなく、集計・要約・傾向分析として扱います。
評価サマリーを取得する
import requests
appid = 2246340
url = f"https://store.steampowered.com/appreviews/{appid}"
params = {
"json": 1,
"language": "japanese",
"purchase_type": "all",
"filter": "summary",
}
response = requests.get(url, params=params, timeout=30)
response.raise_for_status()
data = response.json()
print(data["query_summary"])query_summary には、レビュー件数や好評率に関係する情報が入ります。まずは本文取得より先に、サマリーだけ確認すると負荷を抑えられます。
レビュー本文を取得する
params = {
"json": 1,
"language": "japanese",
"purchase_type": "all",
"filter": "recent",
"num_per_page": 20,
}
response = requests.get(url, params=params, timeout=30)
response.raise_for_status()
data = response.json()
for review in data["reviews"][:3]:
print(review["voted_up"], review["review"][:100])カーソルでページングする
appreviews はレスポンス内の cursor を使って次ページを取得します。URLに入れる際はエンコードが必要です。
from urllib.parse import quote
reviews = []
cursor = "*"
for _ in range(5):
params = {
"json": 1,
"language": "japanese",
"purchase_type": "all",
"filter": "recent",
"num_per_page": 100,
"cursor": cursor,
}
response = requests.get(url, params=params, timeout=30)
response.raise_for_status()
data = response.json()
batch = data.get("reviews", [])
reviews.extend(batch)
if not batch:
break
cursor = data.get("cursor", cursor)
print(len(reviews))CSVに保存する
import csv
from pathlib import Path
def normalize_review(review: dict) -> dict:
author = review.get("author", {})
return {
"recommendationid": review.get("recommendationid"),
"voted_up": review.get("voted_up"),
"review": review.get("review"),
"timestamp_created": review.get("timestamp_created"),
"timestamp_updated": review.get("timestamp_updated"),
"playtime_forever": author.get("playtime_forever"),
"playtime_at_review": author.get("playtime_at_review"),
"language": review.get("language"),
}
rows = [normalize_review(r) for r in reviews]
csv_path = Path("outputs/steam_reviews.csv")
csv_path.parent.mkdir(parents=True, exist_ok=True)
with csv_path.open("w", encoding="utf-8-sig", newline="") as f:
writer = csv.DictWriter(f, fieldnames=rows[0].keys())
writer.writeheader()
writer.writerows(rows)公開記事に使うときの注意
- レビュー本文を長文転載しない
- 特定ユーザーを追跡・特定しない
- 取得条件、言語、取得日、件数を明記する
- レビューは投稿者の主観であり、ゲーム全体の評価と同一視しない
- 機械翻訳や要約を使う場合は、誤読の可能性を残す
まとめ
appreviews を使うと、Steamレビューの評価サマリーやレビュー本文を取得できます。分析記事では、本文をそのまま載せるより、評価傾向、投稿時期、プレイ時間、話題の変化として集計する使い方が向いています。