Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Snapchat download all memories at once

Over the years on snapchat I have saved lots of photos that I would like to retrieve now, The problem is they do not make it easy to export, but luckily if you go online you can request all the data (thats great)

I can see all my photos download link and using the local HTML file if I click download it starts downloading.

Here's where the tricky part is, I have around 15,000 downloads I need to do and manually clicking each individual one will take ages, I've tried extracting all of the links through the download button and this creates lots of Urls (Great) but the problem is, if you past the url into the browser then ("Error: HTTP method GET is not supported by this URL") appears.

I've tried a multitude of different chrome extensions and none of them show the actually download, just the HTML which is on the left-hand side.

Here is what the local file looks like

The download button is a clickable link that just starts the download in the tab. It belongs under Href A

I'm trying to figure out what the best way of bulk downloading each of these individual files is.

like image 738
Readyteddygo Avatar asked Apr 06 '20 11:04

Readyteddygo


2 Answers

So, I just watched their code by downloading my own memories. They use a custom JavaScript function to download your data (a POST request with ID's in the body).

You can replicate this request, but you can also just use their method. Open your console and use downloadMemories(<url>)

Or if you don't have the urls you can retrieve them yourself:

var links = document.getElementsByTagName("table")[0].getElementsByTagName("a");
eval(links[0].href);

UPDATE

I made a script for this: https://github.com/ToTheMax/Snapchat-All-Memories-Downloader

like image 50
ToTheMax Avatar answered Nov 08 '22 02:11

ToTheMax


Using the .json file you can download them one by one with python:

req = requests.post(url, allow_redirects=True)
response = req.text
file = requests.get(response)

Then get the correct extension and the date:

day = date.split(" ")[0]
time = date.split(" ")[1].replace(':', '-')
filename = f'memories/{day}_{time}.mp4' if type == 'VIDEO' else f'memories/{day}_{time}.jpg'

And then write it to file:

with open(filename, 'wb') as f:
    f.write(file.content)

I've made a bot to download all memories.

You can download it here

It doesn't require any additional installation, just place the memories_history.json file in the same directory and run it. It skips the files that have already been downloaded.

like image 4
macie.k Avatar answered Nov 08 '22 02:11

macie.k