Files
homelab-docs/homelab/scripts/steam-library-to-json.py
2026-02-23 16:47:17 +03:00

60 lines
2.1 KiB
Python

#!/usr/bin/env python3
"""
Выгрузка списка игр из Steam-библиотеки в JSON через Steam Web API.
Нужны: API key (https://steamcommunity.com/dev/apikey) и 64-битный Steam ID.
"""
import json
import urllib.request
import urllib.parse
# Подставь свои данные
STEAM_API_KEY = "CB3A546C47CBADB5CAB3FA6D60B6DE4C" # https://steamcommunity.com/dev/apikey
STEAM_ID_64 = "76561198113489815" # 64-битный ID, например из https://steamid.io/
OUTPUT_FILE = "steam_library.json"
def get_owned_games(api_key: str, steam_id: str) -> list[dict]:
url = "https://api.steampowered.com/IPlayerService/GetOwnedGames/v1/"
params = {
"key": api_key,
"steamid": steam_id,
"include_appinfo": 1,
"include_played_free_games": 1,
}
req = urllib.request.Request(
f"{url}?{urllib.parse.urlencode(params)}",
headers={"Accept": "application/json"},
)
with urllib.request.urlopen(req) as resp:
data = json.loads(resp.read().decode())
if "response" not in data or "games" not in data["response"]:
raise RuntimeError(data.get("response", data))
return data["response"]["games"]
def main() -> None:
if not STEAM_API_KEY or not STEAM_ID_64:
print("Заполни STEAM_API_KEY и STEAM_ID_64 в начале скрипта.")
return
games = get_owned_games(STEAM_API_KEY, STEAM_ID_64)
out = [
{
"appid": g["appid"],
"name": g.get("name", ""),
"playtime_forever_min": g.get("playtime_forever", 0),
"img_icon_url": g.get("img_icon_url", ""),
"img_logo_url": g.get("img_logo_url", ""),
}
for g in games
]
with open(OUTPUT_FILE, "w", encoding="utf-8") as f:
json.dump(out, f, ensure_ascii=False, indent=2)
print(f"Записано {len(out)} игр в {OUTPUT_FILE}")
print("Дальше: python3 steam_library_size.py — посчитает размеры и суммарный объём.")
if __name__ == "__main__":
main()