0

0

如何使用 Python 从 Google 文档中提取评论内容及被批注的原文

霞舞

霞舞

发布时间:2026-03-18 13:02:17

|

497人浏览过

|

来源于php中文网

原创

如何使用 Python 从 Google 文档中提取评论内容及被批注的原文

本文详解如何通过 google drive api 正确获取 google docs 中的评论文本及其所引用的原文(quoted text),解决因误用 docs api 导致 comments 返回空列表的问题,并提供可运行的完整示例代码与关键配置说明。

本文详解如何通过 google drive api 正确获取 google docs 中的评论文本及其所引用的原文(quoted text),解决因误用 docs api 导致 comments 返回空列表的问题,并提供可运行的完整示例代码与关键配置说明。

Google Docs API 的 documents.get() 方法不返回评论数据——这是导致原始代码中 comments 列表为空的根本原因。评论(Comments)在 Google 生态中属于 Drive 文件级元数据,而非文档正文内容,因此必须调用 Google Drive API v3 的 comments.list 端点,而非 Docs API。

✅ 正确流程概览

  1. 启用 Google Cloud 控制台中的 Drive API v3(非 Docs API);
  2. 使用服务账号或 OAuth 2.0 凭据授权;
  3. 调用 service.comments().list(fileId=DOC_ID, fields='*') 获取完整评论对象;
  4. 从每个评论中提取 content(评论正文)和 quotedFileContent.value(被选中的原文);
  5. 注意权限:目标文档必须明确共享给服务账号邮箱(如 your-sa@project.iam.gserviceaccount.com),否则返回空列表且无错误提示。

? 完整可运行示例代码

from googleapiclient.discovery import build
from googleapiclient.http import Http
from oauth2client.service_account import ServiceAccountCredentials

# 替换为你的实际配置
SERVICE_ACCOUNT_FILE = 'credentials.json'
DOCUMENT_ID = 'YOUR_GOOGLE_DOC_ID'  # 如 '1aBcDeFgHiJkLmNoPqRsTuVwXyZ'

def get_credentials():
    scopes = ['https://www.googleapis.com/auth/drive.readonly']
    return ServiceAccountCredentials.from_json_keyfile_name(
        SERVICE_ACCOUNT_FILE, scopes
    )

def read_comments(comments):
    """提取评论内容 + 被批注原文,返回结构化列表"""
    result = []
    for comment in comments:
        # 评论主体文本(用户输入)
        content = comment.get('content', '').strip()
        # 被选中的原文(仅当用户高亮文本后添加评论时存在)
        quoted = comment.get('quotedFileContent', {}).get('value', '').strip()

        if content or quoted:
            result.append({
                'comment': content,
                'quoted_text': quoted,
                'author': comment.get('author', {}).get('displayName', 'Unknown'),
                'created_time': comment.get('createdTime', '')
            })
    return result

def main():
    credentials = get_credentials()
    http = credentials.authorize(Http())

    # ✅ 关键:使用 Drive API v3,不是 Docs API
    drive_service = build('drive', 'v3', http=http)

    try:
        # 获取所有评论(fields='*' 表示返回全部字段,便于调试)
        results = drive_service.comments().list(
            fileId=DOCUMENT_ID,
            fields='comments(content,quotedFileContent/value,author/displayName,createdTime)'
        ).execute()

        comments = results.get('comments', [])
        extracted = read_comments(comments)

        print(f"共找到 {len(extracted)} 条有效评论:\n")
        for i, item in enumerate(extracted, 1):
            print(f"[{i}] 评论人: {item['author']} | 时间: {item['created_time']}")
            print(f"   ? 原文引用: '{item['quoted_text']}'")
            print(f"   ? 评论内容: '{item['comment']}'\n")

    except Exception as e:
        print(f"API 调用失败:{e}")
        print("常见原因:1) Drive API 未启用;2) 文档未共享给服务账号;3) 文档 ID 错误")

if __name__ == '__main__':
    main()

⚠️ 关键注意事项

  • API 选择不可混淆:docs.v1 用于读取文档结构/正文;drive.v3 才提供 comments.list;
  • 权限即一切:服务账号邮箱必须以“编辑者”或“评论者”身份被添加到目标文档的共享列表中(在 Google Docs 右上角「共享」→「添加人员」);
  • quotedFileContent 仅在用户先选中文本再右键添加评论时存在;若直接在空白处插入评论(如页脚、图片旁),该字段为空;
  • 若需处理回复(replies)、状态(resolved/pending)或删除标记(deleted: true),可在 fields 参数中显式添加对应字段;
  • 生产环境建议使用 fields 限定返回字段(如示例中所示),避免传输冗余数据。

✅ 总结

要可靠提取 Google 文档的评论与上下文原文,请牢记:用 Drive API,配正确权限,查 quotedFileContent.value。抛弃 docs.documents().get().get('comments') 这一无效路径,转向 drive.comments().list(),即可精准捕获协作过程中的所有批注语义信息。

Buildt.ai
Buildt.ai

AI驱动的软件开发平台,可以自动生成代码片段、代码分析及其他自动化任务

下载

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
Python WebSocket实时通信与异步服务开发实践
Python WebSocket实时通信与异步服务开发实践

本专题聚焦 Python 在实时通信场景中的开发实践,系统讲解 WebSocket 协议原理、长连接管理、消息推送机制以及异步服务架构设计。内容包括客户端与服务端通信实现、连接稳定性优化、消息队列集成及高并发处理策略。通过完整案例,帮助开发者构建高效稳定的实时通信系统,适用于聊天应用、实时数据推送等场景。

2

2026.03.18

Java Spring Security权限控制与认证机制实战
Java Spring Security权限控制与认证机制实战

本专题围绕 Java 后端安全体系建设展开,重点讲解 Spring Security 在权限控制与认证机制中的应用实践。内容涵盖用户认证流程、权限模型设计、JWT 鉴权方案、OAuth2 集成以及接口安全防护策略。通过实际项目案例,帮助开发者构建安全可靠的后端认证体系,提升系统安全性与可扩展能力。

0

2026.03.18

抖漫入口地址合集
抖漫入口地址合集

本专题整合了抖漫入口地址相关合集,阅读专题下面的文章了解更多详细地址。

110

2026.03.17

多环境下的 Nginx 安装、结构与运维实战
多环境下的 Nginx 安装、结构与运维实战

本专题聚焦多环境下Nginx实战,详解开发、测试及生产环境的差异化安装策略与目录结构规划。深入剖析配置模块化设计、灰度发布流程及跨环境同步机制。结合监控告警、故障排查与自动化运维工具,提供全链路管理方案,助力团队构建灵活、高可用的Nginx服务体系,从容应对复杂业务场景挑战。

13

2026.03.17

PS 批量添加图片
PS 批量添加图片

本专题整合了PS批量添加图片教程合集,阅读专题下面的文章了解更多详细操作。

10

2026.03.17

Nginx 基础架构:从安装配置到系统化管理
Nginx 基础架构:从安装配置到系统化管理

本专题深入解析Nginx基础架构,涵盖从源码编译与包管理安装,到核心配置文件优化及虚拟主机部署。进一步探讨日志轮转、性能调优、高可用集群构建及自动化运维策略,助力管理员实现从单一服务搭建到企业级系统化管理的全面升级,确保Web服务高效、稳定运行。

7

2026.03.17

mulerun骡子快跑入口地址汇总
mulerun骡子快跑入口地址汇总

本专题整合了mulerun入口地址合集,阅读专题下面的文章了解更多详细内容。

215

2026.03.17

源码编译安装Nginx详解:模块选择、依赖准备与常见错误排查
源码编译安装Nginx详解:模块选择、依赖准备与常见错误排查

本专题详解Nginx源码编译全流程:从GCC、OpenSSL等依赖准备,到按需定制HTTP/SSL/流媒体模块的configure参数策略。深入剖析“缺少库文件”、“配置选项冲突”及“权限错误”等常见报错,提供精准排查思路与解决方案。助您掌握灵活构建高性能、定制化Nginx的核心技能,满足复杂生产环境需求。

5

2026.03.17

Linux环境安装Nginx全流程:apt、yum与源码编译方式深度实操
Linux环境安装Nginx全流程:apt、yum与源码编译方式深度实操

本专题深度实操Linux下Nginx三大安装方式:apt/yum包管理器快速部署,适合新手与标准化运维;源码编译灵活定制模块,满足高性能与特殊需求场景。内容涵盖环境准备、依赖安装、配置优化及平滑升级策略,对比各方案优劣,助您根据业务场景选择最佳实践,构建稳定高效的Web服务基石。

6

2026.03.17

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.5万人学习

Django 教程
Django 教程

共28课时 | 5.1万人学习

SciPy 教程
SciPy 教程

共10课时 | 2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号