ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

gogcli 实战:使用 `gog sites url` 一键输出 Google Sites 编辑器链接

gogcli 实战:使用 `gog sites url` 一键输出 Google Sites 编辑器链接 gogcli 实战使用gog sites url一键输出 Google Sites 编辑器链接【免费下载链接】gogcliGoogle Workspace in your terminal.项目地址: https://gitcode.com/GitHub_Trending/gogcl/gogcli本文以gog sites url子命令为核心讲解 gogcliGoogle Workspace in your terminal如何把 Google Sites 站点的 Drive 文件 ID 或编辑器 URL 转换为可直接打开的编辑器链接覆盖命令语法、参数语义、输出格式、别名与全局旗标并结合仓库源码剖析其底层调用链与校验逻辑帮助你把这把小工具熟练接入日常站点维护与脚本化工作流。gog sites url是 gogcli 的gog sites命令族gog sites下的一个子命令功能极其聚焦接收一个或多个 Google Sites 站点标识Drive 文件 ID 或sites.google.com编辑器 URL输出对应的站点编辑器链接。它不修改任何数据只做查询与打印因此在需要批量收集站点入口、把站点链接喂给下游脚本、或在终端里快速确认这个站点在哪儿编辑时非常实用。读完本文你将掌握该命令的完整用法、全部旗标含义、TSV/JSON 两种输出契约以及其背后URL 归一化 → Drive 元数据校验 → 链接回退生成的完整实现链路。命令概览与定位gog sites url属于gog sites家族。整个家族共 4 个子命令见 internal/cmd/sites.go子命令别名说明gog sites listls列出 Drive 中可见的 Google Sitesgog sites searchfind按文本或 Drive 查询搜索 Google Sitesgog sites getinfo, show获取 Google Sites 元数据gog sites urlopen打印 Google Sites 编辑器 URL从源码结构看SitesCmd中的URL SitesURLCmd字段声明为name:url aliases:open因此gog sites url与gog sites open完全等价。此外命令族内部对Google Sites的判定统一基于 Drive 的 MIME 类型常量application/vnd.google-apps.site定义于 internal/cmd/drive.go也就是说gogcli 眼中的 Google Sites 本质上是Drive-backed由 Drive 支撑的一类特殊文件这与新版 Google Sites 的存储模型一致。使用语法与位置参数官方用法源自gog schema --json自动生成的命令文档见 gog-sites-url.mdgog sites (site) url (open) siteId ...其中siteId ...是可接受多个值的必填位置参数对应源码中SitesURLCmd的字段定义type SitesURLCmd struct { SiteIDs []string arg: name:siteId help:Site Drive file IDs or sites.google.com editor URLs }internal/cmd/sites.go关键点siteId 可传多个命令会按传入顺序逐个处理并输出适合批量场景siteId 有两种合法形态纯 Drive 文件 ID例如1a2b3c...sites.google.com编辑器 URL例如https://sites.google.com/d/1a2b3c/edit缺少 siteId 时命令直接报错Run方法开头会检查len(c.SiteIDs) 0并返回usage(missing siteId)internal/cmd/sites.go。实用示例批量打印两个站点的编辑器链接gog sites url 1a2b3c4d5e6f7g8h9i0j 2KxYz9QwErT0UuIiOoPpAa直接粘贴浏览器地址栏里的编辑器 URL 作为输入gog sites url https://sites.google.com/d/1a2b3c4d5e6f7g8h9i0j/edit使用别名open完全等价gog sites open 1a2b3c4d5e6f7g8h9i0j无 scheme 的粘贴形式同样会被识别见下文URL 归一化小节gog sites url sites.google.com/d/1a2b3c4d5e6f7g8h9i0j/edit输出格式TSV 与 JSON命令支持两种输出模式由全局旗标切换默认文本模式每行siteIdTABURL1a2b3c4d5e6f7g8h9i0j https://sites.google.com/d/1a2b3c4d5e6f7g8h9i0j/edit对应实现为u.Out().Linef(%s\t%s, siteID, link)internal/cmd/sites.go天然是 TSV 结构与-p/--plain/--tsv的可解析文本模式一致便于awk、cut等工具进一步处理。JSON 模式-j/--json/--machine{urls:[{id:1a2b3c4d5e6f7g8h9i0j,url:https://sites.google.com/d/1a2b3c4d5e6f7g8h9i0j/edit}]}对应实现为outfmt.WriteJSON(ctx, stdoutWriter(ctx), map[string]any{urls: urls})internal/cmd/sites.go外层包装为urls数组每个元素含id与url两个字段。若再叠加--results-onlyJSON 输出会去掉nextPageToken之类的信封字段只保留主结果。源码与测试共同验证了这两种契约TestSitesGetAndURL同时断言了文本输出site1\thttps://sites.google.com/d/site1/edit与 JSON 输出{urls:[{id:site1,url:...}]}internal/cmd/sites_test.go。URL 归一化从编辑器 URL 提取文件 ID这是本命令最值得注意的实现细节。gog sites url不要求你记住冗长的文件 ID——它通过normalizeGoogleIDinternal/cmd/googleid.go把常见 Google URL 统一解析为文件 ID再继续后续处理。其逻辑要点对sites.google.com主机在路径中查找/d/id模式并提取id例如https://sites.google.com/d/1a2b3c/edit→1a2b3c同时兼容drive.google.com/file/d/id/view、/drive/folders/id与docs.google.com/document/d/id/edit等——这意味着同一套归一化工具在 gogcli 的 Drive/Docs/Sheets/Slides 命令中被复用支持无 scheme 的粘贴sites.google.com/d/id/edit这类省略https://的输入也会被自动补全解析无法识别的输入则原样返回 trim 后的字符串直接当作文件 ID 使用。也就是说gog sites url的输入参数在进入 Drive API 之前已经被清洗为纯文件 ID这正是它既收 ID 又收 URL的原因。底层调用链Drive 元数据校验与链接回退gog sites url的核心逻辑集中在SitesURLCmd.Run与辅助函数siteWebLink中internal/cmd/sites.go、internal/cmd/sites.go调用链如下SitesURLCmd.Run └─ requireSitesDriveService(ctx, flags) // 解析账号并获取 Drive 服务 └─ sitesDriveService(ctx, account) // runtime 注入的 sites drive 客户端 └─ 对每个 siteId normalizeGoogleID(siteId) // URL → 文件 ID siteWebLink(ctx, svc, siteID) // 单个站点的链接解析 └─ svc.Files.Get(siteID) .SupportsAllDrives(true) // 兼容共享云端硬盘 .Fields(mimeType, webViewLink) .Do()siteWebLink的关键行为校验站点身份调用 Drive APIFiles.Get只请求mimeType, webViewLink两个字段。若返回的mimeType非空且不等于application/vnd.google-apps.site立即返回错误file id is not a Google Site (mimeType...)避免把普通文件当站点处理internal/cmd/sites.go。这一防御逻辑与gog sites get完全一致测试TestSitesGetRejectsNonSite用driveMimeGoogleDoc验证了该错误路径internal/cmd/sites_test.go。优先使用官方链接若 API 返回了webViewLinkDrive 提供的标准 web 视图地址直接返回它——正常情况这就是https://sites.google.com/d/id/edit形态的编辑器地址。回退生成链接若webViewLink为空则按约定拼接https://sites.google.com/d/siteID/edit作为兜底internal/cmd/sites.go确保命令在字段缺失时依然能给出可用的编辑器入口。支持共享云端硬盘所有Files.Get调用均显式携带SupportsAllDrives(true)因此对共享云端硬盘中的站点同样有效。另外注意requireSitesDriveService通过requireAccount(flags)解析账号-a/--account/--acct可传邮箱、别名或auto再由 runtime 层的sitesDriveService工厂创建服务实例internal/cmd/runtime_services.go。这意味着该命令完全遵循 gogcli 统一的账号与 OAuth 客户端管理机制。全局旗标详解gog sites url继承并暴露了 gogcli 的全局旗标完整列表见 gog-sites-url.md按用途可归纳为几组身份与认证旗标类型默认说明--access-tokenstring直接使用提供的访问令牌绕过存储的刷新令牌令牌约 1 小时过期-a/--account/--acctstring账号邮箱、别名或auto用于需要认证的 Google API 命令--clientstringOAuth 客户端名称选择存储的凭据与令牌桶--quota-projectstring用于计费的 Google Cloud 项目作为X-Goog-User-Project头发送某些 API 在--access-token或 ADC 模式下需要输出控制旗标类型默认说明--colorstringauto颜色输出auto/always/never-j/--json/--machineboolfalse向 stdout 输出 JSON最适合脚本化-p/--plain/--tsvboolfalse输出稳定、可解析的纯文本TSV无颜色--results-onlyboolJSON 模式下只输出主结果丢弃nextPageToken等信封字段--select/--pick/--projectstringJSON 模式下选择逗号分隔的字段尽力而为支持点路径行为控制与安全旗标类型默认说明-n/--dry-run/--dryrun/--noop/--previewbool不做变更打印预期动作并以成功退出-y/--force/--assume-yes/--yesbool对破坏性命令跳过确认--gmail-no-sendboolfalse阻止 Gmail 发送操作Agent 安全--readonlyboolfalse运行时阻止变更类 API 请求auth add也仅请求只读 OAuth scope--wrap-untrustedboolfalseJSON/raw 输出中为外部获取的文本字段包裹不可信内容标记--no-input/--non-interactive/--noninteractivebool永不提示失败即退出适合 CI--disable-commands/--enable-commands/--enable-commands-exactstring按逗号分隔列表禁用/启用命令支持点路径用于限制 CLI 面其他旗标类型默认说明-h/--helpkong.helpFlag显示上下文相关的帮助--homestring覆盖 gogcli 的 config/data/state/cache 根目录等价于GOG_HOME-v/--verbosebool启用详细日志--versionkong.VersionFlag打印版本并退出其中--readonly、--gmail-no-send等旗标体现了 gogcli 面向 Agent 场景的安全设计。gog sites url本身是纯只读查询命令与--readonly的语义天然相容。与命令族的协作一条完整的站点工作流gog sites url通常与gog sites家族其他命令组合使用形成找站点 → 看信息 → 打开编辑器的工作流# 1. 列出 Drive 中的站点获取站点 ID gog sites list --max 50 # 2. 按关键字搜索站点 gog sites search 产品手册 # 3. 查看某个站点的元数据含 webViewLink gog sites get siteId # 4. 拿到编辑器 URL交给浏览器或脚本 gog sites url siteId值得注意的是gog sites list/search在构造 Drive 查询时始终追加mimeType application/vnd.google-apps.site与trashed false约束internal/cmd/sites.go测试TestSitesListAndSearchConstrainToGoogleSites对此做了断言internal/cmd/sites_test.gogog sites url则在逐条校验环节用同一 MIME 类型做白名单判定。整套命令族在什么是 Google Site这一概念上口径完全统一。若配合-j/--json与--results-only可以非常干净地把输出接入管道gog sites url --json --results-only 1a2b3c4d5e6f7g8h9i0j | jq -r .urls[0].url前置条件与限制需要已认证的账号命令依赖requireSitesDriveService创建 Drive 服务因此使用前应通过gog auth完成认证可参考 gog-auth-setup或用--access-token直接提供令牌站点必须对当前账号可见URL 解析依赖 DriveFiles.Get无权访问的站点会返回 Drive API 错误输入必须是 Google Sites若传入的 ID 对应的是普通文件如文档、表格命令会以is not a Google Site报错而不是静默输出错误链接回退链接的假设当 API 未返回webViewLink时拼接的https://sites.google.com/d/id/edit是基于新版 Google Sites 编辑器 URL 形态的约定绝大多数情况下可用。进一步阅读父命令与命令族gog sites相关子命令gog sites get、gog sites list、gog sites search命令总索引Command index核心实现internal/cmd/sites.go、URL 归一化 internal/cmd/googleid.go、Drive 服务工厂 internal/cmd/runtime_services.go行为测试internal/cmd/sites_test.go覆盖文本/JSON 输出契约与非站点拒绝路径【免费下载链接】gogcliGoogle Workspace in your terminal.项目地址: https://gitcode.com/GitHub_Trending/gogcl/gogcli创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表