60 lines
2.1 KiB
Python
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()
|