Steam データ活用

SteamのAppIDを確認する方法|URL・検索・API・Python一括取得

2025年10月17日

この記事では、Steamでデータ取得を行う前に必要になる AppID の確認方法を解説します。

Steamのレビュー、ストア情報、同時接続数、ニュース、実績などを取得する場合、多くのAPIやエンドポイントでAppIDを指定します。AppIDを間違えると、別ゲーム、DLC、サウンドトラック、体験版などを取得してしまう場合があります。

本記事では、ストアURLからの確認、Steam検索、公式Web API、Storefront APIの appdetails による検証、Pythonでの一括取得までを整理します。

この記事でできること

  • SteamのAppIDが何かを理解する
  • ストアURLからAppIDを確認する
  • ゲーム名からAppID候補を検索する
  • appdetails でゲーム本体かどうかを確認する
  • PythonでURLやタイトル名からAppIDを取得する
  • 複数タイトルのAppIDを一括取得してCSV保存する
  • DLCやサウンドトラックを誤って選ばないための注意点を理解する

想定読者

  • Steamレビューやストア情報をPythonで取得したい方
  • Steam APIを使う前にAppIDを確認したい方
  • ゲーム名からAppIDを一括で調べたい方
  • レビュー分析や同時接続数分析の前処理を整えたい方
  • DLCや別タイトルを誤取得しないようにしたい方

AppIDとは

AppIDとは、Steam上の各アプリに割り当てられている一意の数値IDです。ゲーム本体、DLC、体験版、サウンドトラック、ツールなど、それぞれにAppIDが割り当てられています。

たとえば、SteamのストアURLが以下のようになっている場合、2246340 がAppIDです。

https://store.steampowered.com/app/2246340/

AppIDは、以下のようなデータ取得で使います。

用途使うID
ストア情報の取得AppIDappdetails?appids=2246340
レビュー取得AppIDappreviews/2246340
同時接続数の取得AppIDGetNumberOfCurrentPlayers
ニュース取得AppIDGetNewsForApp

Steamデータ分析では、最初に正しいAppIDを確認しておくことが重要です。

方法1:ストアURLからAppIDを確認する

もっとも簡単なのは、SteamストアURLから確認する方法です。

https://store.steampowered.com/app/2246340/Monster_Hunter_Wilds/

このURLでは、/app/ の直後にある 2246340 がAppIDです。

URLが分かっている場合は、この方法が最も確実です。検索結果や公式ストアページから対象ゲームのURLを開き、数値部分を確認します。

URLからAppIDを抽出するPythonコード

URLが複数ある場合は、PythonでAppIDを抽出できます。

import re
from urllib.parse import urlparse


def extract_appid_from_url(url: str) -> int | None:
    """
    SteamストアURLからAppIDを抽出する。
    通常の /app/<id>/ 形式に対応。
    """
    if not url:
        return None

    path = urlparse(url.strip()).path
    match = re.search(r"/app/(\d+)(?:/|$)", path, flags=re.IGNORECASE)

    if match:
        return int(match.group(1))

    return None


url = "https://store.steampowered.com/app/2246340/Monster_Hunter_Wilds/"

appid = extract_appid_from_url(url)

print(appid)

実行すると、以下のようにAppIDだけを取得できます。

2246340

SteamストアURLが手元にある場合は、この方法を使うのがおすすめです。

方法2:Steamストア検索からAppID候補を探す

ゲーム名しか分からない場合は、Steamのストア検索を使って候補を探します。Pythonでは、Storefront APIの storesearch を使うと、検索語に一致するアプリ候補を取得できます。

なお、storesearch はSteam公式Web APIとは異なり、公式ドキュメントで細かく保証されているエンドポイントではありません。仕様変更の可能性があるため、実務では例外処理や確認工程を入れて使うのが安全です。

import requests
import pandas as pd


def search_steam_store(
    query: str,
    cc: str = "jp",
    lang: str = "japanese",
    limit: int = 10,
) -> pd.DataFrame:
    """
    Steamストア検索からAppID候補を取得する。
    """
    url = "https://store.steampowered.com/api/storesearch/"

    params = {
        "term": query,
        "cc": cc,
        "l": lang,
    }

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

    data = response.json()
    items = data.get("items", [])

    rows = []

    for item in items[:limit]:
        rows.append({
            "appid": item.get("id") or item.get("appid"),
            "name": item.get("name"),
            "type": item.get("type"),
            "price": item.get("price", {}).get("final") if isinstance(item.get("price"), dict) else None,
        })

    return pd.DataFrame(rows)


df_candidates = search_steam_store("モンスターハンター", limit=10)

print(df_candidates)

検索結果には、ゲーム本体以外の候補が混ざる場合があります。そのため、候補をそのまま採用せず、次の appdetails で内容を確認します。

方法3:appdetailsでゲーム本体か確認する

候補AppIDが見つかったら、appdetails で詳細情報を確認します。特に重要なのは、typegame かどうかです。

DLCやサウンドトラックにもAppIDがあるため、レビュー分析や同時接続数分析でゲーム本体を対象にしたい場合は、必ず確認しておくのがおすすめです。

import requests
import json


def get_appdetails(
    appid: int,
    cc: str = "jp",
    lang: str = "japanese",
) -> dict:
    """
    Steam Storefront appdetails からアプリ詳細を取得する。
    success=False の場合は空dictを返す。
    """
    url = "https://store.steampowered.com/api/appdetails"

    params = {
        "appids": appid,
        "cc": cc,
        "l": lang,
    }

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

    data = response.json()
    node = data.get(str(appid), {})

    if not node.get("success"):
        return {}

    return node.get("data", {})


appid = 2246340

meta = get_appdetails(appid)

if not meta:
    print("データを取得できませんでした。")
else:
    print("AppID:", appid)
    print("タイトル:", meta.get("name"))
    print("type:", meta.get("type"))
    print("発売日:", (meta.get("release_date") or {}).get("date"))
    print("coming_soon:", (meta.get("release_date") or {}).get("coming_soon"))

    price = meta.get("price_overview")
    if price:
        print("価格:", price.get("final_formatted"))

出力例は以下です。

AppID: 2246340
タイトル: モンスターハンターワイルズ
type: game
発売日: 2025年2月27日
coming_soon: False
価格: ¥ 8,990

typegame であれば、基本的にはゲーム本体として扱えます。dlcdemomusicsoftware などの場合は、分析対象として適切か確認してください。

方法4:公式Web APIのGetAppListから探す

Steam公式Web APIには、アプリ一覧を取得できる GetAppList があります。大量のアプリ名とAppIDを一覧で取得できるため、英語タイトルで検索したい場合に便利です。

ただし、GetAppList は件数が多く、名前が英語表記中心になる場合があります。日本語タイトルで探す場合は、先ほどの storesearch の方が見つけやすいことがあります。

import requests
import pandas as pd


def get_steam_applist() -> pd.DataFrame:
    """
    Steam公式Web APIのGetAppListからアプリ一覧を取得する。
    """
    url = "https://api.steampowered.com/ISteamApps/GetAppList/v2/"

    response = requests.get(url, timeout=60)
    response.raise_for_status()

    data = response.json()
    apps = data["applist"]["apps"]

    return pd.DataFrame(apps)


df_apps = get_steam_applist()

print(df_apps.head())
print("件数:", len(df_apps))

取得した一覧から、タイトル名で部分一致検索できます。

keyword = "Palworld"

df_match = (
    df_apps[
        df_apps["name"]
        .fillna("")
        .str.contains(keyword, case=False, regex=False)
    ]
    .sort_values("name")
)

print(df_match.head(20))

候補が見つかったら、必ず appdetails でゲーム本体かどうかを確認します。

方法5:複数タイトルのAppIDを一括取得する

レビュー分析やゲーム比較を行う場合、複数タイトルのAppIDを一括で取得したくなることがあります。ここでは、タイトル名リストを入力し、Steamストア検索と appdetails で候補を確認するコードを紹介します。

このコードでは、検索結果の上位候補を取得し、type == "game" の候補を優先します。完全自動で確定するのではなく、最後にCSVを目視確認する運用を想定しています。

import time
import requests
import pandas as pd


def search_steam_store_candidates(
    query: str,
    cc: str = "jp",
    lang: str = "japanese",
    limit: int = 5,
) -> list[dict]:
    """
    Steamストア検索から候補を取得する。
    """
    url = "https://store.steampowered.com/api/storesearch/"

    params = {
        "term": query,
        "cc": cc,
        "l": lang,
    }

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

    data = response.json()
    items = data.get("items", [])

    rows = []

    for item in items[:limit]:
        appid = item.get("id") or item.get("appid")

        if not appid:
            continue

        rows.append({
            "query": query,
            "appid": int(appid),
            "search_name": item.get("name"),
            "search_type": item.get("type"),
        })

    return rows


def get_appdetails_safe(
    appid: int,
    cc: str = "jp",
    lang: str = "japanese",
) -> dict:
    """
    appdetailsを取得する。
    取得できない場合は空dictを返す。
    """
    url = "https://store.steampowered.com/api/appdetails"

    params = {
        "appids": appid,
        "cc": cc,
        "l": lang,
    }

    try:
        response = requests.get(url, params=params, timeout=30)
        response.raise_for_status()
        data = response.json()
    except Exception:
        return {}

    node = data.get(str(appid), {})

    if not node.get("success"):
        return {}

    return node.get("data", {})


def resolve_steam_appids(
    queries: list[str],
    candidate_limit: int = 5,
    sleep_sec: float = 0.5,
) -> pd.DataFrame:
    """
    複数タイトル名からAppID候補を取得し、appdetailsで補完する。
    """
    rows = []

    for query in queries:
        candidates = search_steam_store_candidates(
            query=query,
            limit=candidate_limit,
        )

        for rank, candidate in enumerate(candidates, start=1):
            appid = candidate["appid"]
            meta = get_appdetails_safe(appid)

            rows.append({
                "query": query,
                "rank": rank,
                "appid": appid,
                "search_name": candidate.get("search_name"),
                "name": meta.get("name"),
                "type": meta.get("type"),
                "release_date": (meta.get("release_date") or {}).get("date"),
                "coming_soon": (meta.get("release_date") or {}).get("coming_soon"),
                "is_game": meta.get("type") == "game",
            })

            time.sleep(sleep_sec)

    return pd.DataFrame(rows)


queries = [
    "モンスターハンター",
    "Palworld",
    "HoloCure",
]

df_resolved = resolve_steam_appids(
    queries=queries,
    candidate_limit=5,
    sleep_sec=0.5,
)

df_resolved.to_csv(
    "steam_appid_candidates.csv",
    index=False,
    encoding="utf-8-sig",
)

print(df_resolved)

出力したCSVでは、検索語ごとに複数候補が並びます。ranknametyperelease_date を見て、分析対象として使うAppIDを確定します。

タイトルによっては、似た名前の別ゲームやDLCが上位に出る場合があります。自動取得結果をそのまま信じず、必ず候補名とAppIDを確認してください。

AppID確認時の注意点

AppIDを確認するときは、以下の点に注意してください。

  • DLCやサウンドトラックを拾う場合がある
    appdetailstype を確認し、ゲーム本体かどうかを見ます。
  • 似た名前の別タイトルが出る場合がある
    検索語が短いと別ゲームが候補に出ることがあります。正式タイトルやストアURLで確認します。
  • 日本語名と英語名で検索結果が変わる
    見つからない場合は、日本語名・英語名の両方で検索します。
  • Steam側の仕様変更があり得る
    storesearchappdetails は仕様変更の可能性があります。例外処理を入れて使います。
  • 短時間に大量リクエストしない
    一括取得では sleep を入れ、必要以上に連続アクセスしないようにします。
  • 最終確認は目視で行う
    自動マッチングだけで確定せず、CSVやストアページを見て確認します。

AppIDを確認した後にできること

AppIDが分かると、Steamのさまざまな情報を取得できるようになります。

取得したい情報主な方法関連記事
APIキーを使う公式Web APISteam Web APISteam Web APIキーの取得方法|登録・保管・Pythonでの接続確認
アプリ一覧・同時接続・ニュース公式Web APISteam公式Web APIの使い方|アプリ一覧・同時接続・実績・ニュースをPythonで取得
価格・発売日・対応OSappdetailsSteam appdetailsの使い方|価格・発売日・対応OS・ジャンルをPythonで取得
レビュー本文・評価サマリーappreviewsSteam appreviewsの使い方|レビュー本文・評価サマリーをPythonで取得
同時接続数の時系列自前収集Steam同時接続数を自前収集して可視化する方法|CCUをPythonで定期取得

次に読む記事

まとめ

この記事では、SteamのAppIDを確認する方法を整理しました。

ストアURLが分かっている場合は、URL内の /app/数値/ を確認するのが最も簡単です。ゲーム名から探す場合は、Steamストア検索や公式Web APIの GetAppList を使って候補を取得できます。

ただし、候補にはDLC、体験版、サウンドトラック、別タイトルが混ざる場合があります。レビュー分析や同時接続数分析でゲーム本体を扱う場合は、appdetailstype やタイトル名を確認してから使うのがおすすめです。

-Steam, データ活用