Snapchat 一次性下载所有回忆
Snapchat download all memories at once
多年来我在 snapchat 上保存了很多照片,现在我想找回它们,问题是它们不容易导出,但幸运的是,如果你上网,你可以请求所有数据(就是这样)很棒)
我可以看到我所有的照片下载 link 并使用本地 HTML 文件如果我点击下载它开始下载。
这是棘手的部分,我需要进行大约 15,000 次下载,手动单击每个单独的下载需要很长时间,我尝试通过下载按钮提取所有 link,然后这会创建很多 Urls(很棒)但问题是,如果您将 url 传递到浏览器中,则会出现 ("Error: HTTP method GET is not supported by this URL")。
我尝试了多种不同的 chrome 扩展,其中 none 显示了实际下载,只是左侧的 HTML。
下载按钮是一个可点击的 link,它只是在选项卡中开始下载。它属于 Href A
我正在尝试找出批量下载每个文件的最佳方式。
所以,我只是通过下载自己的记忆来观看他们的代码。他们使用自定义 JavaScript 函数下载您的数据(正文中带有 ID 的 POST 请求)。
你可以复制这个请求,但你也可以只使用他们的方法。
打开控制台并使用 downloadMemories(<url>)
或者,如果您没有 URL,您可以自己检索它们:
var links = document.getElementsByTagName("table")[0].getElementsByTagName("a");
eval(links[0].href);
更新
我为此编写了一个脚本:
https://github.com/ToTheMax/Snapchat-All-Memories-Downloader
使用 .json
文件,您可以通过 python:
一个一个地下载它们
req = requests.post(url, allow_redirects=True)
response = req.text
file = requests.get(response)
然后获取正确的分机号和日期:
day = date.split(" ")[0]
time = date.split(" ")[1].replace(':', '-')
filename = f'memories/{day}_{time}.mp4' if type == 'VIDEO' else f'memories/{day}_{time}.jpg'
然后写入文件:
with open(filename, 'wb') as f:
f.write(file.content)
我做了一个机器人来下载所有的回忆。
可以下载here
它不需要任何额外的安装,只需将 memories_history.json
文件和 运行 放在同一目录中即可。它会跳过已经下载的文件。
简答
下载可自动执行此过程的桌面应用程序。
访问 downloadmysnapchatmemories.com to download the app. You can watch this tutorial 指导您完成整个过程。
简而言之,该应用会读取 Snapchat 提供的 memories_history.json
文件,并将每个回忆下载到您的计算机上。
App source code
长答案(上述应用程序的工作原理)
我们可以遍历从 Snapchat 下载的数据中找到的 memories_history.json
文件中的每个记忆。
对于每个记忆,我们向存储为记忆 Download Link
的 URL 发出 POST
请求。响应将是对文件本身的 URL。
然后,我们可以向返回的 URL 发出 GET
请求以检索文件。
例子
这是一个简化的示例,使用NodeJS获取和下载单个内存:
假设我们在 fakeMemory.json
中存储了以下内存:
{
"Date": "2022-01-26 12:00:00 UTC",
"Media Type": "Image",
"Download Link": "https://app.snapchat.com/..."
}
我们可以做到以下几点:
// import required libraries
const fetch = require('node-fetch'); // Needed for making fetch requests
const fs = require('fs'); // Needed for writing to filesystem
const memory = JSON.parse(fs.readFileSync('fakeMemory.json'));
const response = await fetch(memory['Download Link'], { method: 'POST' });
const url = await response.text(); // returns URL to file
// We can now use the `url` to download the file.
const download = await fetch(url, { method: 'GET' });
const fileName = 'memory.jpg'; // file name we want this saved as
const fileData = download.body; // contents of the file
// Write the contents of the file to this computer using Node's file system
const fileStream = fs.createWriteStream(fileName);
fileData.pipe(fileStream);
fileStream.on('finish', () => {
console.log('memory successfully downloaded as memory.jpg');
});
多年来我在 snapchat 上保存了很多照片,现在我想找回它们,问题是它们不容易导出,但幸运的是,如果你上网,你可以请求所有数据(就是这样)很棒)
我可以看到我所有的照片下载 link 并使用本地 HTML 文件如果我点击下载它开始下载。
这是棘手的部分,我需要进行大约 15,000 次下载,手动单击每个单独的下载需要很长时间,我尝试通过下载按钮提取所有 link,然后这会创建很多 Urls(很棒)但问题是,如果您将 url 传递到浏览器中,则会出现 ("Error: HTTP method GET is not supported by this URL")。
我尝试了多种不同的 chrome 扩展,其中 none 显示了实际下载,只是左侧的 HTML。
下载按钮是一个可点击的 link,它只是在选项卡中开始下载。它属于 Href A
我正在尝试找出批量下载每个文件的最佳方式。
所以,我只是通过下载自己的记忆来观看他们的代码。他们使用自定义 JavaScript 函数下载您的数据(正文中带有 ID 的 POST 请求)。
你可以复制这个请求,但你也可以只使用他们的方法。
打开控制台并使用 downloadMemories(<url>)
或者,如果您没有 URL,您可以自己检索它们:
var links = document.getElementsByTagName("table")[0].getElementsByTagName("a");
eval(links[0].href);
更新
我为此编写了一个脚本: https://github.com/ToTheMax/Snapchat-All-Memories-Downloader
使用 .json
文件,您可以通过 python:
req = requests.post(url, allow_redirects=True)
response = req.text
file = requests.get(response)
然后获取正确的分机号和日期:
day = date.split(" ")[0]
time = date.split(" ")[1].replace(':', '-')
filename = f'memories/{day}_{time}.mp4' if type == 'VIDEO' else f'memories/{day}_{time}.jpg'
然后写入文件:
with open(filename, 'wb') as f:
f.write(file.content)
我做了一个机器人来下载所有的回忆。
可以下载here
它不需要任何额外的安装,只需将 memories_history.json
文件和 运行 放在同一目录中即可。它会跳过已经下载的文件。
简答
下载可自动执行此过程的桌面应用程序。
访问 downloadmysnapchatmemories.com to download the app. You can watch this tutorial 指导您完成整个过程。
简而言之,该应用会读取 Snapchat 提供的 memories_history.json
文件,并将每个回忆下载到您的计算机上。
App source code
长答案(上述应用程序的工作原理)
我们可以遍历从 Snapchat 下载的数据中找到的 memories_history.json
文件中的每个记忆。
对于每个记忆,我们向存储为记忆 Download Link
的 URL 发出 POST
请求。响应将是对文件本身的 URL。
然后,我们可以向返回的 URL 发出 GET
请求以检索文件。
例子
这是一个简化的示例,使用NodeJS获取和下载单个内存:
假设我们在 fakeMemory.json
中存储了以下内存:
{
"Date": "2022-01-26 12:00:00 UTC",
"Media Type": "Image",
"Download Link": "https://app.snapchat.com/..."
}
我们可以做到以下几点:
// import required libraries
const fetch = require('node-fetch'); // Needed for making fetch requests
const fs = require('fs'); // Needed for writing to filesystem
const memory = JSON.parse(fs.readFileSync('fakeMemory.json'));
const response = await fetch(memory['Download Link'], { method: 'POST' });
const url = await response.text(); // returns URL to file
// We can now use the `url` to download the file.
const download = await fetch(url, { method: 'GET' });
const fileName = 'memory.jpg'; // file name we want this saved as
const fileData = download.body; // contents of the file
// Write the contents of the file to this computer using Node's file system
const fileStream = fs.createWriteStream(fileName);
fileData.pipe(fileStream);
fileStream.on('finish', () => {
console.log('memory successfully downloaded as memory.jpg');
});