2

我设置了一个简单的脚本,用于从我的谷歌驱动器帐户中获取文件并进行更新。我在验证和访问驱动器方面没有问题。该文件采用驱动器上的谷歌电子表格的形式。因此,当我拥有 pydrive 文件对象时,我会通过 .csv 格式获取文件的 URL google_file['exportLinks']['text/csv']。这在过去是有效的,但是今天我对一个新文件尝试了同样的方法,而不是获取数据的 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

有没有其他人以前见过这个问题?我应该尝试删除并重新添加驱动器上的谷歌电子表格文件吗?

编辑:更新

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

4

2 回答 2

0

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

谷歌云端硬盘客户端

示例代码:-

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)

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

于 2015-08-28T06:58:15.427 回答
0

万一其他人对此有疑问,将驱动器中文件的设置更改为“每个人都可以查看”可以解决问题 - 似乎存在一些权限限制。建议您在调试时考虑将文件的权限更改为限制最少的设置(尽可能)。

于 2015-10-12T03:59:18.183 回答