commit ed5a080f28e7fdb4b0e8e73ce5289f7e772e4a60 Author: Jared Swets Date: Fri Mar 21 02:07:45 2025 +0000 feat: initial commit with basic working script diff --git a/.env.sample b/.env.sample new file mode 100644 index 0000000..67de6ba --- /dev/null +++ b/.env.sample @@ -0,0 +1,2 @@ +STEAM_API_KEY= +STEAM_ID= \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..898e654 --- /dev/null +++ b/.gitignore @@ -0,0 +1,12 @@ +# Python-generated files +__pycache__/ +*.py[oc] +build/ +dist/ +wheels/ +*.egg-info + +# Virtual environments +.venv + +.env \ No newline at end of file diff --git a/.python-version b/.python-version new file mode 100644 index 0000000..e4fba21 --- /dev/null +++ b/.python-version @@ -0,0 +1 @@ +3.12 diff --git a/README.md b/README.md new file mode 100644 index 0000000..e69de29 diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..67eb223 --- /dev/null +++ b/pyproject.toml @@ -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", +] diff --git a/steam_games_2024.csv b/steam_games_2024.csv new file mode 100644 index 0000000..5119992 --- /dev/null +++ b/steam_games_2024.csv @@ -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 diff --git a/steam_scrape.py b/steam_scrape.py new file mode 100644 index 0000000..a25b989 --- /dev/null +++ b/steam_scrape.py @@ -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() \ No newline at end of file diff --git a/uv.lock b/uv.lock new file mode 100644 index 0000000..1ba7a0b --- /dev/null +++ b/uv.lock @@ -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 }, +]