Skip to content

Add API examples for various social media sites #115

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 10 commits into from
Nov 12, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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