この記事では、Steam Storefront APIの appdetails を使い、価格、発売日、対応OS、ジャンル、開発元、パブリッシャーなどのストア情報をPythonで取得する方法をまとめます。
appdetailsで取得できる情報
- ゲーム名
- 価格、割引率、通貨
- 発売日
- 対応OS
- ジャンル、カテゴリ
- 開発元、パブリッシャー
- スクリーンショットやヘッダー画像URL
Steam公式Web APIというより、Steamストアページ側の公開情報を取得するためのエンドポイントとして扱います。仕様変更の影響を受ける可能性があるため、分析用には取得日を残します。
基本コード
import requests
appid = 2246340
url = "https://store.steampowered.com/api/appdetails"
params = {
"appids": appid,
"cc": "jp",
"l": "japanese",
}
response = requests.get(url, params=params, timeout=30)
response.raise_for_status()
data = response.json()[str(appid)]
if not data["success"]:
raise RuntimeError("appdetailsの取得に失敗しました")
details = data["data"]
print(details["name"])必要な項目だけ取り出す
def normalize_appdetails(appid: int, details: dict) -> dict:
price = details.get("price_overview") or {}
platforms = details.get("platforms") or {}
return {
"appid": appid,
"name": details.get("name"),
"type": details.get("type"),
"is_free": details.get("is_free"),
"release_date": (details.get("release_date") or {}).get("date"),
"coming_soon": (details.get("release_date") or {}).get("coming_soon"),
"currency": price.get("currency"),
"initial": price.get("initial"),
"final": price.get("final"),
"discount_percent": price.get("discount_percent"),
"windows": platforms.get("windows"),
"mac": platforms.get("mac"),
"linux": platforms.get("linux"),
"developers": ", ".join(details.get("developers") or []),
"publishers": ", ".join(details.get("publishers") or []),
"genres": ", ".join(g["description"] for g in details.get("genres", [])),
}価格は最小通貨単位で返ることがあります。日本円なら final=7980 のように、そのまま円として読めるケースが多いですが、通貨ごとに扱いを確認します。
複数AppIDをCSV保存する
import csv
from pathlib import Path
from time import sleep
appids = [730, 578080, 2246340]
rows = []
for appid in appids:
params = {"appids": appid, "cc": "jp", "l": "japanese"}
response = requests.get(url, params=params, timeout=30)
response.raise_for_status()
result = response.json()[str(appid)]
if result.get("success"):
rows.append(normalize_appdetails(appid, result["data"]))
sleep(1)
csv_path = Path("outputs/steam_appdetails.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)分析時の注意
- 価格や割引は取得時点の値として保存する
- 地域指定
ccにより価格や表示が変わる - 発売日前タイトルや非公開タイトルでは項目が欠けることがある
- DLCやデモもAppIDを持つため、本編と区別する
まとめ
appdetails は、Steamストアページに近い情報を取得するのに便利です。価格、発売日、対応OS、ジャンルなどをまとめてCSV化しておくと、ゲーム比較やジャンル別の傾向確認に使いやすくなります。