google 驱动器的 pydrive 库未使用请求以请求的格式下载文件

pydrive library for google drive is not downloading file in requested format using requests

我设置了一个简单的脚本,用于从我的 google 驱动器帐户中获取文件并更新它。我在验证和访问驱动器时没有问题。该文件在驱动器上以 google 电子表格的形式存在。因此,当我有 pydrive 文件对象时,我通过 google_file['exportLinks']['text/csv'] 获得 csv 格式文件的 URL。这在过去是有效的,但是今天我对一个新文件尝试了同样的方法,而不是获取数据的 csv 格式,我一直在获取 HTML。此外,如果我从 google_file['exportLink']['text/csv'] 复制并粘贴 link 并将其放入浏览器,浏览器将开始按要求下载 csv 格式的文件。我真的不知道发生了什么,特别是因为这在过去有效。

我的代码基本上是这样的:

drive = GoogleDrive(gauth)

drivefiles  = drive.ListFile().GetList()
form_file = None

for f in drivefiles:
    if f['title'] == formFileName:
        form_file = f
        break

output = requests.get(form_file['exportLinks']['text/csv'])
print output.text #this ends up being HTML, not text/csv

其他人以前遇到过这个问题吗?我是否应该尝试删除并重新添加驱动器上的 google 电子表格文件?

编辑:更新

因此,在将 google 驱动器上文件的权限从仅共享文件的人可访问更改为所有人 accessible/editable 后,我能够访问和下载该文件. clients_secret.json 文件是否允许特定的 google 驱动器用户安全授权,或者是允许任何拥有它的人在该特定会话中访问 Google API 的通用密钥?如果文件仅与一组有限的电子邮件地址共享,是否有任何特殊数据必须通过 http 请求发送?

我还发现处理 google 驱动器 api 的特性有点棘手。我已经围绕 google 驱动器 api 编写了一个包装器,这使得处理它相对容易。看看是否有帮助:-

Google Drive Client

示例代码:-

file_id = 'abc'
file_access_token = '34244324324'

scope = 'https://www.googleapis.com/auth/drive.readonly'
path_to_private_key_file = '#'
service_account_name = '284765467291-0qnqb1do03dlaj0crl88srh4pbhocj35@developer.gserviceaccount.com'

drive_client = GoogleDriveClient(
               scope = scope,
               private_key = open(path_to_private_key_file).read(),
               service_account_name = service_account_name)

file = drive_client.get_drive_file(file_id, file_access_token)

当然,您需要根据您的个人资料更改访问变量。

以防其他人遇到此问题,将驱动器中文件的设置更改为 "everyone can view" 解决了问题 - 似乎存在一些权限限制。建议您考虑在调试时将文件的权限更改为限制最少的设置(尽可能)。