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 raw是gog 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 raw、gog drive raw、gog 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 其他命令一致的公共参数体系):
| Flag | Type | Default | Help |
|---|---|---|---|
--access-token | string | Use provided access token directly (bypasses stored refresh tokens; token expires in ~1h) | |
-a--account--acct | string | Account email, alias, or auto for authenticated Google API commands | |
--client | string | OAuth client name (selects stored credentials + token bucket) | |
--color | string | auto | Color output: auto|always|never |
--disable-commands | string | Comma-separated list of disabled commands; dot paths allowed | |
-n--dry-run--dryrun--noop--preview | bool | Do not make changes; print intended actions and exit successfully | |
--enable-commands | string | Comma-separated list of enabled command prefixes; dot paths allowed (restricts CLI) | |
--enable-commands-exact | string | Comma-separated list of exact enabled commands; dot paths allowed and parent commands do not enable children | |
-y--force--assume-yes--yes | bool | Skip confirmations for destructive commands | |
--gmail-no-send | bool | false | Block Gmail send operations (agent safety) |
-h--help | kong.helpFlag | Show context-sensitive help. | |
--home | string | Override gogcli config/data/state/cache root (equivalent to GOG_HOME) | |
-j--json--machine | bool | false | Output JSON to stdout (best for scripting) |
--no-input--non-interactive--noninteractive | bool | Never prompt; fail instead (useful for CI) | |
-p--plain--tsv | bool | false | Output stable, parseable text to stdout (TSV; no colors) |
--pretty | bool | Pretty-print JSON (default: compact single-line) | |
--quota-project | string | Google Cloud project to bill for API usage (sent as X-Goog-User-Project; some APIs require it with --access-token or ADC) | |
--readonly | bool | false | Block mutating API requests at runtime; auth add also requests read-only OAuth scopes |
--results-only | bool | In JSON mode, emit only the primary result (drops envelope fields like nextPageToken) | |
--select--pick--project | string | In JSON mode, select comma-separated fields (best-effort; supports dot paths). Desire path: use --fields for most commands. | |
-v--verbose | bool | Enable verbose logging | |
--version | kong.VersionFlag | Print version and exit | |
--wrap-untrusted | bool | false | In 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) }调用链可拆解为以下五步:
- 参数校验:对
presentationId做TrimSpace,若为空直接返回usage("empty presentationId"),避免无效请求。 - 账号解析:通过
requireAccount(flags)决定使用哪个账号(支持-a/--account/--acct指定或auto自动选择)。 - 服务初始化:
slidesService(ctx, account)在 internal/cmd/runtime_services.go 中定义,从运行时的服务注册表中取出runtime.Services.Slides(ctx, account);若服务缺失会返回serviceError。 - API 请求:
svc.Presentations.Get(id).Context(ctx).Do()即对 Google Slides REST 端点GET https://slides.googleapis.com/v1/presentations/{presentationId}的封装。此处没有使用字段掩码(field mask)——Slides API 本身不支持,因此响应无条件无损。 - 输出:
writeRawJSON(ctx, pres, c.Pretty)最终把*slides.Presentation序列化为 JSON 写入 stdout;Pretty决定是否美化。
writeRawJSON与requireRawResponse两个辅助函数定义在 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,且包含presentationId与slides等顶层字段;TestSlidesRaw_APIError:服务端返回 500 时,命令应返回错误(不会静默输出半截 JSON);TestSlidesRaw_NotFound:服务端返回 404 时,命令同样以错误退出;TestSlidesRaw_EmptyID:presentationId为空时立即报错,不发请求。
这从测试层面确认了:成功时输出完整可解析的 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-slide、gog slides locate、gog 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),仅供参考