この記事では、Steamの現在同時接続数(CCU)をPythonで定期取得し、CSVに保存して可視化する方法をまとめます。
CCU取得の考え方
Steam Web APIの ISteamUserStats/GetNumberOfCurrentPlayers を使うと、指定したAppIDの現在同時接続数を取得できます。この値は「取得した瞬間の値」です。過去推移を見たい場合は、自分で定期取得して保存する必要があります。
import requests
def get_current_players(appid: int) -> int:
url = "https://api.steampowered.com/ISteamUserStats/GetNumberOfCurrentPlayers/v1/"
params = {"appid": appid}
response = requests.get(url, params=params, timeout=30)
response.raise_for_status()
data = response.json()["response"]
return int(data["player_count"])CSVに追記する
import csv
from datetime import datetime, timezone
from pathlib import Path
def append_ccu(appid: int, csv_path: Path) -> None:
player_count = get_current_players(appid)
now = datetime.now(timezone.utc).isoformat()
csv_path.parent.mkdir(parents=True, exist_ok=True)
exists = csv_path.exists()
with csv_path.open("a", encoding="utf-8-sig", newline="") as f:
writer = csv.DictWriter(f, fieldnames=["timestamp_utc", "appid", "player_count"])
if not exists:
writer.writeheader()
writer.writerow({
"timestamp_utc": now,
"appid": appid,
"player_count": player_count,
})
append_ccu(730, Path("outputs/steam_ccu.csv"))定期実行する
Windowsならタスクスケジューラ、Linuxならcronで定期実行できます。まずは1時間に1回など、負荷の低い間隔で十分です。細かすぎる間隔で取得しても、分析に使い切れないことが多いです。
pandasで可視化する
import pandas as pd
import plotly.express as px
df = pd.read_csv("outputs/steam_ccu.csv")
df["timestamp_utc"] = pd.to_datetime(df["timestamp_utc"])
fig = px.line(
df,
x="timestamp_utc",
y="player_count",
color="appid",
title="Steam CCU trend",
)
fig.show()分析時の注意
- 取得間隔が粗いとピークを逃す
- タイムゾーンはUTCで保存し、表示時に変換する
- メンテナンスや大型アップデートで急変することがある
- 1時点のCCUだけで人気や売上を断定しない
まとめ
Steamの同時接続数は現在値として取得できます。推移を見たい場合は、取得時刻と一緒にCSVへ蓄積し、後から可視化します。レビュー分析やアップデート前後の反応を見る補助指標として使うと扱いやすいです。