Skip to content

Commit

Permalink
Merge pull request #115 from DJDevon3/main
Browse files Browse the repository at this point in the history
Add API examples for various social media sites
  • Loading branch information
FoamyGuy authored Nov 12, 2022
2 parents 8a19521 + c662605 commit 640bfac
Show file tree
Hide file tree
Showing 5 changed files with 556 additions and 0 deletions.
104 changes: 104 additions & 0 deletions examples/requests_adafruit_discord_active_online.py
Original file line number Diff line number Diff line change
@@ -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)
110 changes: 110 additions & 0 deletions examples/requests_api_discord.py
Original file line number Diff line number Diff line change
@@ -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)
105 changes: 105 additions & 0 deletions examples/requests_api_github.py
Original file line number Diff line number Diff line change
@@ -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)
Loading

0 comments on commit 640bfac

Please sign in to comment.