Python 以编程方式从共享Dropbox文件夹链接下载内容

Python 以编程方式从共享Dropbox文件夹链接下载内容,python,dropbox,dropbox-api,Python,Dropbox,Dropbox Api,我正在构建一个应用程序来自动触发下载与用户共享的Dropbox文件(共享文件/文件夹链接)。这是直接为Dropbox文件链接实现的,如前所述。 不幸的是,这不适用于共享文件夹。有人对我如何做有什么建议吗 下载它的所有内容(可能会得到一个要下载的文件链接列表?) 或 下载文件夹的zip文件 目前,我可以转到url并进行一些屏幕抓取,以尝试获取内容列表,但链接Dropbox博客条目中描述的文件解决方案的优点是不需要抓取,因此更加可靠和高效。 这确实应该通过使用来完成,它允许您或查看和的信息 A

我正在构建一个应用程序来自动触发下载与用户共享的Dropbox文件(共享文件/文件夹链接)。这是直接为Dropbox文件链接实现的,如前所述。

不幸的是,这不适用于共享文件夹。有人对我如何做有什么建议吗

  • 下载它的所有内容(可能会得到一个要下载的文件链接列表?)
  • 下载文件夹的zip文件
目前,我可以转到url并进行一些屏幕抓取,以尝试获取内容列表,但链接Dropbox博客条目中描述的文件解决方案的优点是不需要抓取,因此更加可靠和高效。

这确实应该通过使用来完成,它允许您或查看和的信息


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

Dropbox的支持团队刚刚向我介绍了最好的方法:

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

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


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

通过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)

标准FTP库在这种情况下不起作用,类似于paramiko?这仅适用于Dropbox共享链接。更新了第一行以使其更清晰。如何通过核心API实现这一点?问题是从发送给用户的链接下载文件夹。通过Dropbox Core API执行此操作需要Oauth访问向用户发送文件的每个人的帐户?是的,它需要每个用户允许您的应用程序代表他们登录,但是,您的应用程序将可以更直接地访问所有内容。否则,您的问题解释得不够好,无法得到不同的答案。Dropbox博客中关于从链接下载文件的链接用Dropbox的话准确地说明了这种情况,但问题是为文件夹提供了相同的功能,正如问题中所描述的。但似乎不适用于大于2 Gb的文件夹-生成的文件已损坏。实际上,到目前为止,如果生成的文件大小超过1GB,您将收到500个错误。如果更改文件夹名称,如何知道共享url?也许可以使用
access\u令牌对其进行加密
@Cian@EdgarsŠturms我不确定-我认为您需要再次请求共享URL。这种下载方式假定您拥有正确的共享URL。@Cian找到了我问题的答案