ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

gogcli 实战:使用 `gog youtube playlists items list` 在终端中列出 YouTube 播放列表内的所有视频

gogcli 实战:使用 `gog youtube playlists items list` 在终端中列出 YouTube 播放列表内的所有视频 gogcli 实战使用gog youtube playlists items list在终端中列出 YouTube 播放列表内的所有视频【免费下载链接】gogcliGoogle Workspace in your terminal.项目地址: https://gitcode.com/GitHub_Trending/gogcl/gogcli导读gog youtube playlists items list是 gogcliGoogle Workspace 终端客户端提供的 YouTube Data API 命令用于列出某个播放列表Playlist内的所有视频条目Playlist Item包括视频 ID、标题、所属频道、在播放列表中的位置等关键信息。无论你是想审计自己的收藏播放列表、导出频道公开歌单还是在 CI 脚本中批量采集视频元数据本文都会带你从命令行用法、分页机制到源码级实现原理完整掌握这条命令。命令概览与完整用法gog youtube playlists items list的命令路径位于gog youtube playlists items之下命令本身支持items/item、list/ls两组合法别名可以按习惯自由缩写gog youtube (yt) playlists (playlist) items (item) list (ls) [flags]最精简的调用只需要提供播放列表 IDgog youtube playlists items list --playlist-id PL1234567890 # 等价缩写 gog yt playlist item ls --playlist-id PL1234567890命令层级关系如下父命令文档见 gog youtube playlists items、gog youtube playlists、gog youtube完整命令索引见 Command indexgog youtube └── playlists ├── list # 按频道或登录用户列出播放列表 ├── items │ └── list # 列出播放列表内的视频本文主题 ├── create / delete ├── add # 向播放列表添加视频 └── remove # 从播放列表移除视频核心参数播放列表 ID、分页与批量拉取该命令自身定义了 4 个业务参数其余均为 gogcli 全局通用 flag。从 youtube.go 的YouTubePlaylistsItemsListCmd结构体定义可以看到它们的完整约束参数类型默认值说明--playlist-idstring必填播放列表 ID使用LL表示我喜欢的视频LL与私有播放列表必须配合-a account--max/--limitint6450每页最大结果数取值范围 150--page/--cursorstring空分页游标nextPageToken用于获取下一页--all/--all-pages/--allpagesboolfalse自动翻页拉取全部结果无需手动逐页拼接其中--max的取值范围由validateYouTubeMax强校验youtube.go超过 150 会直接返回用法错误--max must be between 1 and 50而--playlist-id为空时同样会报错提示set --playlist-id ID (use LL for your liked videos; LL/private playlists require -a account)youtube.go。--playlist-id有一个值得一提的特殊值LL它代表当前账号的喜欢的视频Liked Videos播放列表。由于该列表属于用户私有数据代码会在playlistID LL时强制走 OAuth 账号通道而非 API Key 通道见下文认证章节其他公开播放列表则默认使用 API Key 即可读取。完整 Flags 参考表以下为该命令完整可用的 flags含 gogcli 全局 flags内容与命令文档 gog-youtube-playlists-items-list.md 一致Flag类型默认值说明--access-tokenstring直接使用传入的 access token绕过已存储的 refresh tokentoken 约 1 小时后过期-a/--account/--acctstring认证的 Google API 命令使用的账号邮箱、别名或 auto--all/--all-pages/--allpagesbool拉取所有页--clientstringOAuth 客户端名称选择已存储的凭据与 token bucket--colorstringauto颜色输出auto|always|never--disable-commandsstring逗号分隔的禁用命令列表支持点号路径-n/--dry-run/--dryrun/--noop/--previewbool不做任何变更打印计划动作并成功退出--enable-commandsstring逗号分隔的启用命令前缀列表支持点号路径限制 CLI 范围--enable-commands-exactstring逗号分隔的精确启用命令列表支持点号路径父命令不会启用子命令-y/--force/--assume-yes/--yesbool跳过破坏性命令的确认--gmail-no-sendboolfalse阻止 Gmail 发送操作Agent 安全-h/--helpkong.helpFlag显示上下文相关帮助--homestring覆盖 gogcli 的 config/data/state/cache 根目录等价于GOG_HOME-j/--json/--machineboolfalse向 stdout 输出 JSON最适合脚本化--max/--limitint6450每页最大结果数--no-input/--non-interactive/--noninteractivebool永不提示失败即退出适合 CI--page/--cursorstring分页 token-p/--plain/--tsvboolfalse向 stdout 输出稳定可解析的文本TSV无颜色--playlist-idstring播放列表 IDLL表示喜欢的视频LL/私有播放列表需要-a account--quota-projectstring用于 API 用量计费的 Google Cloud 项目以X-Goog-User-Project头发送部分 API 在--access-token或 ADC 场景下需要--readonlyboolfalse运行时阻止变更类 API 请求auth add也只会申请只读 OAuth scope--results-onlyboolJSON 模式下只输出主结果丢弃nextPageToken等信封字段--select/--pick/--projectstringJSON 模式下按逗号分隔选择字段尽力而为支持点号路径。多数命令推荐用--fields-v/--verbosebool启用详细日志--versionkong.VersionFlag打印版本并退出--wrap-untrustedboolfalseJSON/raw 输出中将拉取到的文本字段用外部不可信内容标记包裹注意该命令文档由gog schema --json自动生成头部标注 Generated fromgog schema --json. Do not edit this page by hand; runmake docs-commands若需在本地重新生成可执行make docs-commands。认证方式API Key 还是 OAuth 账号gogcli 会根据是否指定了账号选择器来决定该命令使用哪种认证通道youtube_services.goAPI Key 通道默认当未指定-a/--account、环境变量GOG_ACCOUNT为空且未提供--access-token时调用getYouTubeReadService→getYouTubeServiceWithAPIKey。API Key 通过配置项youtube_api_key或环境变量GOG_YOUTUBE_API_KEY提供见 internal/config/keys.go未配置时命令会提示YouTube API key required: set config youtube_api_key KEY or GOG_YOUTUBE_API_KEY。OAuth 账号通道一旦检测到-a、GOG_ACCOUNT或--access-token任一账号选择器就改走getYouTubeServiceForAccount使用已存储的账号凭据发起请求youtube.go。这两个通道的分流逻辑在Run方法中有明确体现youtube.govar svc *youtube.Service var err error if playlistID LL { account, accErr : requireAccount(flags) // LL 必须要有账号 if accErr ! nil { return accErr } svc, err getYouTubeServiceForAccount(ctx, account) } else { svc, err getYouTubeReadService(ctx, flags) // 公开播放列表可用 API Key }测试用例也验证了这两种路径TestYouTubePlaylistsItemsListWithAPIKey断言请求打到/youtube/v3/playlistItems且查询串包含playlistIdPL123maxResults10TestYouTubePlaylistsItemsListWithAccountUsesOAuthService断言--playlist-id LL会强制使用 OAuth 服务并携带账号meexample.comTestYouTubePlaylistsItemsListLikedUsesDefaultAccount进一步验证未显式指定账号时会回退到默认账号详见 youtube_test.go。另外如果账号 scope 不足例如未申请youtube.force-sslscope错误处理会给出修复指引re-authenticate with: gog auth add account --services youtube --extra-scopes https://www.googleapis.com/auth/youtube.force-ssl --force-consentyoutube.go。输出格式表格、JSON 与 TSV命令的展示逻辑位于Run方法的尾部youtube.go会根据输出模式分支默认表格使用outfmt.WriteTable输出对齐的文本表格。列定义在 youtube_presentation.go 的youtubePlaylistItemColumns中包含 6 列列含义VIDEO_ID视频 ID优先取contentDetails.videoId其次取snippet.resourceId.videoIdTITLE视频标题来自 snippetCHANNEL视频所属频道名snippet.videoOwnerChannelTitlePOSITION视频在播放列表中的位置snippet.positionITEM_ID播放列表条目 ID删除/管理单条时有用PUBLISHED_AT视频发布时间contentDetails.videoPublishedAtJSON 模式-j/--json/--machine输出{items: [...], nextPageToken: ...}结构便于脚本解析翻页配合--results-only可只保留主结果丢弃信封字段配合--select可按点号路径挑选字段。TSV 模式-p/--plain/--tsv输出无颜色、稳定的制表符分隔文本适合 grep/awk 管道处理。结果为空时输出No playlist items写往 stderr。如果还有下一页终端会打印提示并建议使用--all/--all-pages一次性拉全。分页机制与--all的源码实现YouTube Data API 的列表接口默认只返回单页结果。gogcli 把翻页逻辑收敛到了通用助手loadPagedItemspaged_list_helpers.gofunc loadPagedItemsT any ([]T, string, error) { if all { items, err : collectAllPages(page, fetch) // 循环抓取直到 nextPageToken 为空 if err ! nil { ... } return items, , nil } return fetch(page) // 单页只取当前 page token 对应的一页 }而每次真实的 API 调用封装在Run内的fetch闭包里youtube.gofetch : func(pageToken string) ([]*youtube.PlaylistItem, string, error) { resp, callErr : svc.PlaylistItems.List([]string{snippet, contentDetails}). PlaylistId(playlistID). MaxResults(c.Max). PageToken(pageToken). Do() if callErr ! nil { return nil, , callErr } return youtubeItemsOrEmpty(resp.Items), resp.NextPageToken, nil } items, nextPageToken, err : loadPagedItems(c.Page, c.All, fetch)要点归纳每次请求固定拉取snippet与contentDetails两个 part——前者提供标题/频道/位置后者提供视频 ID 与发布时间单页模式默认返回items与nextPageTokenJSON 模式下你拿到的就是这个 token可回填到--page继续翻页--all模式由collectAllPages内部循环翻页直至 token 耗尽最终nextPageToken为空字符串--all与--page互斥场景由该函数语义自然处理--max每页上限 50 与 YouTube API 的硬性约束一致且 gogcli 做了本地强校验。典型实战场景场景一查看某个公开频道的播放列表内容# 1. 先找到播放列表 ID gog youtube playlists list --channel-id UC_x5XG1OV2P6uZZ5FSM9Ttw # 2. 列出该播放列表内的视频默认每页 50 条 gog youtube playlists items list --playlist-id PLBCF2DAC6FFB574DE # 3. 需要完整列表时直接拉全量 gog youtube playlists items list --playlist-id PLBCF2DAC6FFB574DE --all场景二列出我喜欢的视频gog youtube playlists items list --playlist-id LL -a meexample.comLL是特殊 ID必须配合已认证账号-a或默认账号gogcli 会自动切换到 OAuth 通道。场景三脚本化导出JSON 全量gog youtube playlists items list --playlist-id PL123 --all -j --results-only playlist_items.json配合--results-only丢弃信封字段、--no-input在 CI 中避免交互可以安全地嵌入定时任务。场景四结合 items 的ITEM_ID做后续维护youtube playlists remove --item-id ITEM_ID可以直接按条目 ID 精确删除视频见 youtube.go因此items list的输出天然是remove的上游数据源。相关命令速览gog youtube playlists播放列表整体管理list / create / delete / add / remove / itemsgog youtube playlists itemsitems 子命令容器gog youtubeYouTube Data API 总入口search、videos、channels、comments、activities、subscriptions 等Command index全部命令索引【免费下载链接】gogcliGoogle Workspace in your terminal.项目地址: https://gitcode.com/GitHub_Trending/gogcl/gogcli创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表