【问题标题】:Programmatically Download Content from Shared Dropbox Folder Links以编程方式从共享 Dropbox 文件夹链接下载内容
【发布时间】:2013-12-12 04:49:20
【问题描述】:

我正在构建一个应用程序来自动触发下载与用户共享的 Dropbox 文件(共享文件/文件夹链接)。正如here 所述,这对于 Dropbox 文件链接的实现非常简单。

不幸的是,这不适用于共享文件夹。任何人都对我如何可以提出建议

  • 下载它的所有内容(也许可以获取其中要下载的文件链接列表?)
  • 下载文件夹的 zip 文件

目前我可以转到 url 并进行一些屏幕抓取以尝试获取内容列表,但链接的 Dropbox 博客条目中描述的文件解决方案的优点是不需要抓取,所以它更多可靠和高效。

【问题讨论】:

  • 标准 FTP 库在这种情况下不起作用,比如 paramiko?
  • 这仅适用于 Dropbox 共享链接。更新了第一行以使其更清晰。

标签: python dropbox dropbox-api


【解决方案1】:

这确实应该通过使用awesome Dropbox Core API 来完成,它允许您uploaddownload files,查看file deltas 上的信息和shared folders/files 上的信息。

API 相当简单,因为它返回一个通用 URL,可以从 Dropbox 帐户下载任何项目。

【讨论】:

  • 如何通过 Core API 来完成?问题是从发送给用户的链接下载文件夹。通过 Dropbox Core API 执行此操作需要 Oauth 访问每个向用户发送文件的人的帐户?
  • 是的,它要求每个用户允许您的应用程序代表他们登录,但是,您的应用程序可以更直接地访问所有内容。否则,您没有很好地解释您的问题,无法得到不同的答案。
  • 关于从链接下载文件的 Dropbox 博客链接用 Dropbox 的话准确地说明了这种情况 - 但问题在于为文件夹提供相同的功能,如问题中所述。
【解决方案2】:

Dropbox 的支持团队刚刚向我介绍了执行此操作的最佳方式:

只需将?dl=1 添加到共享链接的末尾即可。这将为您提供共享文件夹的压缩版本。

因此,如果与用户共享的链接是 https://www.dropbox.com/sh/xyz/xyz-YZ(或类似链接,链接到共享文件夹),要下载该文件夹的压缩版本,只需访问 https://www.dropbox.com/sh/xyz/xyz-YZ?dl=1

希望这对其他人也有帮助。

【讨论】:

  • 不过似乎不适用于大于 2 Gb 的文件夹 - 生成的文件已损坏。
  • 实际上,如果结果大小超过 1GB,您将收到 500 错误
  • 如果更改文件夹名称,如何知道共享网址?也许可以使用access_token 以某种方式对其进行加密? @Cian
  • @EdgarsŠturms 我不确定 - 我认为您需要再次请求共享 URL。这种下载方式假定您拥有正确的共享 URL。
  • @Cian 找到了我的问题的答案stackoverflow.com
【解决方案3】:

当通过 python 下载文件的直接共享链接时,我得到的是 html 页面而不是实际的文件内容。更改 ?dl=1 没有帮助。然后我注意到 wget 正在下载实际文件,即使在?dl=0 时也是如此。似乎 dropbox 检测到 wget 用户代理并使用文件进行响应,因此在 python 中将用户代理标头设置为 Wget/1.16 (linux-gnu) 解决了这个问题,现在任何 Dropbox 共享链接都可以正确下载:

headers = {'user-agent': 'Wget/1.16 (linux-gnu)'}
r = requests.get(url, stream=True, headers=headers)
with open(filepath, 'wb') as f:
    for chunk in r.iter_content(chunk_size=1024): 
        if chunk:
            f.write(chunk)

【讨论】:

    猜你喜欢
    • 2014-02-14
    • 1970-01-01
    • 1970-01-01
    • 2018-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多