Aikの技術日記

技術的な進捗とか成果とかを細々と投稿するブログです。時々雑記も。

Steamworks Web APIの環境構築方法をまとめてみた

はじめに

こんにちは、筆者です。

当ブログを開設してはや6年ほどが経過し、投稿したブログ記事は113記事にのぼり。
自分でもちょくちょく読み返して、こんな記事も書いたな〜と想いを馳せることも多くなりました。

そんな中、4年ほど前に書いたこの記事に目が留まり: aik0aaat.hatenadiary.jp

当記事内で、

また、Steamworks Web APIについても:
1. 野良で叩けるAPI
2. Steamworksアカウントが必要なAPI
…に分かれています。

…と記載があり。
当時は1番目のみをまとめたのですが、ふと2番目にはどんなAPIが転がっているのだろうと気になりまして。
今更ながら、まとめてみようと思い至りました。

※本当はどんなAPIがあるかも網羅的にまとめたかったですが、執筆当時(2024/09/11)時点で利用可能なAPIが167件もあり。
量の暴力に押し潰されたので、一旦は環境構築の方法だけまとめてます…。
ただ、どんなAPIがあるかの「探し方」についてはまとめているので参照に。

それではいきましょう。

事前準備

前回の記事では認証(APIキー等)不要のAPIしかなかったので、事前準備なくURL叩けばレスポンスが返ってきましたが…。
今回は認証を必要とするAPIを扱うので、事前準備が必要です。

概要はこちらの公式Docsに記載されてますが、折角なので当記事でも軽くまとめてみます。

認証方式&APIキーの種類

認証は「APIキー」で行うのですが、このAPIキーにも種類があり…。
大きく分けて以下の2種に別れ:

  • ユーザーキー:
    • Steamアカウントがあれば作成可能
  • パブリッシャーキー:
    • パブリッシャーが自身のアプリ(ゲーム)に対して発行可能
    • 機密性の高いユーザーデータなどを扱える分、取扱注意

各キーで利用可能なAPIも異なります。

ユーザーキーを使うと自身の所持するゲームを一覧で見れたり、各ゲームのプレイ時間を見れたりする、一方、
パブリッシャーキーを使うと、対象となるゲームの「Steamワークショップ」「ニュース」のコンテンツ取得・更新や、チート行為の報告と言ったSteam機能にもアクセスできちゃいます。

ただ、残念ながら筆者はSteamパブリッシュ経験がないので…。
当記事では「ユーザーキー」で扱えるAPIのみを取り上げようかと。

なお、ユーザーキーの利用にはSteam Web API利用規約への同意が必要です。
APIの利用制限についても記載があるので:

You are limited to one hundred thousand (100,000) calls to the Steam Web API per day.
訳: Steam Web API への呼び出しは 1 日あたり 100,000 回に制限されています。

予め目を通しておくことを勧めます。

ユーザーキーを入手しよう

ユーザーキーはSteamアカウントにログインした状態で、Steam Web API キー登録画面から入手可能です。

"Steam Web API キー登録画面"
アクセスすると上記画面へ飛びます

ドメイン名」には、API使用元のドメインを入れましょう。

※補足:
ローカル開発でのみ使用するなら、ドメイン名にlocalhostと入れても構いませんが…。
ドメイン名をlocalhostにしても、クライアントサイドからはCORSエラーで弾かれちゃいます。
localhost環境でAPIを叩く際は、サーバーサイドでAPIを叩くか、Postmanやブラウザから直叩きしましょう。

Steam Web API利用規約にチェックを入れ、「登録」を押すと…Steamガードを入れてる人によっては、以下のように認証が入りますので:
"Steamガード確認画面"

スマホのSteamアプリを開き、確認タブから認証をしてください。
"Steamガード確認画面(Steamアプリ)"

認証が完了すれば、晴れてAPIキー発行完了です。
"APIキー確認画面"

なお、APIキーの内容はSteam Web API キー登録画面にアクセスすればいつでも確認可能です。
※キーの内容も秘匿されず、閲覧可能です
APIサービスであるある「発行完了画面を間違えて閉じちゃった!再発行しなきゃ!」…みたいな事にはならないのでご安心を。

代わりに、複数個のAPIキーを持つことはどうも無理そうです…。
同画面でキーの無効化はできるので、複数のドメインで扱いたいならその都度発行し直すことになるかと。

利用可能なAPIの概要

事前準備は済んだので、早速利用可能なAPIの概要を見ていきましょう。

Steam Web APIには「APIキーを元に、アクセス可能なAPIメソッドの一覧を返す」便利なエンドポイントがあるので…。
ISteamWebAPIUtil Interface (Steamworks Documentation)

リクエスト:

https://api.steampowered.com/ISteamWebAPIUtil/GetSupportedAPIList/v1?key=[Steam Web APIキーを入力]

レスポンス例:

{
  "apilist": {
    "interfaces": [
      {
        "name": "ISteamWebAPIUtil",
        "methods": [
          {
            "name": "GetServerInfo",
            "version": 1,
            "httpmethod": "GET",
            "parameters": []
          },
          {
            "name": "GetSupportedAPIList",
            "version": 1,
            "httpmethod": "GET",
            "parameters": [
              {
                "name": "key",
                "type": "string",
                "optional": true,
                "description": "access key"
              }
            ]
          }
        ]
      },
      ... // 以下省略
    ]
  }
}

こちらをベースに紹介してい…こうと思いましたが。
執筆当時(2024/09/11)段階でリクエストしたところ、該当するAPI167件もある事がわかり…。

おまけに大概のAPI公式Docsにも記載がないAPIばかりで、GetSupportedAPIListAPIdescriptionと、レスポンス内容から内容を推察することしか出来ず…。
網羅的にまとめ上げるのは現実的ではないので、一旦諦めることにしました…。

とはいえこれだけだと味気ないので、幾つかピックアップしてご紹介します。

  • 特定ユーザーのウィッシュリストを取得
    • URL: https://api.steampowered.com/IWishlistService/GetWishlist
    • Method: `GET`
    • Param: steamid…対象のSteaamID
  • 特定ユーザーのウィッシュリストに入ってるアプリ(ゲーム)数を取得
    • URL: https://api.steampowered.com/IWishlistService/GetWishlistItemCount
    • Method: `GET`
    • Param: steamid…対象のSteaamID
  • 特定ユーザーの取得バッチを取得
    • URL: https://api.steampowered.com/IPlayerService/GetBadges
    • Method: `GET`
    • Param: steamid…対象のSteaamID
  • 特定ユーザーのSteamレベルを取得
    • URL: https://api.steampowered.com/IPlayerService/GetSteamLevel
    • Method: `GET`
    • Param: steamid…対象のSteaamID
  • 特定ユーザーが所有するゲーム一覧と、プレイ時間を取得
    • OS(Windows,MacOS等)別のプレイ時間や、最後にプレイした日も分かる
    • URL: https://api.steampowered.com/IPlayerService/GetOwnedGames
    • Method: `GET`
    • Param: steamid…対象のSteaamID
    • Param: include_played_free_games…無料ゲームを含めて取得するか(デフォルトだと無料ゲームはレスポンス外)
    • Param: include_appinfo…レスポンスにゲーム名も含めるか(デフォルトだと含まれない)
    • ※他にも条件指定できるが項目多いので割愛
  • 特定ユーザーの最近プレイしたゲームを取得
    • 「最近」というのが具体的にどれくらいの期間かは不明
    • URL: https://api.steampowered.com/IPlayerService/GetRecentlyPlayedGames
    • Method: `GET`
    • Param: steamid…対象のSteaamID
    • Param: count…レスポンスに返却されるゲームの件数を制御可能(デフォルトだと全件)
  • 特定ユーザーのサマリー情報を取得
    • URL: https://api.steampowered.com/ISteamUser/GetPlayerSummaries
    • Method: `GET`
    • Param: steamids…対象のSteaamID、カンマ区切りで複数入力可能

※全てのGETパラメータにはプロパティ名keyで、Steamworks Web APIアクセスキーをvalueに入れて送付しないとダメです。
※ユーザー関連の情報取得APIでは、アクセスキーに紐づくユーザーの情報しか取れません。
※SteamIDはプロフページから閲覧可能です、詳しくはこちら

おわりに

今回はSteamworks Web APIのうち、「Steamworksアカウントが必要なAPI」について…。
叩くのに必要なものは何か、アクセスキーの入手方法についてまとめ。
利用可能なAPI一覧の取得方法と、その中でも面白そうなAPIをピックアップしてまとめました。

本当は利用可能なAPIにどんなものがあるか、網羅的にまとめたかったのですが…。
対象APIが167件もあるのと、中にはSetSteamAccountPurchasedと言った「ほんまに操作できるんかこれ…?」と試すのも怖くなるものもあったので。
(Purchasedって記載から、フラグ関連を弄れちゃうのかな?と思ってます…操作対象はBadgeっぽいですけど)

もし気になる方は「利用可能なAPI一覧」を叩いてみて、他にもどんなのがあるか見てみて下さい。
ServerやTournamentと言った語句が含まれてるAPIも多かったのですが、私はあまりSteamに明るくなく…何が出来るかわからんだったのでorz。

もしSteam上でゲームをリリースする機会があれば、パブリッシャーキーを使って何が出来るかも見てみたいですね。
それでは|д゚*)