谷歌驱动器的pydrive库没有使用请求

时间:2015-08-28 06:54:11

标签: python csv python-requests pydrive

我设置了一个简单的脚本,用于从我的google云端硬盘帐户中获取文件并进行更新。我在验证和访问驱动器时没有任何问题。该文件采用驱动器上的Google电子表格形式。因此,当我有pydrive文件对象时,我通过google_file['exportLinks']['text/csv']以csv格式获取文件的URL。这在过去是有效的,但是今天我为新文件尝试了相同的方法,而不是获取数据的csv格式,我不断获取HTML。此外,如果我从我的google_file['exportLink']['text/csv']复制并粘贴链接并将其放入浏览器,浏览器将开始按照要求以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电子表格文件吗?

编辑:更新

因此,在将谷歌驱动器上的文件的权限更改为仅可访问文件已被共享的人员访问/可编辑的所有人之后,我能够访问和下载该文件。 clients_secret.json文件是否允许特定的Google云端硬盘用户安全授权,或者是否允许任何人访问该特定会话中的Google API?如果文件仅与一组有限的电子邮件地址共享,是否有必须通过http请求发送的特殊数据?

2 个答案:

答案 0 :(得分:0)

我还发现google drive 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)

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

答案 1 :(得分:0)

如果其他人遇到此问题,请将驱动器中文件的设置更改为"每个人都可以查看"解决了这个问题 - 似乎有一些许可限制。建议您在调试时考虑将文件权限更改为限制最少的设置(尽可能)。