Skip to content

Instantly share code, notes, and snippets.

@dedy-purwanto
Created April 11, 2020 17:08
Show Gist options
  • Star 10 You must be signed in to star a gist
  • Fork 8 You must be signed in to fork a gist
  • Save dedy-purwanto/6ad1fa7c702981f35f25da780c50914d to your computer and use it in GitHub Desktop.
Save dedy-purwanto/6ad1fa7c702981f35f25da780c50914d to your computer and use it in GitHub Desktop.
Download all photos and videos from your Class Dojo account
"""
Download all ClassDojo photos and videos in your timeline.
by kecebongsoft
How it works:
1. Fetch list of items in the timeline, if there are multiple pages, it will fetch for all pages.
2. Collect list of URLs for the attachment for each item
3. Download the files into local temporary directory, and also save the timeline activity as a json file.
How to use:
1. Modify the session cookie in this script, check your session cookie by opening classdojo in browser and copy
the following cookies: dojo_log_session_id, dojo_login.sid, and dojo_home_login.sid
2. Run this script and wait for it to finish.
If error happens:
1. I ran this script in windows, make sure your path is correct if you are on linux
2. Make sure "classdojo_output" directory exists in the same folder as this script
3. Make sure you have a correct session cookies set in this script.
4. Make sure you can open the FEED_URL listed in this script from within your browser (assuming you can open ClassDojo website)
"""
import requests, json, tempfile
print('Starting')
FEED_URL = 'https://home.classdojo.com/api/storyFeed?includePrivate=true'
DESTINATION = tempfile.mkdtemp(dir='classdojo_output') #make sure this directory exists in the same place as this script.
SESSION_COOKIES = {
'dojo_log_session_id': '<insert here>',
'dojo_login.sid': '<insert here>',
'dojo_home_login.sid': '<insert here>',
}
def save_json(json_content):
with open('%s\\data.json' % DESTINATION, 'w') as f: #you might want something like '/' if you're on linux.
f.write(json.dumps(json_content, indent=4))
def get_items(feed_url):
print('Fetching items: %s..' % feed_url)
resp = requests.get(feed_url, cookies=SESSION_COOKIES)
data = resp.json()
prev = data.get('_links', {}).get('prev', {}).get('href')
return data['_items'], prev
def get_urls(feed_url):
items, prev = get_items(feed_url)
while prev and feed_url != prev:
prev_urls, prev = get_items(prev)
items.extend(prev_urls)
save_json(items)
urls = []
for item in items:
attachments = item['contents'].get('attachments', {})
if not attachments: continue
for attachment in attachments:
urls.append(attachment['path'])
return urls
def get_name_from_url(url):
parts = url.split('/')
return '_'.join(parts[3:]).replace('-', '_')
def download_urls(urls):
total = len(urls)
for index, url in enumerate(urls):
name = get_name_from_url(url)
print('Downloading %s/%s %s -> %s' % (index, total, url, name))
with open('%s\\%s' % (DESTINATION, name), 'wb') as f:
resp = requests.get(url, cookies=SESSION_COOKIES)
f.write(resp.content)
download_urls(get_urls(FEED_URL))
print('Done!')
@shaunkillian
Copy link

shaunkillian commented Apr 27, 2020

Hi Kate
I'm a teacher wanting to download portfolio photos from classdojo. However, calling me a novice at coding would be an understatement.
Where and how do I insert this code?
I have read your instructions above, but I am still unsure how to:

  • Check my session cookies
  • Run the script
    Any help would be much appreciated.
    Cheers
    Shaun

@amathub
Copy link

amathub commented May 26, 2020

Hi Kate
I'm a teacher wanting to download portfolio photos from classdojo. However, calling me a novice at coding would be an understatement.
Where and how do I insert this code?
I have read your instructions above, but I am still unsure how to:

* Check my session cookies

* Run the script
  Any help would be much appreciated.
  Cheers
  Shaun

I just ran this and it worked great. It copies from a downloaded temp folder and has useless filenames, but you can batch rename them pretty easily.

You'll need to get your cookie id's using something like "Cookie Quick Manager" extension for Firefox.
Copy the cookie id's into the script where designated...lines 32, 33, 34.

Make sure you have python installed and install the requests module as well.
Make sure you create a subfolder where the script is located called "classdojo_output".

Run the python script: I did it on windows by opening a command prompt and change the directory to the script folder
then type "python <script name>"

@ought74
Copy link

ought74 commented Jul 15, 2020

I have set this up and runs, but all it will do is create the json file in the classdojo_output folder. There are no images or videos at all.

Can anybody help, my daughters account is being turned off tomorrow. Thank you!

@pohutukawa
Copy link

pohutukawa commented Aug 25, 2020

It's best to use os.path.join() instead of using a \\ path separator. Even though, I believe a / should also work on Wintendo.

@kecebongsoft Thanks for the script. I have modified it to better suit my purpose, and introduced a NOT_BEFORE parameter to more easily keep a cache/offline-copy here. I'll try to put a bit of a CLI around it and may share it here later.

https://gist.github.com/pohutukawa/7ae9091c543d76022543a84a74f7d014

@seb-giroux
Copy link

You're a savior. Thanks for this script, much appreciated :)

@x-kej
Copy link

x-kej commented May 20, 2022

This is fantastic, thank you! Do you have any ideas for grabbing the comments on pictures? I can try to figure out how to get them but wanted to ask before I started from scratch.

@igrepstuff
Copy link

Bravo!

@felahdab
Copy link

Very good script indeed.
Worked as expected for me.
Thanks a lot.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment