はじめに
こんにちは、筆者です。
最近も相変わらずニコ動だったり技術記事漁ったりしていますが…。
ほんの数週間前まではSteam系のゲーム…果てはそのゲームのMOD制作に没頭してました。
そうして幾つかMODを作っている内、Steam自体に興味を持つ様になり…。
「SteamってTwitterみたいにAPIないかな!? あったら色々遊べる活用できるのに!!」
…と思い、SteamAPIに関するまとめ記事を投稿するに至った次第です。
(Steam APIに関するまとめ記事って驚くほど少ないですし…)
調べてみると、SteamのAPIにはどうもsecret_key
やaccess_token
が不要な、いわゆる「野良でも叩ける」範囲でもそこそこ使えそうなAPIがあるとのことなので…。
今回はそういうAPIについてまとめていこうかと思います。
※結構量があるのでPart分割しています
前置きが長くなっちゃいましたね…。
それでは本題にいきましょう。
Steam APIの全体像
まず、Steam APIの全体像から見ていきましょう。
Steam APIは、大きく分けると下記の2種類があります:
Steamworks SDKについては、Steamworksアカウントに登録した後でダウンロードできるツールとなっております。野良(secret_key
やaccess_token
無しで使う)ではもちろん叩けません。
また、Steamworks Web APIについても:
…に分かれています。
特に、(2)については単なるSteamworksアカウントではなく「管理者権限」を持ってないとダメな様子です…Steamwork SDKと比べて、使用条件はちょっと厳しそうですね。
詳しくはこちらを→Authentication using Web API Keys (Steamworks Documentation)
ちなみに、(1)で叩けるAPIには「特定ゲームのニュースリリース一覧を取得する」様なAPIや、面白そうなのだと「特定ゲームの全ユーザーの実績獲得率を確認できる」物まであります。
…が、当然のことながらどれも「情報を取得する」ところまでしかできません。投稿だったり情報の書き換え等はできない感じです。
情報の書き換えや投稿については、(2)のタイプのAPIを使用することになります。
(2)には、面白い物だと「チート行為を報告できるAPI」もあったりします。こういうのもAPI化されているんですね…。
全体像としてはここまで、お次は「Steamworks Web APIの中でも野良で叩けるAPI」について見ていきましょう。
Steamで野良でも使用可能なAPI一覧
まずはどんなAPIがあるか、カテゴリごとに見ていきましょう。
なおメインの情報源としては公式Docsを参考にしてます: https://partner.steamgames.com/doc/webapi
…が、公式Docsに載ってない謎パラメータがいっぱいあるので、そちらについては別記事で情報を保管してます。悪しからず。
※また、本情報は2020/08~10頃にDocsを見て確認した情報です、現状とは異なる可能性があるのでご注意を
カテゴリ一覧
- ISteamApp: Steam上に公開しているアプリケーション(ゲーム)情報を取得できる
- ISteamNews: ニュース情報を取得できる
- ISteamRemoteStorage: Steamワークショップ, UGCコンテンツ情報を取得できる
- ISteamUserStats: Steam登録ユーザーの情報を取得できる
- ISteamWebAPIUtil: Steamworks Web APIサーバー自身の情報を取得できる
また、Steamworks Web APIという括りではないですが「レビュー取得」が可能なAPIも存在します。
野良で叩ける範囲でも結構色々できそうですね…。
本Partでは上2つのカテゴリについてまとめていこうかと思います。
他のカテゴリについては次Part以降にまとめていければと。
ここからは、カテゴリごとにどんなAPIがあるか見ていきましょう。
ISteamApp
Steam上に公開しているアプリケーション(ゲーム)情報取得ができるAPIです。
ここで取得できる情報は、「アプリ名(ゲーム名)」や他APIで使用する「アプリID」といったものになります。
GetAppList: Steam上の全てのアプリ情報取得
Steamに公開中の全てのアプリ情報を取得できます。
なお、追加DLCも「1つのアプリケーション」として取得されますのでご注意を。
レスポンス結果はこんな感じ:
"applist": "apps" [ { "appid": [アプリID(number)], "name": [アプリ名(string)] } ]
使用上の注意点として…。
文字通り、Steam上の全アプリの情報を引っ張ってくるため、レスポンスがめちゃくちゃ重いです。
数十秒待つ程度では、完全なレスポンス結果を取得できないレベルです…ご注意を。
GetServersAtAddress: ゲームサーバー情報を取得
- URL[GET]: https://api.steampowered.com/ISteamApps/GetServersAtAddress/v1/
- 必須パラメータ:
addr
[string]: サーバーのIP Address(IPv4形式)
本APIについては、公式Docsに説明がなかったので…下記のサイトの情報を参考にしています。
https://forums.alliedmods.net/archive/index.php/t-192365.html
https://wiki.teamfortress.com/wiki/WebAPI/GetServersAtAddress
本APIはサーバーのIPアドレスを指定して、ゲームサーバー情報を取得できる…らしいです。
オンライン対戦系のSteamゲーをやったことがないからか、筆者にはどういったシーンで利用するのかわかりませんが…。
レスポンスはこんな感じとのこと:
※servers
には空情報が返ってくることもあります。
{ "response":{ "success": [リクエストが成功したかどうか(Boolean)], "servers":[{ "addr": "92.97.220.205:27016", "gmsindex":65534, "appid":10, "gamedir":"cstrike", "region":6, "secure":true, "lan":false, "gameport":27016, "specport ":0 }] } }
UpToDateCheck: ?? ?
- URL[GET]: https://api.steampowered.com/ISteamApps/UpToDateCheck/v1/
- 必須パラメータ:
appid
[uint32]:version
[uint32]: アプリのバージョン
これについては…公式Docsに詳細な説明がなかった上、使ってみてもよくわからなかったので…。
下記の記事を参考に、どんな情報が返却されるかだけ記します。
https://wiki.teamfortress.com/wiki/WebAPI/UpToDateCheck
{ "response": { "success": [リクエストが成功したかどうか(Boolean)], "up_to_date": [指定されたバージョン番号が最新バージョンであるかどうか(Boolean)], "version_is_listable": [指定されたバージョンをパブリック変更ログにリストできるかどうかを示す(Boolean)], } }
なお、有効でないversion
を引いた場合は下記の様なレスポンスが返ってきます。
{ "response": { "success":true, "up_to_date":false, "version_is_listable":false, "required_version": [有効なバージョン番号], "message":"Your server is out of date, stranger." } }
この場合、required_version
に示される番号をversion
に指定して、再度リクエストを投げると正常データが返ってきます。
ちなみに、本APIに対応していないアプリケーションもあるっぽいです…。
冒頭で述べた「Library of Ruina」は対応していないっぽく、下記の様なレスポンスが返ってきました。
{"response":{"success":false,"error":"Couldn't get app info for the app specified."}}
ISteamNews
Steam各アプリの「コミュニティハブ > ニュース」情報を取得できます。
野良で叩けるものは1つだけです。
GetNewsForApp: 指定アプリのニュース情報を取得
- URL[GET] https://api.steampowered.com/ISteamNews/GetNewsForApp/v2/
- 必須パラメータ:
appid
[uint32]: アプリ固有のID
- オプション(必須ではない)パラメータ:
maxlength
[uint32]: レスポンス内のcontents
の最大長を指定可能。0or指定なしの場合contents
全体が返却される。enddate
[uint32:unixタイムスタンプ]: ここで指定した日付よりも前の投稿を取得できるcount
[uint32]: 取得する投稿数(デフォルト:20件)feeds
[string]: ニュースを返すフィード名のコンマ区切りリスト
指定したアプリのニュース情報を取得できます。
レスポンス結果はこんな感じ:
※これに限った物ではないですが、公式Docsには返却値の説明がないので推測な部分が多々あります。
{ "appnews": { "appid": [アプリID], "newsitems": [ { "gid": [そのニュースの固有ID], "title": [ニュースタイトル], "url": [そのニュースへのリンク], "is_external_url": [指定されたURLが外部Webサイトへのリンクかどうか/Steamストアにリンクしている場合はfalse], "author": [ニュース執筆者], "contents": [ニュース本文], "feedlabel": [ニュースのカテゴリラベル(Community AnnouncementsだったりThe Loadoutだったり…多分投稿者が任意で決めれる)], "date": [投稿日(unixタイムスタンプ形式)], "feedname": [ニュースアイテムのソースを説明する内部タグ], "feed_type": [フィードの種類(数値), 各数値が何を示すかは謎], "appid": [アプリID], "tags":[タグ(patchnotes, mod_reviewed…多分投稿者が任意で決めれる)] } ] "count": [記事数] } }
普段のニュース画面ではみられないいろんな情報が見れちゃいます。
また、これまでのAPIにはなかったオプションパラメータがあるので、まだ使いやすいかなと思います。
なお、appid
は先に紹介したGetAppList
APIから拾えます。
…が、全部取得するAPIから目当てのものを拾うのは現実的ではないので…URLを活用するのがいいかもです。
例えばLibrary of RuinaのストアページURLは下記になってますが:
https://store.steampowered.com/app/1256670/Library_Of_Ruina/
この、/app/
の後に続く数値がそのままappid
になってます。
ここから取得した方が早いでしょう…。
おわりに&次回記事へ…
今回はSteam APIの概要やその種類、そして野良で叩けるAPIの一部を紹介しました。
今回記事で全部は紹介しきれなかったので…残りの4カテゴリ:
- ISteamRemoteStorage: Steamワークショップ, UGCコンテンツ情報を取得できる
- ISteamUserStats: Steam登録ユーザーの情報を取得できる
- ISteamWebAPIUtil: Steamworks Web APIサーバー自身の情報を取得できる
- レビュー取得API
…については次回以降にまとめていければと思います。
これだけ叩けるAPIがあるなら、色々と夢が膨らみそうだなと思いつつ…。
それでは|д゚*)