Apps - the catalogue, versions, servers
IStoreService (the catalogue), ISteamApps (version checks, servers) and ISteamWebAPIUtil (the API's own metadata).
The catalogue
Valve retired the keyless ISteamApps/GetAppList/v2; it answers 404, though much code online still calls it. The replacement, IStoreService/GetAppList/v1, needs a key and is paginated. This deck asks it for games only: no DLC, software, videos or hardware.
def catalogue as list of steam.App init steam.appList($c, 20); # at most 20 pages
io.printf("%d apps\n", len($catalogue));appList reads pages of APPLIST_PAGE_MAX (50000), the largest Steam serves, until none are left or the page budget is spent. The catalogue runs to several pages, so keep the result and search it in memory:
for (def a in steam.findApps($catalogue, "portal")) {
io.printf("%d|pad=8 %s\n", $a.appId, $a.name);
}
io.printf("%s\n", steam.appById($catalogue, 620).name);findApps matches a case-insensitive substring. appById returns an App with id 0 and name "" when nothing matches.
To resume across runs, page with appListPage directly (lastAppId 0 for the first page):
def page as steam.AppListPage init steam.appListPage($c, $cursor, 10000);
$cursor = $page.lastAppId;Version checks (keyless)
The check a launcher makes before letting a player connect:
def v as steam.VersionCheck init steam.upToDateCheck($c, 440, 1);
io.printf("current: %t, required %d - %s\n",
$v.upToDate, $v.requiredVersion, $v.message);Game servers at an address (keyless)
for (def s in steam.serversAtAddress($c, "208.78.164.10")) {
io.printf("%s runs app %d (%s), VAC %t\n",
$s.address, $s.appId, $s.gameDir, $s.secure);
}An address alone lists every server on the host; :port narrows it to one. An address with no servers gives an empty list.
Image URLs (no request)
steam.storePageUrl(620); # https://store.steampowered.com/app/620
steam.headerImageUrl(620); # .../steam/apps/620/header.jpg
steam.capsuleImageUrl(620); # .../steam/apps/620/capsule_231x87.jpgThey are built from the app id, so they work for an app the storefront has no record for.
What a key can call
for (def m in steam.supportedApiList($c)) {
io.printf("%s.%s v%d %s\n", $m.interfaceName, $m.name, $m.version, $m.httpMethod);
}Without a key this lists the public methods; with one it adds the publisher methods that key unlocks. It also shows when an endpoint you rely on has gone.
serverInfo($c) reads Steam's clock, to check a local clock before comparing it with Steam's Unix times.
See examples/apps.j.