feat: initial commit with basic working script

This commit is contained in:
2025-03-21 02:07:45 +00:00
commit ed5a080f28
8 changed files with 289 additions and 0 deletions

2
.env.sample Normal file
View File

@@ -0,0 +1,2 @@
STEAM_API_KEY=<key>
STEAM_ID=<id>

12
.gitignore vendored Normal file
View File

@@ -0,0 +1,12 @@
# Python-generated files
__pycache__/
*.py[oc]
build/
dist/
wheels/
*.egg-info
# Virtual environments
.venv
.env

1
.python-version Normal file
View File

@@ -0,0 +1 @@
3.12

0
README.md Normal file
View File

10
pyproject.toml Normal file
View File

@@ -0,0 +1,10 @@
[project]
name = "steam-games-report"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
requires-python = ">=3.12"
dependencies = [
"dotenv>=0.9.9",
"requests>=2.32.3",
]

44
steam_games_2024.csv Normal file
View File

@@ -0,0 +1,44 @@
Game Name,Image URL,Total Playtime (Hours)
Dota 2,https://cdn.akamai.steamstatic.com/steam/apps/570/header.jpg,2526.18
Rust,https://cdn.akamai.steamstatic.com/steam/apps/252490/header.jpg,315.4
Satisfactory,https://cdn.akamai.steamstatic.com/steam/apps/526870/header.jpg,234.77
Rec Room,https://cdn.akamai.steamstatic.com/steam/apps/471710/header.jpg,213.55
Divinity: Original Sin 2,https://cdn.akamai.steamstatic.com/steam/apps/435150/header.jpg,159.27
Mindustry,https://cdn.akamai.steamstatic.com/steam/apps/1127400/header.jpg,119.62
Baldur's Gate 3,https://cdn.akamai.steamstatic.com/steam/apps/1086940/header.jpg,82.47
Timberborn,https://cdn.akamai.steamstatic.com/steam/apps/1062090/header.jpg,78.32
Deep Rock Galactic,https://cdn.akamai.steamstatic.com/steam/apps/548430/header.jpg,74.0
THE FINALS,https://cdn.akamai.steamstatic.com/steam/apps/2073850/header.jpg,39.95
Smashbox Arena,https://cdn.akamai.steamstatic.com/steam/apps/530350/header.jpg,38.57
Lethal Company,https://cdn.akamai.steamstatic.com/steam/apps/1966720/header.jpg,37.98
Core Keeper,https://cdn.akamai.steamstatic.com/steam/apps/1621690/header.jpg,37.35
Dying Light,https://cdn.akamai.steamstatic.com/steam/apps/239140/header.jpg,34.55
Frostpunk,https://cdn.akamai.steamstatic.com/steam/apps/323190/header.jpg,28.83
Job Simulator,https://cdn.akamai.steamstatic.com/steam/apps/448280/header.jpg,28.78
Raft,https://cdn.akamai.steamstatic.com/steam/apps/648800/header.jpg,28.1
The Lab,https://cdn.akamai.steamstatic.com/steam/apps/450390/header.jpg,27.3
Icarus,https://cdn.akamai.steamstatic.com/steam/apps/1149460/header.jpg,22.92
For The King,https://cdn.akamai.steamstatic.com/steam/apps/527230/header.jpg,19.07
Streets of Rogue,https://cdn.akamai.steamstatic.com/steam/apps/512900/header.jpg,16.27
Tom Clancy's Ghost Recon® Wildlands,https://cdn.akamai.steamstatic.com/steam/apps/460930/header.jpg,11.87
Offworld Trading Company,https://cdn.akamai.steamstatic.com/steam/apps/271240/header.jpg,11.08
SUPERHOT VR,https://cdn.akamai.steamstatic.com/steam/apps/617830/header.jpg,8.93
SKYBOX VR Video Player,https://cdn.akamai.steamstatic.com/steam/apps/721090/header.jpg,5.62
GTFO,https://cdn.akamai.steamstatic.com/steam/apps/493520/header.jpg,5.57
Deadlock,https://cdn.akamai.steamstatic.com/steam/apps/1422450/header.jpg,5.18
Cosmic Trip,https://cdn.akamai.steamstatic.com/steam/apps/427240/header.jpg,4.85
Escape Memoirs: Mansion Heist,https://cdn.akamai.steamstatic.com/steam/apps/1925320/header.jpg,4.57
Human Fall Flat,https://cdn.akamai.steamstatic.com/steam/apps/477160/header.jpg,3.78
First Class Escape: The Train of Thought,https://cdn.akamai.steamstatic.com/steam/apps/1738610/header.jpg,3.03
Budget Cuts,https://cdn.akamai.steamstatic.com/steam/apps/400940/header.jpg,2.8
Escape Memoirs: Mini Stories,https://cdn.akamai.steamstatic.com/steam/apps/2098350/header.jpg,2.62
The Ascent,https://cdn.akamai.steamstatic.com/steam/apps/979690/header.jpg,1.92
Fallout 76,https://cdn.akamai.steamstatic.com/steam/apps/1151340/header.jpg,1.78
Escape the Backrooms,https://cdn.akamai.steamstatic.com/steam/apps/1943950/header.jpg,1.52
Monaco,https://cdn.akamai.steamstatic.com/steam/apps/113020/header.jpg,1.3
Stardew Valley,https://cdn.akamai.steamstatic.com/steam/apps/413150/header.jpg,1.13
Paint the Town Red,https://cdn.akamai.steamstatic.com/steam/apps/337320/header.jpg,1.08
Bodycam,https://cdn.akamai.steamstatic.com/steam/apps/2406770/header.jpg,0.65
Tom Clancy's Rainbow Six 3: Gold Edition,https://cdn.akamai.steamstatic.com/steam/apps/19830/header.jpg,0.5
All Walls Must Fall,https://cdn.akamai.steamstatic.com/steam/apps/628290/header.jpg,0.22
Tom Clancy's Rainbow Six 3: Athena Sword,https://cdn.akamai.steamstatic.com/steam/apps/19840/header.jpg,0.02
1 Game Name Image URL Total Playtime (Hours)
2 Dota 2 https://cdn.akamai.steamstatic.com/steam/apps/570/header.jpg 2526.18
3 Rust https://cdn.akamai.steamstatic.com/steam/apps/252490/header.jpg 315.4
4 Satisfactory https://cdn.akamai.steamstatic.com/steam/apps/526870/header.jpg 234.77
5 Rec Room https://cdn.akamai.steamstatic.com/steam/apps/471710/header.jpg 213.55
6 Divinity: Original Sin 2 https://cdn.akamai.steamstatic.com/steam/apps/435150/header.jpg 159.27
7 Mindustry https://cdn.akamai.steamstatic.com/steam/apps/1127400/header.jpg 119.62
8 Baldur's Gate 3 https://cdn.akamai.steamstatic.com/steam/apps/1086940/header.jpg 82.47
9 Timberborn https://cdn.akamai.steamstatic.com/steam/apps/1062090/header.jpg 78.32
10 Deep Rock Galactic https://cdn.akamai.steamstatic.com/steam/apps/548430/header.jpg 74.0
11 THE FINALS https://cdn.akamai.steamstatic.com/steam/apps/2073850/header.jpg 39.95
12 Smashbox Arena https://cdn.akamai.steamstatic.com/steam/apps/530350/header.jpg 38.57
13 Lethal Company https://cdn.akamai.steamstatic.com/steam/apps/1966720/header.jpg 37.98
14 Core Keeper https://cdn.akamai.steamstatic.com/steam/apps/1621690/header.jpg 37.35
15 Dying Light https://cdn.akamai.steamstatic.com/steam/apps/239140/header.jpg 34.55
16 Frostpunk https://cdn.akamai.steamstatic.com/steam/apps/323190/header.jpg 28.83
17 Job Simulator https://cdn.akamai.steamstatic.com/steam/apps/448280/header.jpg 28.78
18 Raft https://cdn.akamai.steamstatic.com/steam/apps/648800/header.jpg 28.1
19 The Lab https://cdn.akamai.steamstatic.com/steam/apps/450390/header.jpg 27.3
20 Icarus https://cdn.akamai.steamstatic.com/steam/apps/1149460/header.jpg 22.92
21 For The King https://cdn.akamai.steamstatic.com/steam/apps/527230/header.jpg 19.07
22 Streets of Rogue https://cdn.akamai.steamstatic.com/steam/apps/512900/header.jpg 16.27
23 Tom Clancy's Ghost Recon® Wildlands https://cdn.akamai.steamstatic.com/steam/apps/460930/header.jpg 11.87
24 Offworld Trading Company https://cdn.akamai.steamstatic.com/steam/apps/271240/header.jpg 11.08
25 SUPERHOT VR https://cdn.akamai.steamstatic.com/steam/apps/617830/header.jpg 8.93
26 SKYBOX VR Video Player https://cdn.akamai.steamstatic.com/steam/apps/721090/header.jpg 5.62
27 GTFO https://cdn.akamai.steamstatic.com/steam/apps/493520/header.jpg 5.57
28 Deadlock https://cdn.akamai.steamstatic.com/steam/apps/1422450/header.jpg 5.18
29 Cosmic Trip https://cdn.akamai.steamstatic.com/steam/apps/427240/header.jpg 4.85
30 Escape Memoirs: Mansion Heist https://cdn.akamai.steamstatic.com/steam/apps/1925320/header.jpg 4.57
31 Human Fall Flat https://cdn.akamai.steamstatic.com/steam/apps/477160/header.jpg 3.78
32 First Class Escape: The Train of Thought https://cdn.akamai.steamstatic.com/steam/apps/1738610/header.jpg 3.03
33 Budget Cuts https://cdn.akamai.steamstatic.com/steam/apps/400940/header.jpg 2.8
34 Escape Memoirs: Mini Stories https://cdn.akamai.steamstatic.com/steam/apps/2098350/header.jpg 2.62
35 The Ascent https://cdn.akamai.steamstatic.com/steam/apps/979690/header.jpg 1.92
36 Fallout 76 https://cdn.akamai.steamstatic.com/steam/apps/1151340/header.jpg 1.78
37 Escape the Backrooms https://cdn.akamai.steamstatic.com/steam/apps/1943950/header.jpg 1.52
38 Monaco https://cdn.akamai.steamstatic.com/steam/apps/113020/header.jpg 1.3
39 Stardew Valley https://cdn.akamai.steamstatic.com/steam/apps/413150/header.jpg 1.13
40 Paint the Town Red https://cdn.akamai.steamstatic.com/steam/apps/337320/header.jpg 1.08
41 Bodycam https://cdn.akamai.steamstatic.com/steam/apps/2406770/header.jpg 0.65
42 Tom Clancy's Rainbow Six 3: Gold Edition https://cdn.akamai.steamstatic.com/steam/apps/19830/header.jpg 0.5
43 All Walls Must Fall https://cdn.akamai.steamstatic.com/steam/apps/628290/header.jpg 0.22
44 Tom Clancy's Rainbow Six 3: Athena Sword https://cdn.akamai.steamstatic.com/steam/apps/19840/header.jpg 0.02

106
steam_scrape.py Normal file
View File

@@ -0,0 +1,106 @@
import requests
import csv
from datetime import datetime
import os
from dotenv import load_dotenv
# Load environment variables from .env file
load_dotenv()
def get_steam_id_from_vanity_url(api_key, vanity_url):
"""Convert a Steam vanity URL username to a Steam ID"""
url = f"https://api.steampowered.com/ISteamUser/ResolveVanityURL/v0001/?key={api_key}&vanityurl={vanity_url}"
response = requests.get(url)
data = response.json()
if data['response']['success'] == 1:
return data['response']['steamid']
return None
def get_owned_games(api_key, steam_id):
"""Get all owned games with playtime"""
url = f"https://api.steampowered.com/IPlayerService/GetOwnedGames/v0001/?key={api_key}&steamid={steam_id}&format=json&include_appinfo=1&include_played_free_games=1"
response = requests.get(url)
return response.json()
def get_player_summaries(api_key, steam_id):
"""Get player information including profile creation date"""
url = f"https://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key={api_key}&steamids={steam_id}"
response = requests.get(url)
return response.json()
def filter_games_played_in_2024(games_data):
"""Filter games played in 2024 based on playtime"""
current_year = datetime.now().year
# We can only get games that have been played at all
# There's no direct way to know exactly when the playtime occurred beyond the last 2 weeks
games_played = []
if 'response' in games_data and 'games' in games_data['response']:
for game in games_data['response']['games']:
last_played = game.get("rtime_last_played", 0)
if last_played == 0:
# Skip games that have never been played
continue
parsed_time = datetime.fromtimestamp(last_played)
# Games played in the last 2 weeks (definitely played in 2024 if current year is 2024)
if parsed_time.year == 2024:
games_played.append({
'appid': game['appid'],
'name': game['name'],
'total_playtime_minutes': game['playtime_forever'],
'img_url': f"https://cdn.akamai.steamstatic.com/steam/apps/{game['appid']}/header.jpg"
})
# Sort by playtime (descending)
games_played.sort(key=lambda x: x['total_playtime_minutes'], reverse=True)
return games_played
def export_to_csv(games, filename='steam_games_2024.csv'):
"""Export games data to CSV"""
with open(filename, 'w', newline='', encoding='utf-8') as csvfile:
fieldnames = ['Game Name','Image URL', 'Total Playtime (Hours)']
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writeheader()
for game in games:
writer.writerow({
'Game Name': game['name'],
'Image URL': game['img_url'],
'Total Playtime (Hours)': round(game['total_playtime_minutes'] / 60, 2),
})
print(f"CSV file created: {filename}")
def main():
api_key = os.getenv("STEAM_API_KEY")
if not api_key:
print("Please set your Steam API key in the .env file")
return
steam_identifier = os.getenv("STEAM_ID")
if not steam_identifier:
print("Please set your Steam ID in the .env file")
return
# Determine if the input is a Steam ID or vanity URL
if steam_identifier.isdigit():
steam_id = steam_identifier
else:
steam_id = get_steam_id_from_vanity_url(api_key, steam_identifier)
if not steam_id:
print("Could not resolve vanity URL. Please use your numeric Steam ID.")
return
print("Fetching game data from Steam...")
owned_games = get_owned_games(api_key, steam_id)
print("Filtering games played in 2024...")
games_2024 = filter_games_played_in_2024(owned_games)
if games_2024:
export_to_csv(games_2024)
print(f"Found {len(games_2024)} games played in 2024")
else:
print("No games found for 2024")
if __name__ == "__main__":
main()

114
uv.lock generated Normal file
View File

@@ -0,0 +1,114 @@
version = 1
requires-python = ">=3.12"
[[package]]
name = "certifi"
version = "2025.1.31"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/1c/ab/c9f1e32b7b1bf505bf26f0ef697775960db7932abeb7b516de930ba2705f/certifi-2025.1.31.tar.gz", hash = "sha256:3d5da6925056f6f18f119200434a4780a94263f10d1c21d032a6f6b2baa20651", size = 167577 }
wheels = [
{ url = "https://files.pythonhosted.org/packages/38/fc/bce832fd4fd99766c04d1ee0eead6b0ec6486fb100ae5e74c1d91292b982/certifi-2025.1.31-py3-none-any.whl", hash = "sha256:ca78db4565a652026a4db2bcdf68f2fb589ea80d0be70e03929ed730746b84fe", size = 166393 },
]
[[package]]
name = "charset-normalizer"
version = "3.4.1"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/16/b0/572805e227f01586461c80e0fd25d65a2115599cc9dad142fee4b747c357/charset_normalizer-3.4.1.tar.gz", hash = "sha256:44251f18cd68a75b56585dd00dae26183e102cd5e0f9f1466e6df5da2ed64ea3", size = 123188 }
wheels = [
{ url = "https://files.pythonhosted.org/packages/0a/9a/dd1e1cdceb841925b7798369a09279bd1cf183cef0f9ddf15a3a6502ee45/charset_normalizer-3.4.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:73d94b58ec7fecbc7366247d3b0b10a21681004153238750bb67bd9012414545", size = 196105 },
{ url = "https://files.pythonhosted.org/packages/d3/8c/90bfabf8c4809ecb648f39794cf2a84ff2e7d2a6cf159fe68d9a26160467/charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dad3e487649f498dd991eeb901125411559b22e8d7ab25d3aeb1af367df5efd7", size = 140404 },
{ url = "https://files.pythonhosted.org/packages/ad/8f/e410d57c721945ea3b4f1a04b74f70ce8fa800d393d72899f0a40526401f/charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c30197aa96e8eed02200a83fba2657b4c3acd0f0aa4bdc9f6c1af8e8962e0757", size = 150423 },
{ url = "https://files.pythonhosted.org/packages/f0/b8/e6825e25deb691ff98cf5c9072ee0605dc2acfca98af70c2d1b1bc75190d/charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2369eea1ee4a7610a860d88f268eb39b95cb588acd7235e02fd5a5601773d4fa", size = 143184 },
{ url = "https://files.pythonhosted.org/packages/3e/a2/513f6cbe752421f16d969e32f3583762bfd583848b763913ddab8d9bfd4f/charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc2722592d8998c870fa4e290c2eec2c1569b87fe58618e67d38b4665dfa680d", size = 145268 },
{ url = "https://files.pythonhosted.org/packages/74/94/8a5277664f27c3c438546f3eb53b33f5b19568eb7424736bdc440a88a31f/charset_normalizer-3.4.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffc9202a29ab3920fa812879e95a9e78b2465fd10be7fcbd042899695d75e616", size = 147601 },
{ url = "https://files.pythonhosted.org/packages/7c/5f/6d352c51ee763623a98e31194823518e09bfa48be2a7e8383cf691bbb3d0/charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:804a4d582ba6e5b747c625bf1255e6b1507465494a40a2130978bda7b932c90b", size = 141098 },
{ url = "https://files.pythonhosted.org/packages/78/d4/f5704cb629ba5ab16d1d3d741396aec6dc3ca2b67757c45b0599bb010478/charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0f55e69f030f7163dffe9fd0752b32f070566451afe180f99dbeeb81f511ad8d", size = 149520 },
{ url = "https://files.pythonhosted.org/packages/c5/96/64120b1d02b81785f222b976c0fb79a35875457fa9bb40827678e54d1bc8/charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:c4c3e6da02df6fa1410a7680bd3f63d4f710232d3139089536310d027950696a", size = 152852 },
{ url = "https://files.pythonhosted.org/packages/84/c9/98e3732278a99f47d487fd3468bc60b882920cef29d1fa6ca460a1fdf4e6/charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:5df196eb874dae23dcfb968c83d4f8fdccb333330fe1fc278ac5ceeb101003a9", size = 150488 },
{ url = "https://files.pythonhosted.org/packages/13/0e/9c8d4cb99c98c1007cc11eda969ebfe837bbbd0acdb4736d228ccaabcd22/charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e358e64305fe12299a08e08978f51fc21fac060dcfcddd95453eabe5b93ed0e1", size = 146192 },
{ url = "https://files.pythonhosted.org/packages/b2/21/2b6b5b860781a0b49427309cb8670785aa543fb2178de875b87b9cc97746/charset_normalizer-3.4.1-cp312-cp312-win32.whl", hash = "sha256:9b23ca7ef998bc739bf6ffc077c2116917eabcc901f88da1b9856b210ef63f35", size = 95550 },
{ url = "https://files.pythonhosted.org/packages/21/5b/1b390b03b1d16c7e382b561c5329f83cc06623916aab983e8ab9239c7d5c/charset_normalizer-3.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:6ff8a4a60c227ad87030d76e99cd1698345d4491638dfa6673027c48b3cd395f", size = 102785 },
{ url = "https://files.pythonhosted.org/packages/38/94/ce8e6f63d18049672c76d07d119304e1e2d7c6098f0841b51c666e9f44a0/charset_normalizer-3.4.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:aabfa34badd18f1da5ec1bc2715cadc8dca465868a4e73a0173466b688f29dda", size = 195698 },
{ url = "https://files.pythonhosted.org/packages/24/2e/dfdd9770664aae179a96561cc6952ff08f9a8cd09a908f259a9dfa063568/charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22e14b5d70560b8dd51ec22863f370d1e595ac3d024cb8ad7d308b4cd95f8313", size = 140162 },
{ url = "https://files.pythonhosted.org/packages/24/4e/f646b9093cff8fc86f2d60af2de4dc17c759de9d554f130b140ea4738ca6/charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8436c508b408b82d87dc5f62496973a1805cd46727c34440b0d29d8a2f50a6c9", size = 150263 },
{ url = "https://files.pythonhosted.org/packages/5e/67/2937f8d548c3ef6e2f9aab0f6e21001056f692d43282b165e7c56023e6dd/charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2d074908e1aecee37a7635990b2c6d504cd4766c7bc9fc86d63f9c09af3fa11b", size = 142966 },
{ url = "https://files.pythonhosted.org/packages/52/ed/b7f4f07de100bdb95c1756d3a4d17b90c1a3c53715c1a476f8738058e0fa/charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:955f8851919303c92343d2f66165294848d57e9bba6cf6e3625485a70a038d11", size = 144992 },
{ url = "https://files.pythonhosted.org/packages/96/2c/d49710a6dbcd3776265f4c923bb73ebe83933dfbaa841c5da850fe0fd20b/charset_normalizer-3.4.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:44ecbf16649486d4aebafeaa7ec4c9fed8b88101f4dd612dcaf65d5e815f837f", size = 147162 },
{ url = "https://files.pythonhosted.org/packages/b4/41/35ff1f9a6bd380303dea55e44c4933b4cc3c4850988927d4082ada230273/charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0924e81d3d5e70f8126529951dac65c1010cdf117bb75eb02dd12339b57749dd", size = 140972 },
{ url = "https://files.pythonhosted.org/packages/fb/43/c6a0b685fe6910d08ba971f62cd9c3e862a85770395ba5d9cad4fede33ab/charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:2967f74ad52c3b98de4c3b32e1a44e32975e008a9cd2a8cc8966d6a5218c5cb2", size = 149095 },
{ url = "https://files.pythonhosted.org/packages/4c/ff/a9a504662452e2d2878512115638966e75633519ec11f25fca3d2049a94a/charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:c75cb2a3e389853835e84a2d8fb2b81a10645b503eca9bcb98df6b5a43eb8886", size = 152668 },
{ url = "https://files.pythonhosted.org/packages/6c/71/189996b6d9a4b932564701628af5cee6716733e9165af1d5e1b285c530ed/charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:09b26ae6b1abf0d27570633b2b078a2a20419c99d66fb2823173d73f188ce601", size = 150073 },
{ url = "https://files.pythonhosted.org/packages/e4/93/946a86ce20790e11312c87c75ba68d5f6ad2208cfb52b2d6a2c32840d922/charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fa88b843d6e211393a37219e6a1c1df99d35e8fd90446f1118f4216e307e48cd", size = 145732 },
{ url = "https://files.pythonhosted.org/packages/cd/e5/131d2fb1b0dddafc37be4f3a2fa79aa4c037368be9423061dccadfd90091/charset_normalizer-3.4.1-cp313-cp313-win32.whl", hash = "sha256:eb8178fe3dba6450a3e024e95ac49ed3400e506fd4e9e5c32d30adda88cbd407", size = 95391 },
{ url = "https://files.pythonhosted.org/packages/27/f2/4f9a69cc7712b9b5ad8fdb87039fd89abba997ad5cbe690d1835d40405b0/charset_normalizer-3.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:b1ac5992a838106edb89654e0aebfc24f5848ae2547d22c2c3f66454daa11971", size = 102702 },
{ url = "https://files.pythonhosted.org/packages/0e/f6/65ecc6878a89bb1c23a086ea335ad4bf21a588990c3f535a227b9eea9108/charset_normalizer-3.4.1-py3-none-any.whl", hash = "sha256:d98b1668f06378c6dbefec3b92299716b931cd4e6061f3c875a71ced1780ab85", size = 49767 },
]
[[package]]
name = "dotenv"
version = "0.9.9"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "python-dotenv" },
]
wheels = [
{ url = "https://files.pythonhosted.org/packages/b2/b7/545d2c10c1fc15e48653c91efde329a790f2eecfbbf2bd16003b5db2bab0/dotenv-0.9.9-py2.py3-none-any.whl", hash = "sha256:29cf74a087b31dafdb5a446b6d7e11cbce8ed2741540e2339c69fbef92c94ce9", size = 1892 },
]
[[package]]
name = "idna"
version = "3.10"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/f1/70/7703c29685631f5a7590aa73f1f1d3fa9a380e654b86af429e0934a32f7d/idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9", size = 190490 }
wheels = [
{ url = "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3", size = 70442 },
]
[[package]]
name = "python-dotenv"
version = "1.0.1"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/bc/57/e84d88dfe0aec03b7a2d4327012c1627ab5f03652216c63d49846d7a6c58/python-dotenv-1.0.1.tar.gz", hash = "sha256:e324ee90a023d808f1959c46bcbc04446a10ced277783dc6ee09987c37ec10ca", size = 39115 }
wheels = [
{ url = "https://files.pythonhosted.org/packages/6a/3e/b68c118422ec867fa7ab88444e1274aa40681c606d59ac27de5a5588f082/python_dotenv-1.0.1-py3-none-any.whl", hash = "sha256:f7b63ef50f1b690dddf550d03497b66d609393b40b564ed0d674909a68ebf16a", size = 19863 },
]
[[package]]
name = "requests"
version = "2.32.3"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "certifi" },
{ name = "charset-normalizer" },
{ name = "idna" },
{ name = "urllib3" },
]
sdist = { url = "https://files.pythonhosted.org/packages/63/70/2bf7780ad2d390a8d301ad0b550f1581eadbd9a20f896afe06353c2a2913/requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760", size = 131218 }
wheels = [
{ url = "https://files.pythonhosted.org/packages/f9/9b/335f9764261e915ed497fcdeb11df5dfd6f7bf257d4a6a2a686d80da4d54/requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6", size = 64928 },
]
[[package]]
name = "steam-games-report"
version = "0.1.0"
source = { virtual = "." }
dependencies = [
{ name = "dotenv" },
{ name = "requests" },
]
[package.metadata]
requires-dist = [
{ name = "dotenv", specifier = ">=0.9.9" },
{ name = "requests", specifier = ">=2.32.3" },
]
[[package]]
name = "urllib3"
version = "2.3.0"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/aa/63/e53da845320b757bf29ef6a9062f5c669fe997973f966045cb019c3f4b66/urllib3-2.3.0.tar.gz", hash = "sha256:f8c5449b3cf0861679ce7e0503c7b44b5ec981bec0d1d3795a07f1ba96f0204d", size = 307268 }
wheels = [
{ url = "https://files.pythonhosted.org/packages/c8/19/4ec628951a74043532ca2cf5d97b7b14863931476d117c471e8e2b1eb39f/urllib3-2.3.0-py3-none-any.whl", hash = "sha256:1cee9ad369867bfdbbb48b7dd50374c0967a0bb7710050facf0dd6911440e3df", size = 128369 },
]