通过 API 下载谷歌云盘文件(包括谷歌表格等)

本文详细介绍了如何通过Python代码利用GoogleDriveAPI下载谷歌表格,包括新建项目、启用API、创建和配置OAuth凭证,以及运行示例代码的过程。
摘要由CSDN通过智能技术生成

这几天需要通过 API 下载谷歌表格,但没想到这么麻烦,资料也不是很多,所以在这里记录一下

一、基本代码

首先放一个示例文件Sample Spreadsheet.xlsx,假设我们现在需要下载这个文件,要用到的基本代码如下

import io
import os
from typing import List
from googleapiclient.discovery import build
from google.oauth2.credentials import Credentials
from google_auth_oauthlib.flow import InstalledAppFlow
from google.auth.transport.requests import Request
from googleapiclient.http import MediaIoBaseDownload


def run(file_id: str, save_path: str, credentials_path: str, scopes: List[str]):
    creds = None
    if os.path.exists("token.json"):
        creds = Credentials.from_authorized_user_file("token.json", scopes)
    if not creds or not creds.valid:
        if creds and creds.expired and creds.refresh_token:
            creds.refresh(Request())
        else:
            flow = InstalledAppFlow.from_client_secrets_file(credentials_path, scopes)
            creds = flow.run_local_server(port=0)
        with open("token.json", "w") as token:
            token.write(creds.to_json())

    service = build("drive", "v3", credentials=creds)

    # 不同的文件需要不同的下载接口,目前暂时不知道如何区分,只能在报错后尝试另一种
    # Export:Docs Editors files
    # Get:files with binary content
    try:
        request = service.files().get_media(fileId=file_id)
        fh = io.BytesIO()
        downloader = MediaIoBaseDownload(fh, request)
        done = False
        while done is False:
            status, done = downloader.next_chunk()
            print("Download %d%%." % int(status.progress() * 100))
    except Exception:
        request = service.files().export(
            fileId=file_id, mimeType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
        )
        fh = io.BytesIO()
        downloader = MediaIoBaseDownload(fh, request)
        done = False
        while done is False:
            status, done = downloader.next_chunk()
            print("Download %d%%." % int(status.progress() * 100))

    with open(save_path, "wb") as f:
        fh.seek(0)
        f.write(fh.read())


if __name__ == "__main__":
    file_id = "1JI17N-NFAIOxX_2Y88gmuKMlsuGhBPcB"
    save_path = "Sample Spreadsheet.xlsx"
    scopes = ["https://www.googleapis.com/auth/drive"]
    credentials_path = "credentials.json"
    run(file_id, save_path, credentials_path, scopes)

安装依赖

pip install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib

执行上面的代码需要获取需要一个关键的凭据文件credentials.json,这是谷歌的凭据文件,要下载谷歌云盘文件需要经过谷歌的权限检查,也就是验证你有没有资格访问该资源,下面介绍如何获取该文件

二、新建项目

要创建凭据文件,首先要在谷歌云工作台创建一个项目,如果已经有项目也可以直接使用
在这里插入图片描述

三、启用谷歌云盘API服务

因为谷歌表格实际上也是存在谷歌云盘的,所以这里只需要谷歌云盘API即可,如果需要访问和修改表格的单元格数据,可以开通Google Sheets API服务

新建项目后选中该项目,然后点击启用API和服务,找到Google Drive API,点击启用,给项目开通调用谷歌云盘的服务权限
在这里插入图片描述

四、创建凭据

启用之后,回到主页面,点击创建凭据,选择OAuth 客户端 ID
在这里插入图片描述

五、配置同意屏蔽

对于新创建的项目,创建凭据前会需要配置同意屏蔽,点击配置同意屏蔽
在这里插入图片描述
User Type只能选择外部

在这里插入图片描述

填一下自己的邮箱地址,后面的邮箱地址都可以用自己的谷歌邮箱

在这里插入图片描述
在这里插入图片描述

六、选择授权范围

因为我只需要下载文件,这里就只选择了查看和下载,如果要进行其他操作,选择对应的范围即可
在这里插入图片描述
在这里插入图片描述
测试用户还是继续用自己的谷歌邮箱地址
在这里插入图片描述
在这里插入图片描述
到这里同意屏蔽就配置好了

七、生成credentials.json

回到第三步的页面,再次创建凭据,选择桌面应用
在这里插入图片描述
在这里插入图片描述
下载和重命名该文件为credentials.json即可

八、运行

第一次运行代码,需要登陆账号密码,用于生成token.json,之后就不再需要登陆了(只要没过期)。这里是你自己创建的个人应用,不用担心安全问题。
在这里插入图片描述
在这里插入图片描述

九、查看结果

等终端输出之后就可以看到已经下载好了

Download 100%.

如果发现下载的文件未同步云端修改记录,一般是因为编辑者仍停留在页面上,需要保存退出,然后再进行下载即可同步最新的编辑结果

### 回答1: 您好,对于您的问题,可能是由于一些网络或账号设置问题导致的。您可以尝试更换网络,或者登录正确的账户进行下载。另外,也可以尝试使用其他下载方式,如wget命令等。如果问题仍然存在,建议您向相关技术人员寻求帮助,以获得更准确和专业的解答。感谢您的提问。 ### 回答2: Colab是一种基于云计算的在线开发环境,它提供了强大的计算和存储资源供用户使用。然而,由于某些限制和技术问题,Colab在直接从Google云盘下载文件方面可能存在一些困难。 在Colab中,要从Google云盘下载文件,我们需要使用Google云端硬盘的API来进行文件的访问和下载。虽然Colab提供了与Google云端硬盘的连接,但下载速度可能受到网络连接和服务器资源的限制影响,导致下载较大文件时可能会遇到速度缓慢或失败的问题。 为了解决这个问题,我们可以尝试以下方法: 1. 将文件压缩为zip格式:如果文件较大,可以将文件文件夹压缩为zip格式,然后再尝试下载。压缩文件可以减小文件大小,可能会提高下载速度。 2. 使用其他下载方式:如果Colab无法直接从Google云盘下载文件,我们可以考虑使用其他方式进行下载,例如使用wget命令从URL下载文件。 3. 将文件上传到Colab:如果文件是您自己的文件,并且在Google云盘上可供访问,您可以将文件上传到Colab环境中,并在Colab中进行处理。您可以使用Colab提供的上传功能将文件上传到环境中,并在代码中引用该文件进行处理。 综上所述,Colab可能存在一些限制和技术问题,导致无法直接从Google云盘下载文件。然而,我们可以尝试采取一些措施来解决或规避这些问题,以便在Colab中顺利进行文件下载和处理。 ### 回答3: Colab是一款基于云端的编程环境,其提供了很多便利的功能,但是有时候它可能无法直接下载谷歌云盘上的文件。 在Colab中,我们可以通过调用谷歌云盘API来实现文件下载。首先,我们需要将谷歌云盘文件挂载到Colab中,这样我们才能够访问云盘中的文件。 以下是一个示例代码,可以将谷歌云盘中的文件下载到Colab中: ```python from google.colab import drive # 挂载谷歌云盘 drive.mount('/content/drive') # 定义要下载文件路径 file_path = "/content/drive/MyDrive/文件名" # 通过文件路径下载文件 !cp "{file_path}" . # 下载完成后可以使用文件了 ``` 在上述代码中,我们首先使用`drive.mount()`函数将谷歌云盘挂载到Colab中。然后,我们可以通过指定文件路径,使用`!cp`命令将文件谷歌云盘拷贝到Colab中的当前目录。 注意:在使用上述代码之前,需要先安装并导入`google.colab`模块。 如果在使用上述方法时仍然无法下载谷歌云盘文件,可能是由于谷歌云盘的权限设置导致的。请确保文件的访问权限设置正确,并且完全公开可见,这样才能正确下载文件。 综上所述,我们可以使用上述方法在Colab中下载谷歌云盘文件。如果遇到问题,建议检查文件路径和访问权限等方面的设置。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值