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

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这几天需要通过 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%.

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

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值