
gogcli YouTube 订阅管理实战用gog youtube subscriptions在终端完成频道订阅的增删查【免费下载链接】gogcliGoogle Workspace in your terminal.项目地址: https://gitcode.com/GitHub_Trending/gogcl/gogcli导读gog youtube subscriptions是 gogcligog在终端内管理 Google YouTube 频道订阅的命令组覆盖列出我订阅的频道、订阅新频道、取消订阅三类操作并内置分页、干跑预览、确认交互与多账户选择机制。阅读本文后你将掌握该命令组的完整用法、每个核心参数的取值范围并能结合源码理解其底层如何解析账户凭据、选择 OAuth scope 以及执行破坏性操作的防护流程从而安全地把订阅管理纳入脚本与自动化工作流。命令概览一个命令组、三个子命令gog youtube subscriptions别名路径gog yt subscriptions subscription在 CLI 命令树中的定位是gog→youtube (yt)→subscriptions (subscription)其顶层说明为 Manage channel subscriptions即管理频道订阅。完整的命令调用形式为gog youtube (yt) subscriptions (subscription) command其中括号内的yt与subscription分别是youtube与subscriptions的命令别名两者均可互换使用。该命令组由三个子命令构成对应从 internal/cmd/youtube.go 中YouTubeSubscriptionsCmd结构体约 L773-L777声明子命令别名作用对应结构体gog youtube subscriptions listls列出当前认证用户订阅的频道YouTubeSubscriptionsListCmdgog youtube subscriptions subscribe—订阅一个频道YouTubeSubscriptionsSubscribeCmdgog youtube subscriptions unsubscribe—取消订阅一个频道YouTubeSubscriptionsUnsubscribeCmd它与youtube命令组下的activities、videos、playlists、comments、channels、search等兄弟命令并列见 docs/youtube.md但订阅属于典型的用户私有数据 写操作list需要账户 OAuthsubscribe与unsubscribe则需要更高级别的youtube.force-ssl写权限这与只需 API key 即可完成的公开数据读取有本质区别。前置条件账户、OAuth scope 与 API key 的选择gog youtube提供两条访问路径见 internal/cmd/youtube_services.go公开数据读取使用youtube_api_key可通过gog config set youtube_api_key YOUR_API_KEY或环境变量GOG_YOUTUBE_API_KEY配置无需账户。账户级读取使用默认的youtube.readonlyscope需要先添加账户gog auth add yougmail.com --services youtube而订阅、播放列表与评论等写操作必须使用youtube.force-ssl额外 scope源码 internal/cmd/youtube.go 中定义了该常量const youtubeForceSSLOAuthScope https://www.googleapis.com/auth/youtube.force-ssl添加方式为gog auth add yougmail.com --services youtube \ --extra-scopes https://www.googleapis.com/auth/youtube.force-ssl \ --force-consent--force-consent强制重新走一次授权确认以确保新 scope 真正写入令牌。如果账户尚未开通 YouTube 频道调用会返回youtubeSignupRequired错误此时需要在 YouTube 网页端初始化频道后重试。一个值得注意的容错细节当写操作因权限不足失败错误文本匹配insufficientPermissions、insufficient authentication scopes或ACCESS_TOKEN_SCOPE_INSUFFICIENT时wrapYouTubeForceSSLErrorinternal/cmd/youtube.go会向用户输出一条带完整修复命令的提示例如youtube mutations require OAuth scope https://www.googleapis.com/auth/youtube.force-ssl; re-authenticate with: gog auth add yougmail.com --services youtube --extra-scopes https://www.googleapis.com/auth/youtube.force-ssl --force-consent这意味着即使权限配置有误CLI 也会直接告诉你如何自愈无需翻阅文档。子命令一list— 列出订阅的频道调用形式gog youtube (yt) subscriptions (subscription) list (ls) [flags]其核心参数为参数说明--max/--limit每页最大结果数默认50合法范围 150由validateYouTubeMax校验超出会报错--max must be between 1 and 50--page/--cursor分页游标上一页返回的nextPageToken--all/--all-pages/--allpages一次性抓取所有页所有订阅读取都是我的mine语义源码中YouTubeSubscriptionsListCmd.Runinternal/cmd/youtube.go首先通过requireAccount(flags)强制要求-a/--account然后调用svc.Subscriptions.List([]string{snippet}).Mine(true)即只会返回当前认证用户自己的订阅列表不存在公开读取模式。因此它不依赖 API key必须配合账户参数使用。基础用法# 单页读取每页最多 50 条 gog yt subscriptions list --max 50 --account yougmail.com # 抓取全部订阅输出结构化 JSON gog yt subscriptions list --all --account yougmail.com --json输出采用表格形式表头为ID CHANNEL_ID TITLE SUBSCRIBED_AT其中订阅 IDsubscription ID是后续unsubscribe --id操作的关键输入。分页实现上list复用loadPagedItems(c.Page, c.All, fetch)通用分页器internal/cmd/youtube.go每次翻页都携带--max设定的页大小测试用例 TestYouTubeSubscriptionsListAllUsesPageSizeAndStartCursor 验证了--all与--page start组合时分页器会正确把起始游标传给每一页请求。若一次只拉一页且仍有下一页CLI 会输出提示--all/--all-pages引导你继续翻页。若列表为空则输出No subscriptionsJSON 模式下则输出空数组[]测试 TestYouTubeSubscriptionsListAllEmitsEmptyArray 对此有专门覆盖。子命令二subscribe— 订阅一个频道调用形式gog youtube (yt) subscriptions (subscription) subscribe [flags]核心参数只有一个--channel-id必填即目标频道的 ID形如UC_x5XG1OV2P6uZZ5FSM9Ttw。gog yt subscriptions subscribe \ --channel-id UC_x5XG1OV2P6uZZ5FSM9Ttw \ --account yougmail.com从源码看internal/cmd/youtube.go该命令的执行链路为校验--channel-id非空通过dryRunExit(ctx, flags, youtube.subscriptions.subscribe, ...)处理干跑预览requireAccount(flags)解析账户getYouTubeWriteServiceForAccount获取具备写权限的 service即youtube.force-sslscope调用svc.Subscriptions.Insert([]string{snippet}, ...)构造的ResourceId.Kind固定为youtube#channel成功后按输出模式输出JSON 输出完整subscription对象plain/TSV 输出id与channel_id两列默认人类可读模式输出Subscribed: channel-id (subscription ID: id)。成功返回的订阅 ID 应妥善保存它是后续unsubscribe --id直接取消订阅的依据。子命令三unsubscribe— 取消订阅调用形式gog youtube (yt) subscriptions (subscription) unsubscribe [flags]取消订阅提供两种等价的定位方式二选一参数说明--id订阅 ID直接来自subscriptions list的输出--channel-id频道 IDCLI 会先帮你查出对应的订阅 ID 再删除两种方式都使用账户 OAuthyoutube.force-sslscope执行svc.Subscriptions.Delete(subID)。# 方式一直接按订阅 ID 取消 gog yt subscriptions unsubscribe --id SUBSCRIPTION_ID \ --account yougmail.com --force # 方式二按频道 ID 取消自动查找订阅 ID gog yt subscriptions unsubscribe --channel-id UC_x5XG1OV2P6uZZ5FSM9Ttw \ --account yougmail.com --force按频道 ID 取消时源码internal/cmd/youtube.go会先调用svc.Subscriptions.List([]string{id}).Mine(true).ForChannelId(channelID).MaxResults(1)做一次只取id的最小化查询如果未订阅该频道会明确报错not subscribed to channel ID避免误删其他资源。破坏性操作防护确认交互、--force与--dry-run订阅与播放列表的写操作都内置了双重安全网。1. 确认提示与--forceunsubscribe属于破坏性操作执行前会弹出确认提示。源码使用dryRunAndConfirmDestructive统一处理internal/cmd/youtube.go提示文案形如unsubscribe (subscription ID: SUB1)或unsubscribe from channel UC1。跳过确认需使用-y/--force/--assume-yes/--yesgog yt subscriptions unsubscribe --id SUBSCRIPTION_ID \ --account yougmail.com --force测试用例 TestYouTubeSubscriptionsMutationDryRuns 覆盖了subscribe、unsubscribe --id、unsubscribe --channel-id三种操作的干跑与确认路径。2. 干跑预览--dry-run所有订阅与播放列表变更都支持-n/--dry-run/--dryrun/--noop/--preview。干跑不会创建 API service、也不会发起任何网络请求只打印预期动作操作标识如youtube.subscriptions.subscribe及目标参数并以成功状态退出gog yt subscriptions subscribe \ --channel-id UC_x5XG1OV2P6uZZ5FSM9Ttw \ --account yougmail.com --dry-run --json这非常适合先在 CI 或脚本中验证参数拼写再执行真实变更。3. 自动化建议在无人值守脚本中推荐显式组合--no-input --force前者保证任何需要交互的环节都直接失败而非挂起后者跳过确认配合--json或--plain输出稳定可解析的结果。全局 Flags输出、账户与运行模式以下全局 Flags 对该命令组及其所有父命令均生效完整定义见本页生成的参考表以及 docs/commands/gog-youtube.mdFlag类型默认值作用--access-tokenstring—直接使用提供的 access token绕过存储的 refresh tokentoken 约 1 小时过期-a/--account/--acctstring—指定账户邮箱、别名或auto用于认证的 Google API 命令--clientstring—OAuth 客户端名选择存储的凭据与 token 桶--colorstringauto颜色输出auto\|always\|never-n/--dry-run/--dryrun/--noop/--previewbool—不实际变更打印预期动作并以成功退出-y/--force/--assume-yes/--yesbool—跳过破坏性命令的确认提示-j/--json/--machineboolfalsestdout 输出 JSON适合脚本-p/--plain/--tsvboolfalse输出稳定可解析的 TSV 文本无颜色--results-onlybool—JSON 模式下只输出主结果丢弃nextPageToken等信封字段--select/--pick/--projectstring—JSON 模式下按逗号分隔字段选择输出支持点路径--readonlyboolfalse运行时拦截所有变更类 API 请求auth add也会改为请求只读 scope--no-input/--non-interactive/--noninteractivebool—永不提示需要输入时直接失败适合 CI--quota-projectstring—计费用的 Google Cloud 项目以X-Goog-User-Project头发送--homestring—覆盖 gogcli 配置/数据/状态/缓存根目录等价于GOG_HOME--gmail-no-sendboolfalse阻止 Gmail 发送操作Agent 安全开关--enable-commands/--enable-commands-exactstring—白名单式启用命令前缀/精确命令用于限制 CLI 暴露面--disable-commandsstring—禁用指定命令逗号分隔支持点路径--wrap-untrustedboolfalseJSON/raw 输出中为外部获取的文本字段包裹不可信内容标记-v/--verbosebool—开启详细日志-h/--helpkong.helpFlag—显示上下文相关的帮助--versionkong.VersionFlag—打印版本并退出其中与订阅命令最相关的是账户解析list/subscribe/unsubscribe都通过requireAccount强制要求-a/--account或GOG_ACCOUNT环境变量 /--access-token详见youtubeAccountSelectorPresentinternal/cmd/youtube.go。--max范围约束validateYouTubeMax规定--max必须在 150 之间internal/cmd/youtube.go超过会被拒绝。输出契约订阅列表的 JSON 结构为{items: [...], nextPageToken: ...}--plain输出IDTABCHANNEL_IDTABTITLETABSUBSCRIBED_AT进度提示、确认提示与警告统一走 stderr保证 stdout 可安全地重定向给下游工具。脚本与自动化示例结合以上内容一个典型的订阅管理脚本流程可以是# 1. 拉取全部订阅保留订阅 ID 与频道 ID gog yt subscriptions list --all --account yougmail.com --json \ | jq -r .items[] | [.id, .snippet.resourceId.channelId, .snippet.title] | tsv # 2. 安全地订阅新频道先干跑再真实执行 gog yt subscriptions subscribe --channel-id UC_x5XG1OV2P6uZZ5FSM9Ttw \ --account yougmail.com --dry-run --json gog yt subscriptions subscribe --channel-id UC_x5XG1OV2P6uZZ5FSM9Ttw \ --account yougmail.com --no-input --force --json # 3. 按频道 ID 取消订阅自动查找订阅 ID gog yt subscriptions unsubscribe --channel-id UC_x5XG1OV2P6uZZ5FSM9Ttw \ --account yougmail.com --no-input --force --json在 CI 或 Agent 场景下务必显式传递--no-input --force并用--json或--plain消费输出如需对变更操作做双重保险可结合全局--readonly在运行时统一拦截所有写请求。相关参考gog youtube — 父命令包含全部 YouTube 子命令与全局 Flagsgog youtube subscriptions list — 本命令组的 list 子命令参考gog youtube subscriptions subscribe — 本命令组的 subscribe 子命令参考gog youtube subscriptions unsubscribe — 本命令组的 unsubscribe 子命令参考YouTube 使用指南 — 含配置访问、订阅与播放列表操作的完整示例内部命令实现 — 订阅命令的结构体定义与 Run 实现服务解析实现 — API key / 账户 service 的选择逻辑变更操作测试 — 分页、干跑与确认交互的测试用例命令索引 — 全部命令文档的入口【免费下载链接】gogcliGoogle Workspace in your terminal.项目地址: https://gitcode.com/GitHub_Trending/gogcl/gogcli创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考