diff --git a/examples/requests_adafruit_discord_active_online.py b/examples/requests_adafruit_discord_active_online.py new file mode 100644 index 0000000..0175593 --- /dev/null +++ b/examples/requests_adafruit_discord_active_online.py @@ -0,0 +1,104 @@ +# SPDX-FileCopyrightText: 2022 DJDevon3 for Adafruit Industries +# SPDX-License-Identifier: MIT +# Coded for Circuit Python 8.0 +"""DJDevon3 Adafruit Feather ESP32-S2 Adafruit_Discord_Active_Users_Example""" +import gc +import time +import ssl +import json +import wifi +import socketpool +import adafruit_requests + +# No user or token required, 100% JSON web scrape from SHIELDS.IO +# Adafruit uses Shields.IO to see online users + +# Initialize WiFi Pool (There can be only 1 pool & top of script) +pool = socketpool.SocketPool(wifi.radio) + +# Time between API refreshes +# 900 = 15 mins, 1800 = 30 mins, 3600 = 1 hour +sleep_time = 900 + +try: + from secrets import secrets +except ImportError: + print("Secrets File Import Error") + raise + +if sleep_time < 60: + sleep_time_conversion = "seconds" + sleep_int = sleep_time +elif 60 <= sleep_time < 3600: + sleep_int = sleep_time / 60 + sleep_time_conversion = "minutes" +elif 3600 <= sleep_time < 86400: + sleep_int = sleep_time / 60 / 60 + sleep_time_conversion = "hours" +else: + sleep_int = sleep_time / 60 / 60 / 24 + sleep_time_conversion = "days" + +# Originally attempted to use SVG. Found JSON exists with same filename. +# https://img.shields.io/discord/327254708534116352.svg +ADA_DISCORD_JSON = "https://img.shields.io/discord/327254708534116352.json" + +# Connect to Wi-Fi +print("\n===============================") +print("Connecting to WiFi...") +requests = adafruit_requests.Session(pool, ssl.create_default_context()) +while not wifi.radio.ipv4_address: + try: + wifi.radio.connect(secrets["ssid"], secrets["password"]) + except ConnectionError as e: + print("Connection Error:", e) + print("Retrying in 10 seconds") + time.sleep(10) + gc.collect() +print("Connected!\n") + +while True: + try: + print( + "\nAttempting to GET DISCORD SHIELD JSON!" + ) # -------------------------------- + # Print Request to Serial + debug_request = True # Set true to see full request + if debug_request: + print("Full API GET URL: ", ADA_DISCORD_JSON) + print("===============================") + try: + ada_response = requests.get(ADA_DISCORD_JSON).json() + except ConnectionError as e: + print("Connection Error:", e) + print("Retrying in 10 seconds") + + # Print Full JSON to Serial + full_ada_json_response = True # Change to true to see full response + if full_ada_json_response: + ada_dump_object = json.dumps(ada_response) + print("JSON Dump: ", ada_dump_object) + + # Print Debugging to Serial + ada_debug = True # Set to True to print Serial data + if ada_debug: + ada_users = ada_response["value"] + print("JSON Value: ", ada_users) + online_string = " online" + replace_with_nothing = "" + string_replace_users = ada_users.replace( + online_string, replace_with_nothing + ) + print("Replaced Value: ", string_replace_users) + print("Monotonic: ", time.monotonic()) + + print("\nFinished!") + print("Next Update in %s %s" % (int(sleep_int), sleep_time_conversion)) + print("===============================") + gc.collect() + + except (ValueError, RuntimeError) as e: + print("Failed to get data, retrying\n", e) + time.sleep(60) + continue + time.sleep(sleep_time) diff --git a/examples/requests_api_discord.py b/examples/requests_api_discord.py new file mode 100644 index 0000000..e233d8a --- /dev/null +++ b/examples/requests_api_discord.py @@ -0,0 +1,110 @@ +# SPDX-FileCopyrightText: 2022 DJDevon3 for Adafruit Industries +# SPDX-License-Identifier: MIT +# Coded for Circuit Python 8.0 +"""DJDevon3 Adafruit Feather ESP32-S2 Discord_API_Example""" +import gc +import time +import ssl +import json +import wifi +import socketpool +import adafruit_requests + +# Active Logged in User Account Required, no tokens required +# WEB SCRAPE authorization key required. Visit URL below. +# Learn how: https://github.com/lorenz234/Discord-Data-Scraping + +# Ensure this is in secrets.py or .env +# "Discord_Authorization": "Discord Authorization from browser console" + +# Initialize WiFi Pool (There can be only 1 pool & top of script) +pool = socketpool.SocketPool(wifi.radio) + +# Time between API refreshes +# 900 = 15 mins, 1800 = 30 mins, 3600 = 1 hour +sleep_time = 900 + +try: + from secrets import secrets +except ImportError: + print("Secrets File Import Error") + raise + +if sleep_time < 60: + sleep_time_conversion = "seconds" + sleep_int = sleep_time +elif 60 <= sleep_time < 3600: + sleep_int = sleep_time / 60 + sleep_time_conversion = "minutes" +elif 3600 <= sleep_time < 86400: + sleep_int = sleep_time / 60 / 60 + sleep_time_conversion = "hours" +else: + sleep_int = sleep_time / 60 / 60 / 24 + sleep_time_conversion = "days" + +discord_header = {"Authorization": "" + secrets["Discord_Authorization"]} +ADA_SOURCE = ( + "https://discord.com/api/v10/guilds/" + + "327254708534116352" # Adafruit Discord ID + + "/preview" +) + +# Connect to Wi-Fi +print("\n===============================") +print("Connecting to WiFi...") +requests = adafruit_requests.Session(pool, ssl.create_default_context()) +while not wifi.radio.ipv4_address: + try: + wifi.radio.connect(secrets["ssid"], secrets["password"]) + except ConnectionError as e: + print("Connection Error:", e) + print("Retrying in 10 seconds") + time.sleep(10) + gc.collect() +print("Connected!\n") + +while True: + try: + print( + "\nAttempting to GET DISCORD PREVIEW!" + ) # -------------------------------- + # Print Request to Serial + debug_request = False # Set true to see full request + if debug_request: + print("Full API GET URL: ", ADA_SOURCE) + print("===============================") + try: + ada_res = requests.get(url=ADA_SOURCE, headers=discord_header).json() + except ConnectionError as e: + print("Connection Error:", e) + print("Retrying in 10 seconds") + + # Print Full JSON to Serial + discord_debug_response = False # Change to true to see full response + if discord_debug_response: + ada_discord_dump_object = json.dumps(ada_res) + print("JSON Dump: ", ada_discord_dump_object) + + # Print keys to Serial + discord_debug_keys = True # Set to True to print Serial data + if discord_debug_keys: + + ada_discord_all_members = ada_res["approximate_member_count"] + print("Members: ", ada_discord_all_members) + + ada_discord_all_members_online = ada_res["approximate_presence_count"] + print("Online: ", ada_discord_all_members_online) + + print("Monotonic: ", time.monotonic()) + + print("\nFinished!") + print("Next Update in %s %s" % (int(sleep_int), sleep_time_conversion)) + print("===============================") + gc.collect() + + except (ValueError, RuntimeError) as e: + print("Failed to get data, retrying\n", e) + time.sleep(60) + continue + time.sleep(sleep_time) diff --git a/examples/requests_api_github.py b/examples/requests_api_github.py new file mode 100644 index 0000000..4775a54 --- /dev/null +++ b/examples/requests_api_github.py @@ -0,0 +1,105 @@ +# SPDX-FileCopyrightText: 2022 DJDevon3 for Adafruit Industries +# SPDX-License-Identifier: MIT +# Coded for Circuit Python 8.0 +"""DJDevon3 Adafruit Feather ESP32-S2 Github_API_Example""" +import gc +import time +import ssl +import json +import wifi +import socketpool +import adafruit_requests + +# Github developer token required. +# Ensure these are uncommented and in secrets.py or .env +# "Github_username": "Your Github Username", +# "Github_token": "Your long API token", + +# Initialize WiFi Pool (There can be only 1 pool & top of script) +pool = socketpool.SocketPool(wifi.radio) + +# Time between API refreshes +# 900 = 15 mins, 1800 = 30 mins, 3600 = 1 hour +sleep_time = 900 + +try: + from secrets import secrets +except ImportError: + print("Secrets File Import Error") + raise + +if sleep_time < 60: + sleep_time_conversion = "seconds" + sleep_int = sleep_time +elif 60 <= sleep_time < 3600: + sleep_int = sleep_time / 60 + sleep_time_conversion = "minutes" +elif 3600 <= sleep_time < 86400: + sleep_int = sleep_time / 60 / 60 + sleep_time_conversion = "hours" +else: + sleep_int = sleep_time / 60 / 60 / 24 + sleep_time_conversion = "days" + +github_header = {"Authorization": " token " + secrets["Github_token"]} +GH_SOURCE = "https://api.github.com/users/" + secrets["Github_username"] + +# Connect to Wi-Fi +print("\n===============================") +print("Connecting to WiFi...") +requests = adafruit_requests.Session(pool, ssl.create_default_context()) +while not wifi.radio.ipv4_address: + try: + wifi.radio.connect(secrets["ssid"], secrets["password"]) + except ConnectionError as e: + print("Connection Error:", e) + print("Retrying in 10 seconds") + time.sleep(10) + gc.collect() +print("Connected!\n") + +while True: + try: + print("\nAttempting to GET GITHUB Stats!") # -------------------------------- + # Print Request to Serial + debug_request = False # Set true to see full request + if debug_request: + print("Full API GET URL: ", GH_SOURCE) + print("===============================") + try: + github_response = requests.get(url=GH_SOURCE, headers=github_header).json() + except ConnectionError as e: + print("Connection Error:", e) + print("Retrying in 10 seconds") + + # Print Response to Serial + debug_response = False # Set true to see full response + if debug_response: + dump_object = json.dumps(github_response) + print("JSON Dump: ", dump_object) + + # Print Keys to Serial + gh_debug_keys = True # Set True to print Serial data + if gh_debug_keys: + + github_id = github_response["id"] + print("UserID: ", github_id) + + github_username = github_response["name"] + print("Username: ", github_username) + + github_followers = github_response["followers"] + print("Followers: ", github_followers) + + print("Monotonic: ", time.monotonic()) + + print("\nFinished!") + print("Next Update in %s %s" % (int(sleep_int), sleep_time_conversion)) + print("===============================") + gc.collect() + + except (ValueError, RuntimeError) as e: + print("Failed to get data, retrying\n", e) + time.sleep(60) + continue + time.sleep(sleep_time) diff --git a/examples/requests_api_twitter.py b/examples/requests_api_twitter.py new file mode 100644 index 0000000..6d0645e --- /dev/null +++ b/examples/requests_api_twitter.py @@ -0,0 +1,118 @@ +# SPDX-FileCopyrightText: 2022 DJDevon3 for Adafruit Industries +# SPDX-License-Identifier: MIT +# Coded for Circuit Python 8.0 +"""DJDevon3 Adafruit Feather ESP32-S2 Twitter_API_Example""" +import gc +import time +import ssl +import json +import wifi +import socketpool +import adafruit_requests + +# Twitter developer account bearer token required. +# Ensure these are uncommented and in secrets.py or .env +# "TW_userid": "Your Twitter user id", # numerical id not username +# "TW_bearer_token": "Your long API Bearer token", + +# Initialize WiFi Pool (There can be only 1 pool & top of script) +pool = socketpool.SocketPool(wifi.radio) + +# Time between API refreshes +# 900 = 15 mins, 1800 = 30 mins, 3600 = 1 hour +sleep_time = 900 + +try: + from secrets import secrets +except ImportError: + print("Secrets File Import Error") + raise + +if sleep_time < 60: + sleep_time_conversion = "seconds" + sleep_int = sleep_time +elif 60 <= sleep_time < 3600: + sleep_int = sleep_time / 60 + sleep_time_conversion = "minutes" +elif 3600 <= sleep_time < 86400: + sleep_int = sleep_time / 60 / 60 + sleep_time_conversion = "hours" +else: + sleep_int = sleep_time / 60 / 60 / 24 + sleep_time_conversion = "days" + +# Used with any Twitter 0auth request. +twitter_header = {"Authorization": "Bearer " + secrets["TW_bearer_token"]} +TW_SOURCE = ( + "https://api.twitter.com/2/users/" + + secrets["TW_userid"] + + "?user.fields=public_metrics,created_at,pinned_tweet_id" + + "&expansions=pinned_tweet_id" + + "&tweet.fields=created_at,public_metrics,source,context_annotations,entities" +) + +# Connect to Wi-Fi +print("\n===============================") +print("Connecting to WiFi...") +requests = adafruit_requests.Session(pool, ssl.create_default_context()) +while not wifi.radio.ipv4_address: + try: + wifi.radio.connect(secrets["ssid"], secrets["password"]) + except ConnectionError as e: + print("Connection Error:", e) + print("Retrying in 10 seconds") + time.sleep(10) + gc.collect() +print("Connected!\n") + +while True: + try: + print("\nAttempting to GET Twitter Stats!") # -------------------------------- + debug_request = False # Set true to see full request + if debug_request: + print("Full API GET URL: ", TW_SOURCE) + print("===============================") + try: + twitter_response = requests.get(url=TW_SOURCE, headers=twitter_header) + tw_json = twitter_response.json() + except ConnectionError as e: + print("Connection Error:", e) + print("Retrying in 10 seconds") + + # Print Full JSON to Serial + debug_response = False # Set true to see full response + if debug_response: + dump_object = json.dumps(tw_json) + print("JSON Dump: ", dump_object) + + # Print to Serial + tw_debug_keys = True # Set true to print Serial data + if tw_debug_keys: + + tw_userid = tw_json["data"]["id"] + print("User ID: ", tw_userid) + + tw_username = tw_json["data"]["name"] + print("Name: ", tw_username) + + tw_join_date = tw_json["data"]["created_at"] + print("Member Since: ", tw_join_date) + + tw_tweets = tw_json["data"]["public_metrics"]["tweet_count"] + print("Tweets: ", tw_tweets) + + tw_followers = tw_json["data"]["public_metrics"]["followers_count"] + print("Followers: ", tw_followers) + + print("Monotonic: ", time.monotonic()) + + print("\nFinished!") + print("Next Update in %s %s" % (int(sleep_int), sleep_time_conversion)) + print("===============================") + gc.collect() + + except (ValueError, RuntimeError) as e: + print("Failed to get data, retrying\n", e) + time.sleep(60) + continue + time.sleep(sleep_time) diff --git a/examples/requests_api_youtube.py b/examples/requests_api_youtube.py new file mode 100644 index 0000000..5fdacbb --- /dev/null +++ b/examples/requests_api_youtube.py @@ -0,0 +1,119 @@ +# SPDX-FileCopyrightText: 2022 DJDevon3 for Adafruit Industries +# SPDX-License-Identifier: MIT +# Coded for Circuit Python 8.0 +"""DJDevon3 Adafruit Feather ESP32-S2 YouTube_API_Example""" +import gc +import time +import ssl +import json +import wifi +import socketpool +import adafruit_requests + +# Ensure these are uncommented and in secrets.py or .env +# "YT_username": "Your YouTube Username", +# "YT_token" : "Your long API developer token", + +# Initialize WiFi Pool (There can be only 1 pool & top of script) +pool = socketpool.SocketPool(wifi.radio) + +# Time between API refreshes +# 900 = 15 mins, 1800 = 30 mins, 3600 = 1 hour +sleep_time = 900 + +try: + from secrets import secrets +except ImportError: + print("Secrets File Import Error") + raise + +if sleep_time < 60: + sleep_time_conversion = "seconds" + sleep_int = sleep_time +elif 60 <= sleep_time < 3600: + sleep_int = sleep_time / 60 + sleep_time_conversion = "minutes" +elif 3600 <= sleep_time < 86400: + sleep_int = sleep_time / 60 / 60 + sleep_time_conversion = "hours" +else: + sleep_int = sleep_time / 60 / 60 / 24 + sleep_time_conversion = "days" + +# https://youtube.googleapis.com/youtube/v3/channels?part=statistics&forUsername=[YOUR_USERNAME]&key=[YOUR_API_KEY] +YT_SOURCE = ( + "https://youtube.googleapis.com/youtube/v3/channels?" + + "part=statistics" + + "&forUsername=" + + secrets["YT_username"] + + "&key=" + + secrets["YT_token"] +) + +# Connect to Wi-Fi +print("\n===============================") +print("Connecting to WiFi...") +requests = adafruit_requests.Session(pool, ssl.create_default_context()) +while not wifi.radio.ipv4_address: + try: + wifi.radio.connect(secrets["ssid"], secrets["password"]) + except ConnectionError as e: + print("Connection Error:", e) + print("Retrying in 10 seconds") + time.sleep(10) + gc.collect() +print("Connected!\n") + +while True: + try: + print("Attempting to GET YouTube Stats!") # ---------------------------------- + debug_request = False # Set true to see full request + if debug_request: + print("Full API GET URL: ", YT_SOURCE) + print("===============================") + try: + response = requests.get(YT_SOURCE).json() + except ConnectionError as e: + print("Connection Error:", e) + print("Retrying in 10 seconds") + + # Print Full JSON to Serial + debug_response = False # Set true to see full response + if debug_response: + dump_object = json.dumps(response) + print("JSON Dump: ", dump_object) + + # Print to Serial + yt_debug_keys = True # Set to True to print Serial data + if yt_debug_keys: + print("Matching Results: ", response["pageInfo"]["totalResults"]) + + YT_request_kind = response["items"][0]["kind"] + print("Request Kind: ", YT_request_kind) + + YT_response_kind = response["kind"] + print("Response Kind: ", YT_response_kind) + + YT_channel_id = response["items"][0]["id"] + print("Channel ID: ", YT_channel_id) + + YT_videoCount = response["items"][0]["statistics"]["videoCount"] + print("Videos: ", YT_videoCount) + + YT_viewCount = response["items"][0]["statistics"]["viewCount"] + print("Views: ", YT_viewCount) + + YT_subsCount = response["items"][0]["statistics"]["subscriberCount"] + print("Subscribers: ", YT_subsCount) + print("Monotonic: ", time.monotonic()) + + print("\nFinished!") + print("Next Update in %s %s" % (int(sleep_int), sleep_time_conversion)) + print("===============================") + gc.collect() + + except (ValueError, RuntimeError) as e: + print("Failed to get data, retrying\n", e) + time.sleep(60) + continue + time.sleep(sleep_time)