Google drive api 如何以编程方式将G套件文档/工作表下载到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笔记本供您克隆和运行,因为正如您所意识到的,将这类东西放在一起可能会很有挑战性 由于我们将通过

我正在尝试从CLI以编程方式将给定ID的Google文档下载到PDF或将工作表下载到XLS

到目前为止,我已经尝试了以下步骤:

  • ,但看不到(?)帮助图标
  • 谷歌10分钟。。。我认为GoogleDriveAPI可以做到这一点(不确定)
  • 启用
  • 注册GCP项目
  • 将UI导航到
  • 尝试使用文档ID字段中的结果

  • 我现在有点困了,不知道该怎么办。有什么建议吗?

    警告:希望如此 前面是信息墙!我还上传了完整的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