gogcli `gog slides raw` 命令详解:以无损 JSON 导出 Google Slides 原始 API 响应
2026/9/17 23:27:44 网站建设 项目流程

gogcligog slides raw命令详解:以无损 JSON 导出 Google Slides 原始 API 响应

【免费下载链接】gogcliGoogle Workspace in your terminal.项目地址: https://gitcode.com/GitHub_Trending/gogcl/gogcli

gog slides raw是 gogcli 中用于无损导出 Google Slides API 原始响应的命令。它直接调用 Slides 服务端Presentations.Get接口,将返回的完整Presentation对象以 JSON 形式输出,不经过 gog 自带的摘要化、格式化处理,因此非常适合脚本消费、接口调试以及喂给 LLM/Agent 做进一步分析。读完本文,你将掌握该命令的完整用法、全部参数含义、底层调用链、典型脚本化组合方式以及敏感字段安全注意事项。

命令定位:在gog slides家族中的角色

gog slides rawgog slides命令族的子命令。在 gog slides 命令总览 中,该命令被定义为:

Dump raw Google Slides API response as JSON (Presentations.Get; lossless; for scripting and LLM consumption)

即:以 JSON 形式导出 Google Slides API 原始响应,走的是Presentations.Get接口,输出无损(lossless),面向脚本与 LLM 消费场景。

gog slides族中的其他命令形成互补关系:

  • gog slides info:输出经过整理的演示文稿元数据(摘要视图);
  • gog slides read-slide/gog slides locate:按人类可读的方式提取幻灯片文字、备注、图片与元素定位信息;
  • gog slides raw:跳过一切加工,直接返回 Google API 的原始PresentationJSON 结构。

当 gog 尚未建模某个字段、或你需要以 Google 官方返回的原始形态调试一个对象时,raw是首选入口。这一设计理念同样适用于gog calendar rawgog drive rawgog sheets raw等系列命令,可参考 Raw API Dumps 总文档。

基本用法

gog slides (slide) raw <presentationId> [flags]
  • <presentationId>:位置参数,必填,即演示文稿的 ID(可以从演示文稿 URL 中https://docs.google.com/presentation/d/<ID>/edit<ID>部分获得)。
  • [flags]:用于控制账号选择、输出格式、认证方式等的可选参数,详见下文。

最简单的调用:

gog slides raw 1AbC_xyzPresentationID

执行后会向 Slides API 的presentations.get端点发起请求,并把完整响应以 JSON 打印到标准输出。

Flags 全表

下表完整列出该命令支持的全局 flags(与 gogcli 其他命令一致的公共参数体系):

FlagTypeDefaultHelp
--access-tokenstringUse provided access token directly (bypasses stored refresh tokens; token expires in ~1h)
-a
--account
--acct
stringAccount email, alias, or auto for authenticated Google API commands
--clientstringOAuth client name (selects stored credentials + token bucket)
--colorstringautoColor output: auto|always|never
--disable-commandsstringComma-separated list of disabled commands; dot paths allowed
-n
--dry-run
--dryrun
--noop
--preview
boolDo not make changes; print intended actions and exit successfully
--enable-commandsstringComma-separated list of enabled command prefixes; dot paths allowed (restricts CLI)
--enable-commands-exactstringComma-separated list of exact enabled commands; dot paths allowed and parent commands do not enable children
-y
--force
--assume-yes
--yes
boolSkip confirmations for destructive commands
--gmail-no-sendboolfalseBlock Gmail send operations (agent safety)
-h
--help
kong.helpFlagShow context-sensitive help.
--homestringOverride gogcli config/data/state/cache root (equivalent to GOG_HOME)
-j
--json
--machine
boolfalseOutput JSON to stdout (best for scripting)
--no-input
--non-interactive
--noninteractive
boolNever prompt; fail instead (useful for CI)
-p
--plain
--tsv
boolfalseOutput stable, parseable text to stdout (TSV; no colors)
--prettyboolPretty-print JSON (default: compact single-line)
--quota-projectstringGoogle Cloud project to bill for API usage (sent as X-Goog-User-Project; some APIs require it with --access-token or ADC)
--readonlyboolfalseBlock mutating API requests at runtime; auth add also requests read-only OAuth scopes
--results-onlyboolIn JSON mode, emit only the primary result (drops envelope fields like nextPageToken)
--select
--pick
--project
stringIn JSON mode, select comma-separated fields (best-effort; supports dot paths). Desire path: use --fields for most commands.
-v
--verbose
boolEnable verbose logging
--versionkong.VersionFlagPrint version and exit
--wrap-untrustedboolfalseIn JSON/raw output, wrap fetched text fields in external untrusted-content markers

其中与 raw 输出直接相关、需要重点理解的有:

  • --pretty:默认输出是紧凑的单行 JSON;加此参数后对 JSON 进行缩进美化,适合人读。
  • -j/--json/--machine:以 JSON 形式输出到 stdout(实际上 raw 命令本身就输出 JSON,该开关用于保证脚本管道语义一致)。
  • --wrap-untrusted:在 JSON/raw 输出中,把抓取到的文本字段包裹进"外部不可信内容"标记,适合把输出粘贴进 LLM 或 Agent 上下文时使用,既能保留 ID 与 URL,又能标明哪些是抓取来的自由文本。
  • --readonly:阻止运行时发起的写操作;auth add也只会申请只读 OAuth scope。对gog slides raw这类只读命令而言,与--readonly天然兼容。
  • -a/--account/--acct:指定账号邮箱、别名或auto,用于已认证的 Google API 命令。
  • --client:选择 OAuth 客户端名称,决定使用哪一套存储的凭据与 token bucket。
  • --access-token:直接使用给定的访问令牌(绕过存储的刷新令牌;令牌约 1 小时过期)。
  • --quota-project:指定用于计费 API 用量(以X-Goog-User-Project头发送)的 Google Cloud 项目,某些 API 在搭配--access-token或 ADC 时必需。

源码级实现:SlidesRawCmd的调用链

在 internal/cmd/slides.go 中,SlidesRawCmd的实现非常简洁,可以清晰看到它的完整执行流程:

type SlidesRawCmd struct { PresentationID string `arg:"" name:"presentationId" help:"Presentation ID"` Pretty bool `name:"pretty" help:"Pretty-print JSON (default: compact single-line)"` } func (c *SlidesRawCmd) Run(ctx context.Context, flags *RootFlags) error { id := strings.TrimSpace(c.PresentationID) if id == "" { return usage("empty presentationId") } account, err := requireAccount(flags) if err != nil { return err } svc, err := slidesService(ctx, account) if err != nil { return err } pres, err := svc.Presentations.Get(id).Context(ctx).Do() if err != nil { return err } pres, err = requireRawResponse(pres, "presentation not found") if err != nil { return err } return writeRawJSON(ctx, pres, c.Pretty) }

调用链可拆解为以下五步:

  1. 参数校验:对presentationIdTrimSpace,若为空直接返回usage("empty presentationId"),避免无效请求。
  2. 账号解析:通过requireAccount(flags)决定使用哪个账号(支持-a/--account/--acct指定或auto自动选择)。
  3. 服务初始化slidesService(ctx, account)在 internal/cmd/runtime_services.go 中定义,从运行时的服务注册表中取出runtime.Services.Slides(ctx, account);若服务缺失会返回serviceError
  4. API 请求svc.Presentations.Get(id).Context(ctx).Do()即对 Google Slides REST 端点GET https://slides.googleapis.com/v1/presentations/{presentationId}的封装。此处没有使用字段掩码(field mask)——Slides API 本身不支持,因此响应无条件无损
  5. 输出writeRawJSON(ctx, pres, c.Pretty)最终把*slides.Presentation序列化为 JSON 写入 stdout;Pretty决定是否美化。

writeRawJSONrequireRawResponse两个辅助函数定义在 internal/cmd/raw_helpers.go:

func requireRawResponseT any (*T, error) { if response == nil { return nil, errors.New(notFoundMessage) } return response, nil } func writeRawJSON(ctx context.Context, value any, pretty bool) error { return outfmt.WriteRaw(ctx, stdoutWriter(ctx), value, outfmt.RawOptions{Pretty: pretty}) }

其中requireRawResponse在响应为 nil(例如演示文稿不存在)时返回"presentation not found"错误;writeRawJSON复用了 gogcli 的outfmt.WriteRaw输出管线,保证与全项目 raw 系列命令的输出行为一致。

测试印证:三种错误路径与正常路径

仓库在 internal/cmd/slides_raw_test.go 中为SlidesRawCmd编写了 4 个测试,验证了该命令的关键行为:

  • TestSlidesRaw_HappyPath:用httptest模拟 Slides API 端点,验证正常路径下输出是合法 JSON,且包含presentationIdslides等顶层字段;
  • TestSlidesRaw_APIError:服务端返回 500 时,命令应返回错误(不会静默输出半截 JSON);
  • TestSlidesRaw_NotFound:服务端返回 404 时,命令同样以错误退出;
  • TestSlidesRaw_EmptyIDpresentationId为空时立即报错,不发请求。

这从测试层面确认了:成功时输出完整可解析的 JSON,任何 API 异常或参数缺失都以非零错误退出,这对脚本化调用非常友好——你可以在 shell 中用退出码直接判断成败,而不用担心输出被污染。

实战场景:脚本、调试与 LLM 工作流

1. 人读:格式化查看完整结构

gog slides raw <presentationId> --pretty

适合快速了解一个演示文稿包含了哪些 slides、masters、layouts、notesProperties 以及全部 pageElements 树。

2. 脚本消费:落盘为 JSON 再解析

gog slides raw <presentationId> --json > deck-api.json jq '.slides[].pageElements[].objectId' deck-api.json

--json保证 stdout 上只有纯 JSON,可直接重定向、用jq/python/node消费。这也是 Raw API Dumps 中推荐的脚本化姿势(优先--json,人读用--pretty)。

3. 面向 LLM / Agent 的安全投喂

gog slides raw <presentationId> --wrap-untrusted

当原始输出要被粘贴进 LLM 或 Agent 上下文时,--wrap-untrusted会把抓取到的文本字段包裹进外部不可信内容标记,保留 ID 与 URL 的同时,明确告知模型这些自由文本来自外部数据源,降低 prompt injection 风险。

4. 审计只读环境

gog slides raw <presentationId> --readonly --no-input

--readonly从运行时层面阻断写操作,--no-input保证任何需要交互确认的地方直接失败而不是挂起等待,两者组合适合 CI/流水线中的只读审计任务。

安全与数据边界

gog slides raw属于"raw 系列"命令,输出刻意比 gog 常规输出更少加工,可能包含私有内容与 Google API 特有的元数据。针对 Slides 具体需要注意:

  • Slides 响应可能包含短期有效的已认证图片/视频 URL。从源码注释(internal/cmd/slides.go)可以看到,这类 URL 具有时效性,因此不要长期缓存 raw 输出中的媒体链接;完整的风险评估请参考 Raw API Sensitive Field Audit。
  • 演示文稿的完整Presentation对象会包含所有幻灯片的文本内容、备注、样式与几何信息,属于敏感业务数据,不要无脑写入日志或公开渠道。
  • 在自动化管道中,Raw API Dumps 给出的通用建议同样适用:能用窄字段掩码的地方尽量用(如gog drive raw ... --fields 'id,name'),不要把 raw 输出直接灌进日志或 LLM,除非你已确认该对象完整 payload 的安全性。

与其他命令的衔接

  • 父命令 gog slides 是全部 Slides 能力的入口(导出、创建、编辑、替换文本、样式等);
  • 命令总索引见 Command index;
  • 若需要的是经过整理的人类可读内容而非原始 JSON,优先选择gog slides read-slidegog slides locategog slides info
  • 若需要在导出前确认某份演示文稿的基本信息,可先执行gog slides info <presentationId>拿到元数据,再用gog slides raw拉取完整结构。

小结

gog slides raw是 gogcli 中面向"原始数据消费者"的一等公民:它没有字段掩码、不做摘要、不丢字段,直接把 Google SlidesPresentations.Get的完整响应交给调用方。结合--pretty--json--wrap-untrusted--readonly等参数,它既可以服务快速调试,也可以嵌入脚本与 LLM/Agent 工作流。其底层实现位于 internal/cmd/slides.go,并由 internal/cmd/slides_raw_test.go 覆盖了正常与异常路径,可作为你在 gogcli 中构建类似 raw 命令的参考范本。

【免费下载链接】gogcliGoogle Workspace in your terminal.项目地址: https://gitcode.com/GitHub_Trending/gogcl/gogcli

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询