You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python配置推送通知监听器接收Google Drive文件变更

手把手教你用Python实现Google Drive表格变更推送监控

作为编程新手,别慌,咱们一步步来把这个推送通知的事儿捋清楚——你已经搞定了Sheets和Drive API的配置,这就成功了一半!下面是具体的实现步骤,都是实操性的内容:

一、先搞懂Drive推送通知的核心逻辑

Drive的变更推送是Webhook机制:你告诉Google一个可公开访问的URL,当指定的表格文件发生变更时,Google会主动给这个URL发送请求;你在这个URL对应的服务里接收通知,再去拉取表格的最新数据做处理。

⚠️ 注意:如果是本地开发,你需要用工具把本地端口暴露到公网(比如ngrok),不然Google没法访问你的本地服务。

二、步骤1:搭建接收推送的Web服务(用Flask快速实现)

咱们用Flask写一个简单的Web服务,用来接收Google的推送通知,同时完成订阅验证:

首先安装Flask:

pip install flask

然后写基础服务代码:

from flask import Flask, request, jsonify

app = Flask(__name__)

# 这个路由用来处理Google的订阅验证和变更通知
@app.route('/drive-webhook', methods=['GET', 'POST'])
def drive_webhook():
    # 处理Google的订阅验证请求(GET方法)
    if request.method == 'GET':
        # Google会发一个带hub.challenge参数的GET请求,你需要原样返回这个参数
        challenge = request.args.get('hub.challenge')
        return challenge, 200
    
    # 处理实际的变更通知(POST方法)
    elif request.method == 'POST':
        # 先打印收到的通知内容,方便调试
        notification = request.json
        print("收到表格变更通知:", notification)
        
        # 这里可以调用Sheets API拉取最新数据,执行你的业务操作
        # 比如后面要写的sheets_get_data()函数
        
        return jsonify({"status": "success"}), 200

if __name__ == '__main__':
    # 启动服务,端口选个自己喜欢的,比如5000
    app.run(port=5000, debug=True)

三、步骤2:用ngrok把本地服务暴露到公网

启动上面的Flask服务后,打开新终端运行ngrok(如果没装,先去官网下载安装):

ngrok http 5000

运行后会得到一个类似https://xxxx-xx-xx-xx-xx.ngrok.io的公网URL,把这个地址记下来,后面订阅推送要用。

四、步骤3:向Drive API订阅指定表格的变更

现在需要调用Drive API的files/watch接口,订阅你要监控的表格。确保你已经有授权凭证(比如service account的密钥文件),然后写订阅代码:

from googleapiclient.discovery import build
from google.oauth2.service_account import Credentials

# 加载你的凭证文件(比如service-account-key.json)
creds = Credentials.from_service_account_file('service-account-key.json')
drive_service = build('drive', 'v3', credentials=creds)

# 要监控的表格文件ID(从表格URL里提取:https://docs.google.com/spreadsheets/d/[FILE_ID]/edit)
TARGET_SHEET_ID = "你的表格ID"
# 刚才ngrok的公网URL加上路由
WEBHOOK_URL = "https://xxxx-xx-xx-xx-xx.ngrok.io/drive-webhook"

# 构造订阅请求体
subscription = {
    "id": "my-sheet-subscription-001",  # 随便写一个唯一ID,用来标识这个订阅
    "type": "web_hook",
    "address": WEBHOOK_URL,
    "payload": True  # 设为True会推送详细变更信息,False只通知有变更发生
}

# 发送订阅请求
response = drive_service.files().watch(fileId=TARGET_SHEET_ID, body=subscription).execute()
print("订阅成功!返回信息:", response)

⚠️ 注意:订阅有有效期(默认约1周),需要定期调用files/watch刷新订阅,避免失效。

五、步骤4:处理通知,拉取最新表格数据

当收到推送通知后,调用Sheets API拉取最新数据。写一个简单的拉取函数:

def sheets_get_data(spreadsheet_id):
    sheets_service = build('sheets', 'v4', credentials=creds)
    # 拉取指定范围的数据,比如Sheet1的A1到Z100
    result = sheets_service.spreadsheets().values().get(
        spreadsheetId=spreadsheet_id, range="Sheet1!A1:Z100"
    ).execute()
    values = result.get('values', [])
    
    if not values:
        print("表格里没有数据")
    else:
        print("最新表格数据:")
        for row in values:
            print(row)
    return values

然后把这个函数加到Webhook的POST处理逻辑里:

elif request.method == 'POST':
    notification = request.json
    print("收到表格变更通知:", notification)
    # 拉取并处理最新数据
    sheets_get_data(TARGET_SHEET_ID)
    return jsonify({"status": "success"}), 200

六、关键注意事项

  • 权限验证:确保你的凭证账号有目标表格的只读权限(你已经配置过,但可以再去Google Drive里确认下权限设置)。
  • 重复通知:Google可能会重复发送通知,所以你的处理逻辑最好是幂等的(重复执行也不会出问题)。
  • ngrok限制:免费版ngrok每次重启URL会变,测试完成后可以考虑部署到云服务器,用固定域名接收通知。
  • 订阅刷新:记得写定时任务定期刷新订阅,避免通知中断。

这样一步步走下来,你就能实现自动监控表格变更并处理数据啦!如果遇到具体报错(比如权限不足、Webhook收不到通知),再针对性排查即可。

内容的提问来源于stack exchange,提问作者abhinavn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:26:26