1
+ # SPDX-FileCopyrightText: 2022 DJDevon3 (Neradoc & Deshipu helped) for Adafruit Industries
2
+ # SPDX-License-Identifier: MIT
3
+ # Coded for Circuit Python 8.0
4
+ """DJDevon3 Adafruit Feather ESP32-S2 api_steam Example"""
5
+ import os
6
+ import gc
7
+ import time
8
+ import ssl
9
+ import json
10
+ import wifi
11
+ import socketpool
12
+ import adafruit_requests
13
+
14
+ # Ensure these are setup in settings.toml
15
+ # Requires Steam Developer API key
16
+ ssid = os .getenv ('AP_SSID' )
17
+ appw = os .getenv ('AP_PASSWORD' )
18
+ steam_usernumber = os .getenv ('steam_id' )
19
+ steam_apikey = os .getenv ('steam_api_key' )
20
+
21
+ # Initialize WiFi Pool (There can be only 1 pool & top of script)
22
+ pool = socketpool .SocketPool (wifi .radio )
23
+
24
+ # Time between API refreshes
25
+ # 900 = 15 mins, 1800 = 30 mins, 3600 = 1 hour
26
+ sleep_time = 900
27
+
28
+ # Deconstruct URL
29
+ # http://api.steampowered.com/IPlayerService/GetOwnedGames/v0001/?key=XXXXXXXXXXXXXXXXXXXXX&steamid=XXXXXXXXXXXXXXXX&format=json
30
+ Steam_OwnedGames_URL = ("http://api.steampowered.com/IPlayerService/GetOwnedGames/v0001/?"
31
+ + "key="
32
+ + steam_apikey
33
+ + "&steamid="
34
+ + steam_usernumber
35
+ + "&format=json"
36
+ )
37
+
38
+ if sleep_time < 60 :
39
+ sleep_time_conversion = "seconds"
40
+ sleep_int = sleep_time
41
+ elif 60 <= sleep_time < 3600 :
42
+ sleep_int = sleep_time / 60
43
+ sleep_time_conversion = "minutes"
44
+ elif 3600 <= sleep_time < 86400 :
45
+ sleep_int = sleep_time / 60 / 60
46
+ sleep_time_conversion = "hours"
47
+ else :
48
+ sleep_int = sleep_time / 60 / 60 / 24
49
+ sleep_time_conversion = "days"
50
+
51
+ # Connect to Wi-Fi
52
+ print ("\n ===============================" )
53
+ print ("Connecting to WiFi..." )
54
+ requests = adafruit_requests .Session (pool , ssl .create_default_context ())
55
+ while not wifi .radio .ipv4_address :
56
+ try :
57
+ wifi .radio .connect (ssid , appw )
58
+ except ConnectionError as e :
59
+ print ("Connection Error:" , e )
60
+ print ("Retrying in 10 seconds" )
61
+ time .sleep (10 )
62
+ gc .collect ()
63
+ print ("Connected!\n " )
64
+
65
+
66
+ while True :
67
+ try :
68
+ print ("\n Attempting to GET STEAM Stats!" ) # --------------------------------
69
+ # Print Request to Serial
70
+ debug_request = False # Set true to see full request
71
+ if debug_request :
72
+ print ("Full API GET URL: " , Steam_OwnedGames_URL )
73
+ print ("===============================" )
74
+ try :
75
+ steam_response = requests .get (url = Steam_OwnedGames_URL ).json ()
76
+ except ConnectionError as e :
77
+ print ("Connection Error:" , e )
78
+ print ("Retrying in 10 seconds" )
79
+
80
+ # Print Response to Serial
81
+ debug_response = False # Set true to see full response
82
+ if debug_response :
83
+ dump_object = json .dumps (steam_response )
84
+ print ("JSON Dump: " , dump_object )
85
+
86
+ # Print Keys to Serial
87
+ steam_debug_keys = True # Set True to print Serial data
88
+ if steam_debug_keys :
89
+
90
+ game_count = steam_response ["response" ]["game_count" ]
91
+ print ("Total Games: " , game_count )
92
+ total_minutes = 0
93
+
94
+ for game in steam_response ["response" ]["games" ]:
95
+ total_minutes += game ["playtime_forever" ]
96
+ total_hours = total_minutes / 60
97
+ total_days = total_minutes / 60 / 24
98
+ print (f'Total Hours: { total_hours } ' )
99
+ print (f'Total Days: { total_days } ' )
100
+
101
+ print ("Monotonic: " , time .monotonic ())
102
+
103
+ print ("\n Finished!" )
104
+ print ("Next Update in %s %s" % (int (sleep_int ), sleep_time_conversion ))
105
+ print ("===============================" )
106
+ gc .collect ()
107
+
108
+ except (ValueError , RuntimeError ) as e :
109
+ print ("Failed to get data, retrying\n " , e )
110
+ time .sleep (60 )
111
+ continue
112
+ time .sleep (sleep_time )
0 commit comments