この記事では、Steam公式Web APIをPythonから使い、アプリ一覧、同時接続数、実績、ニュースなどを取得する基本をまとめます。
Steam公式Web APIで扱う範囲
Steam Web APIは、SteamがWeb開発者向けに提供しているAPIです。公式ドキュメントでは、API呼び出しの基本形や出力形式、APIキーの取得方法が説明されています。
Steamworks公式:IStoreService/GetAppList / Steam Web APIキーの取得と保管方法
| 取得したいもの | 主な方法 |
|---|---|
| アプリ一覧 | IStoreService/GetAppList/v1(Web APIキー必須) |
| 現在の同時接続数 | ISteamUserStats/GetNumberOfCurrentPlayers |
| 実績情報 | ISteamUserStats 系API |
| ゲームニュース | ISteamNews/GetNewsForApp |
| 価格・レビュー本文 | Storefront API側で扱う |
アプリ一覧を取得する
現行のアプリ一覧取得は IStoreService/GetAppList/v1 を使います。旧 ISteamApps/GetAppList/v2 はSteamworks公式資料で非推奨です。現行MethodにはWeb APIキーが必要で、Service interfaceの取得条件は input_json へ渡します。
import json
import os
import requests
from dotenv import load_dotenv
load_dotenv()
api_key = os.getenv("STEAM_API_KEY")
if not api_key:
raise RuntimeError("STEAM_API_KEY が設定されていません")
url = "https://partner.steam-api.com/IStoreService/GetAppList/v1/"
max_results = 50_000
last_appid = 0
apps = []
while True:
request_data = {
"include_games": True,
"last_appid": last_appid,
"max_results": max_results,
}
params = {
"key": api_key,
"input_json": json.dumps(request_data),
}
response = requests.get(url, params=params, timeout=30)
response.raise_for_status()
page = response.json()["response"].get("apps", [])
if not page:
break
apps.extend(page)
next_last_appid = page[-1]["appid"]
if next_last_appid <= last_appid:
raise RuntimeError("last_appid が進まないため取得を中止しました")
last_appid = next_last_appid
print(len(apps))
print(apps[:3])結果はAppID順で、各項目には appid、name、last_modified、price_change_number が含まれます。1回の取得上限は5万件です。全件取得では前回最後の appid を次回の last_appid に渡します。
アプリ一覧はAppIDの確認に使えます。後続の appdetails、appreviews、同時接続数取得ではAppIDが必要です。なお、後続の ISteamUserStats や ISteamNews は別Interfaceであり、IStoreService のParameterやResponse構造をそのまま使うものではありません。
同時接続数を取得する
import requests
appid = 730
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"]
print(data)この値は取得時点の現在値です。推移を見たい場合は、一定間隔で自前収集して保存します。
ニュースを取得する
import requests
appid = 730
url = "https://api.steampowered.com/ISteamNews/GetNewsForApp/v2/"
params = {
"appid": appid,
"count": 5,
"maxlength": 300,
"format": "json",
}
response = requests.get(url, params=params, timeout=30)
response.raise_for_status()
items = response.json()["appnews"]["newsitems"]
for item in items:
print(item["title"], item.get("url"))公式APIとStorefront APIの切り分け
Steamのデータ取得では、公式Web APIだけで完結しないことがあります。価格、発売日、ジャンル、レビュー本文はStorefront API側の appdetails や appreviews を使うほうが自然です。
- Steam appdetailsの使い方|価格・発売日・対応OS・ジャンルをPythonで取得
- Steam appreviewsの使い方|レビュー本文・評価サマリーをPythonで取得
- SteamSpyの使い方|推定オーナー数・タグ・CCU指標をPythonで取得
まとめ
Steam公式Web APIは、AppID確認、同時接続数、ニュース、実績情報などを扱う入口になります。一方で、ストアページ由来の価格やレビュー本文は別APIに分けて考えると、Steamデータ取得全体の見通しがよくなります。