Steamデータ取得 データ取得

SteamSpy APIの使い方|推定オーナー数・タグ・CCU指標をPythonで取得

2025年10月17日

この記事では、SteamSpy APIを使って、推定オーナー数、タグ、プレイ時間、CCU関連指標などをPythonで取得する方法をまとめます。

SteamSpyを使う前提

SteamSpyは、Steamの公開情報などをもとにゲームの所有者数や指標を推定する外部サービスです。公式のSteam販売本数ではありません。分析記事では、数値を断定的に扱わず、推定値・参考値として使います。

SteamSpy API

1本のゲーム情報を取得する

import requests

appid = 730
url = "https://steamspy.com/api.php"
params = {
    "request": "appdetails",
    "appid": appid,
}

response = requests.get(url, params=params, timeout=30)
response.raise_for_status()

data = response.json()
print(data.keys())
print(data.get("name"), data.get("owners"))

必要な項目だけ整理する

def normalize_steamspy(data: dict) -> dict:
    return {
        "appid": data.get("appid"),
        "name": data.get("name"),
        "developer": data.get("developer"),
        "publisher": data.get("publisher"),
        "owners": data.get("owners"),
        "average_forever": data.get("average_forever"),
        "median_forever": data.get("median_forever"),
        "ccu": data.get("ccu"),
        "score_rank": data.get("score_rank"),
        "positive": data.get("positive"),
        "negative": data.get("negative"),
        "tags": data.get("tags"),
    }

row = normalize_steamspy(data)
print(row)

複数AppIDをCSV保存する

import csv
import json
from pathlib import Path
from time import sleep

appids = [730, 578080, 2246340]
rows = []

for appid in appids:
    params = {"request": "appdetails", "appid": appid}
    response = requests.get(url, params=params, timeout=30)
    response.raise_for_status()
    data = response.json()
    row = normalize_steamspy(data)
    row["tags"] = json.dumps(row["tags"], ensure_ascii=False)
    rows.append(row)
    sleep(1)

csv_path = Path("outputs/steamspy.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)

タグを扱う

tags はタグ名とスコアの辞書として返ります。ジャンル比較や類似ゲーム探索に使えますが、Steam公式ジャンルとは別のユーザータグとして扱います。

tags = data.get("tags") or {}
top_tags = sorted(tags.items(), key=lambda x: x[1], reverse=True)[:10]

for tag, score in top_tags:
    print(tag, score)

分析時の注意

  • ownersは推定値であり、実売数ではない
  • 低販売本数・新作・無料配布直後のタイトルはぶれやすい
  • Steam公式APIやStorefront APIの値と混同しない
  • 重要な判断には単独で使わず、レビュー数やCCUなど複数指標と合わせる

関連記事

まとめ

SteamSpy APIは、推定オーナー数やタグ、CCUなどをまとめて見る補助データとして便利です。ただし公式な販売本数ではないため、推定値として扱い、レビュー数や同時接続数など他の公開データと合わせて読むのが現実的です。

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