Google drive api 如何以编程方式将G套件文档/工作表下载到pdf/xls?
我正在尝试从CLI以编程方式将给定ID的Google文档下载到PDF或将工作表下载到XLS 到目前为止,我已经尝试了以下步骤:Google drive api 如何以编程方式将G套件文档/工作表下载到pdf/xls?,google-drive-api,Google Drive Api,我正在尝试从CLI以编程方式将给定ID的Google文档下载到PDF或将工作表下载到XLS 到目前为止,我已经尝试了以下步骤: ,但看不到(?)帮助图标 谷歌10分钟。。。我认为GoogleDriveAPI可以做到这一点(不确定) 启用 注册GCP项目 将UI导航到 尝试使用文档ID字段中的结果 我现在有点困了,不知道该怎么办。有什么建议吗?警告:希望如此 前面是信息墙!我还上传了完整的Jupyter笔记本供您克隆和运行,因为正如您所意识到的,将这类东西放在一起可能会很有挑战性 由于我们将通过
我现在有点困了,不知道该怎么办。有什么建议吗?警告:希望如此 前面是信息墙!我还上传了完整的Jupyter笔记本供您克隆和运行,因为正如您所意识到的,将这类东西放在一起可能会很有挑战性
由于我们将通过GoogleDrive API导出文件,因此我们需要该范围的凭据,如中所述 但是,首先我们需要选择一种身份验证方法,如中所述 既然您提到创建GCP项目,我假设您对使用GCP服务帐户感兴趣 详见 您可以在以下位置创建服务帐户: 或如中所述 确保在创建服务帐户时为该帐户启用域范围的委派,并授予它
https://www.googleapis.com/auth/drive
scope在下,否则您将无法模拟其他用户(包括您自己)并下载他们的文件
然后,我们使用刚刚下载的SERVICE\u ACCOUNT\u文件
和定义的范围
来创建凭证对象
但是,您需要首先按照(pip3安装——升级Google-API-Python客户端Google-auth-httplib2 Google-auth-oauthlib
)安装Google-API的Python绑定
因此,以下内容应足以对API进行身份验证:
from googleapiclient.discovery import build
from google.oauth2 import service_account
SCOPES = ['https://www.googleapis.com/auth/drive']
SERVICE_ACCOUNT_FILE = 'credentials.json'
credentials = service_account.Credentials.from_service_account_file(SERVICE_ACCOUNT_FILE,
scopes=SCOPES)
# Remember, you must have created credentials.json with domain-wide delegation!
credentials = credentials.with_subject('user@example.com')
# We then build a drive_v3 service using the credentials we just created
service = build('drive', 'v3', credentials=credentials)
我们可以访问中所示的文件
资源,并请求user@example.com
具有访问权限。在您的情况下,fileId=141g8UkQfdMQSTfIn475gHj1ezZVV16f5ONDxpWrrvts
files = service.files()
print(service.files().get(fileId='1U3eMevKxTwDxzvOBUsqa36zvwBzKPVYOFgy3k_9vxb8').execute())
{'kind':'drive#file','id':
'1U3eMevKxTwDxzvOBUsqa36zvwBzKPVYOFgy3k_9vxb8','名称':'空',
'mimeType':'application/vnd.google apps.document'}
我们再次访问文件资源,但这次要导出文件,如中所述
这也可以通过使用
中列出了有效的MIME类型
b'MN\xc30\x10\x85O\xc0\x1d“
如您所见,fcont
包含一个与文档相对应的二进制blob,我显示了其中的前10个字节。最后,blob保存到sample.doc
ls -alh1 /tmp/sample.doc
-rw-rw-r--1 jdsalaro jdsalaro 6,0K Jan 20 23:38/tmp/sample.doc
如上所述,我鼓励您在创建了具有域范围委托的服务帐户后,将其保存到
credentials.json
并授予https://www.googleapis.com/auth/drive
scope.当我看到您的演示视频时,我认为您使用的是“关于:获取”“在驱动器API v3中,文件ID被放入字段中
。在这种情况下,会发生这种错误。我认为你的问题就是因为这个。当您想使用“试用此API”查看文件元数据时,请将文件ID置于fileId
中,使用“Files:get”。顺便问一下,您能否从CLI以编程方式提供有关的CLI
的详细信息?您使用的是什么语言?你能提供你正在处理的代码,特别是你提出的请求吗?@Tanaike WORKS。。那么如何下载文件呢?谢谢你的回复。我不得不为我糟糕的英语水平道歉。要从Google Drive下载文件,有两个方向。1.如果该文件是您的,且未公开共享,则可以使用访问令牌下载该文件。2.当文件被公开共享时,您可以不使用访问令牌下载它。顺便问一下,您能否从CLI以编程方式提供有关的CLI
的详细信息?!我想我所困惑的是身份验证。什么是大脑中最容易的?我并不需要一个理想的服务帐户,我只想认证为我自己。正如您可以从中看到的,为什么有两个元素,API键和Oauth。我两者都需要?@hendry服务帐户确实是与Google API交互的最简单方式。将要求您了解如何正确使用Oauth2;这将永远比使用服务帐户进行身份验证更复杂。对于只需要OAuth的导出文件,您可以通过删除API键
复选标记来尝试使用OAuth。但是,我强烈建议您克隆并使其正常工作。您应该理解该示例,以避免从安全角度或其他角度犯代价高昂的错误。如果您确实想使用OAuth而不是服务帐户,这是一个很好的开始。@jdalaro我给您发了一封电子邮件,告诉您为什么域范围的委派/owl似乎不起作用。我想我只剩下Oauth了?@hendry服务帐户和域范围的委托也是Oauth。区别在于没有用户交互。如果你编辑你的问题以提供更多关于你的情况、你尝试了什么、你正在使用什么代码等的信息,你很可能会得到帮助。
ls -alh1 /tmp/sample.doc