【问题标题】:Snapchat download all memories at onceSnapchat一次下载所有记忆
【发布时间】:2021-03-28 15:40:57
【问题描述】:

多年来,我在 snapchat 上保存了很多照片,现在我想检索,问题是它们不容易导出,但幸运的是,如果你上网,你可以请求所有数据(太好了)

如果我点击下载,我可以看到我所有的照片下载链接并使用本地 HTML 文件开始下载。

这就是棘手的部分,我需要下载大约 15,000 次,手动单击每个单独的下载需要很长时间,我尝试通过下载按钮提取所有链接,这会创建很多 Url(很棒) 但问题是,如果您将 url 传递到浏览器中,则会出现 ("Error: HTTP method GET is not supported by this URL")

我尝试了许多不同的 chrome 扩展,但没有一个显示实际下载,只有左侧的 HTML。

下载按钮是一个可点击的链接,它只是在选项卡中开始下载。它属于 Href A

我正在尝试找出批量下载每个单独文件的最佳方式。

【问题讨论】:

    标签: google-chrome url download snapchat


    【解决方案1】:

    所以,我只是通过下载自己的记忆来观看他们的代码。他们使用自定义 JavaScript 函数下载您的数据(正文中带有 ID 的 POST 请求)。

    您可以复制此请求,但也可以只使用他们的方法。 打开你的控制台并使用downloadMemories(<url>)

    或者,如果您没有网址,您可以自己检索它们:

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

    更新

    我为此编写了一个脚本: https://github.com/ToTheMax/Snapchat-All-Memories-Downloader

    【讨论】:

    • 嘿!谢谢回复。您的第二段代码完美运行。我应该让它在每次输入时都加 1 吗?我不熟悉。我知道如果将评估链接 [0] 更改为 [1] 它会执行第二个等。那么增加该数字的最快方法是什么?
    • 是的,在这种情况下循环是完美的!我很快尝试制作一个,但我的浏览器限制了同步下载的数量。需要某种超时来检查上一次下载是否成功,然后再开始下一次下载。我今晚没有时间制作一个工作脚本,但如果你有兴趣我会回来的!
    • 非常感谢你!我做了一个循环,而是使用了 Safari,它摆脱了烦人的多次下载限制! xD 我在你的帮助下想通了。非常感谢。度过一个愉快的夜晚/一天
    • 啊,很高兴听到!没问题:)
    • javascript中是否有可能在保存之前定义文件名?保存带有捕获日期的文件以对其进行排序会很好吗?你认为呢? - 好的,我在您的节点应用程序中看到,您就是这样做的.. 呵呵,谢谢!
    【解决方案2】:

    使用.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 文件放在同一目录下并运行即可。它会跳过已经下载的文件。

    【讨论】:

      【解决方案3】:

      简答

      下载自动执行此过程的桌面应用程序。

      访问downloadmysnapchatmemories.com 下载应用程序。您可以观看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');
      });
      
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-08-19
        • 1970-01-01
        • 1970-01-01
        • 2018-08-11
        相关资源
        最近更新 更多