init commit
This commit is contained in:
commit
510eaa81f4
18
readme.md
Normal file
18
readme.md
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
## Strategic Transfer of Resources Incase (K)anvas Extinct
|
||||||
|
STRIKE
|
||||||
|
|
||||||
|
Very simple to use, install dependencies, generate your canvas API token and then run
|
||||||
|
|
||||||
|
**Make Sure you install the module requests with ```pip3 install requests```**
|
||||||
|
|
||||||
|
#### Generate your canvas API token
|
||||||
|
|
||||||
|
Login to canvas @ https://learn.ontariotechu.net
|
||||||
|
|
||||||
|
- Go to the sidebar and click on your profile.
|
||||||
|
- Then goto settings and scroll down to approved integrations and click "+ New Access Token"
|
||||||
|
(For the purpose enter whatever you want) and then click "Generate Token"
|
||||||
|
|
||||||
|
#### Run the script
|
||||||
|
|
||||||
|
When running the script it will prompt for your api key, just paste it in and hit enter/return
|
||||||
82
strike.py
Normal file
82
strike.py
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
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()
|
||||||
Loading…
Reference in New Issue
Block a user