Steamデータ取得 データ取得

Steam公式Web APIの使い方|アプリ一覧・同時接続数・実績・ニュース取得

2025年10月17日

この記事では、Steam公式Web APIをPythonから使い、アプリ一覧、同時接続数、実績、ニュースなどを取得する基本をまとめます。

Steam公式Web APIで扱う範囲

Steam Web APIは、SteamがWeb開発者向けに提供しているAPIです。公式ドキュメントでは、API呼び出しの基本形や出力形式、APIキーの取得方法が説明されています。

Steamworks公式:IStoreService/GetAppListSteam 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順で、各項目には appidnamelast_modifiedprice_change_number が含まれます。1回の取得上限は5万件です。全件取得では前回最後の appid を次回の last_appid に渡します。

アプリ一覧はAppIDの確認に使えます。後続の appdetailsappreviews、同時接続数取得ではAppIDが必要です。なお、後続の ISteamUserStatsISteamNews は別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側の appdetailsappreviews を使うほうが自然です。

まとめ

Steam公式Web APIは、AppID確認、同時接続数、ニュース、実績情報などを扱う入口になります。一方で、ストアページ由来の価格やレビュー本文は別APIに分けて考えると、Steamデータ取得全体の見通しがよくなります。

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