STRIKE/strike.py
2022-02-08 23:47:38 -05:00

82 lines
3.0 KiB
Python

import requests, json, os
from pathlib import Path
# STRIKE
# Strategic Transfer of Resources Incase (K)anvas Extinct
token = input('Paste your token here: ').replace(' ','') # the whole thing to the right of token, including 13377~
apikey = {'Authorization' : f'Bearer {token}'}
canvasURL = 'https://learn.ontariotechu.ca/'
filecount = 0
def getCourses():
url = f'{canvasURL}api/v1/courses/?per_page=100'
re = requests.get(url, headers=apikey)
courses = json.loads(re.content.decode())
courseids = {}
for course in courses:
if len(course) > 4:
CourseName = course['name'].replace("\\", ' ').replace("/", ' ')
courseids[CourseName] = course['id']
return courseids
def saveAnnouncements(courseid, name): ## IDK kinda broken seems to not
try:
os.makedirs(str(name))
except: pass
file = open(f'{name}/announcements.txt', 'w+')
url = f'{canvasURL}/api/v1/courses/{courseid}/activity_stream'
re = requests.get(url, headers=apikey)
announcements = json.loads(re.content.decode())
for a in announcements:
if a['type'] == 'Announcement':
file.write(f"{a['type']}{a['title']} @ {a['created_at']}\n{a['message']}\n\n")
file.close()
### https://learn.ontariotechu.ca/api/v1/courses/16750/assignments/95412/ submissions API ???
def getModules(course, name):
global filecount
try:
os.makedirs(str(name))
except: pass
try:
os.makedirs(str(f'{name}/files/'))
except: pass
url = f'{canvasURL}api/v1/courses/{course}/modules/'
re = requests.get(url, headers=apikey).content
modules = json.loads(re.decode())
for module in modules: ## Each Module
items = json.loads(requests.get(module['items_url'], headers=apikey).content)
for item in items: ## For each item attached
if item['type'] == 'File':
if not os.path.isfile(f"{name}/files/{item['title']}"):
filecount += 1
print(f"\t \t Downloading {item['title']}")
## Grab the attachment for the module
attachment = json.loads(requests.get(item['url'], headers=apikey).content)
## Write File that was at the URL
try:
file = requests.get(attachment['url']).content
Path(f"{name}/files/{attachment['display_name']}").write_bytes(file)
except:
print('****Download Failed****')
else:
filecount += 1
print(f"File {item['title']} Exists SKIPPING")
def main():
courses = getCourses()
for course in courses:
print('+'*20)
print(f'Downloading Content for {course}...')
print('+'*20)
saveAnnouncements(courses[course], course)
getModules(courses[course],course)
print(f'Archive Completed, downloaded {str(filecount)} files for {str(len(courses))} Courses')
main()