Steamデータ取得 データ取得

Steam appdetailsの使い方|価格・発売日・対応OS・ジャンルをPythonで取得

2025年10月17日

この記事では、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化しておくと、ゲーム比較やジャンル別の傾向確認に使いやすくなります。

-Steamデータ取得, データ取得