用途
YouTube Connect 用于把 YouTube 频道接入只读的 Google API,让后续其他技能读取真实数据,而不是用户手动粘贴的数字。配置一次后,每个视频会生成一份本地指标文件,供其他技能直接读取。
主要能力
- 在浏览器中完成一次 Google Cloud 项目配置,启用 YouTube Data API v3 与 YouTube Analytics API。
- 在终端完成一次 OAuth 授权,申请只读的 youtube.readonly 与 yt-analytics.readonly 权限。
- 按需拉取单个视频或最近上传视频的指标,包括标题、时长、发布时间、播放量、展现量、点击率、平均观看时长、平均观看时长占比、订阅增减、点赞、评论、分享、流量来源和留存曲线。
- 将结果写入
~/.youtube-skills/metrics/<VIDEO_ID>.json,并生成channel.json,包含频道名称、订阅数、播放量中位数以及每个视频一行。 - 把拉取到的数据交给其他技能:youtube-retention 读取留存与曲线,youtube-channel-audit 读取 channel.json,youtube-description 读取流量来源,youtube-comments-to-ideas 读取已抓取的评论。
使用方式
步骤一:Google Cloud 配置(浏览器,一次)
可用浏览器或计算机操作工具操作 Cloud Console;遇到任何 Google 登录页面时停下来请用户自行登录,绝不输入密码。没有浏览器工具时,把以下清单以文本形式交给用户:
- 打开 console.cloud.google.com/projectcreate,将项目命名为 youtube-skills,创建并选中它。
- 打开 console.cloud.google.com/apis/library,启用 YouTube Data API v3 和 YouTube Analytics API。
- 打开 console.cloud.google.com/auth/overview,受众选 External,应用名 youtube-skills,两个联系人都填用户邮箱,保存。
- 打开 console.cloud.google.com/auth/audience,在 Test users 下添加用户邮箱,保持应用处于 Testing 状态,不要发布。
- 打开 console.cloud.google.com/auth/clients,创建 Desktop app 类型的客户端,下载 JSON。
- 将下载文件保存为
~/.youtube-skills/client_secret.json。 - 用 Clients 页面截图确认,并打印保存路径。
步骤二:授权(终端,一次)
在用户目录中编写 youtube_auth.py,运行前先展示脚本。要点:
- 依赖包:google-api-python-client、google-auth-oauthlib。
- 权限范围:
https://www.googleapis.com/auth/youtube.readonly与https://www.googleapis.com/auth/yt-analytics.readonly。 - 流程:
InstalledAppFlow.from_client_secrets_file(...).run_local_server(port=0, prompt="consent")。 - 将令牌保存为
~/.youtube-skills/token.json,权限模式 600,后续运行用 Request() 刷新。 - 通过
youtube.channels().list(part="snippet,statistics,contentDetails", mine=True)打印频道。
用户在账号选择器中选择账号或品牌频道并点击允许。Testing 状态的应用会显示“未验证应用”页面,提示用户点击继续。若打印的频道不对,删除令牌后重新运行。
步骤三:拉取(终端,随时)
在同一目录编写 youtube_pull.py。每次调用使用 ids="channel==<CHANNEL_ID>"、startDate 取发布日期、endDate 取今天、filters="video==<VIDEO_ID>"。各项数据对应的 API 调用:
- 最近上传:Data v3,playlistItems.list,基于 contentDetails.relatedPlaylists.uploads。
- 标题、时长、发布日期:Data v3,videos.list(part="snippet,contentDetails,statistics")。
- 播放量、平均观看时长、平均观看时长占比、订阅、点赞、评论、分享:Analytics v2,metrics="views,averageViewDuration,averageViewPercentage,subscribersGained,likes,comments,shares"。
- 展现量、点击率、流量拆分:Analytics v2,metrics="views,impressions,impressionsClickThroughRate",dimensions="insightTrafficSourceType"。
- 留存曲线 101 个点:Analytics v2,metrics="audienceWatchRatio,relativeRetentionPerformance",dimensions="elapsedVideoTimeRatio",sort="elapsedVideoTimeRatio"。
- 评论:Data v3,commentThreads.list(part="snippet", videoId=..., order="relevance", maxResults=100)。
写入 ~/.youtube-skills/metrics/<VIDEO_ID>.json,包含标题、时长、发布日期、统计窗口、播放量、展现量、点击率、平均观看时长、平均观看时长占比、订阅增减、点赞、评论、分享、流量来源、曲线,以及 0:30、25%、50%、75%、结尾处的观看比例和 3 段最陡且不重叠的 5 点下降时间戳。同时写入 channel.json,包含频道名称、订阅数、播放量中位数和每个视频一行。每个视频打印 4 行摘要。
适用场景
- 需要基于真实频道数据做视频留存分析、频道审计、描述优化或评论选题。
- 希望避免手动复制粘贴指标数字,让分析流程自动读取本地 JSON。
- 需要在一个账号下管理多个视频的指标归档。
限制与注意事项
- Analytics 数据仅对已登录账号拥有的频道可用;竞争对手数据仍只能来自公开的 Data API 字段或手动粘贴。
- 发布时间不足 48 小时或播放量极少的视频,展现量、点击率和曲线可能不返回数据;此时应写“未返回”,不得写零。
- Data API 配额为每天 10,000 单位;20 个带评论的视频约消耗 60 单位;Analytics 调用不占用 Data API 配额。
- 令牌与客户端密钥应保存在用户主目录下,不要放进代码仓库;若用户移动它们,需将 client_secret.json 与 token.json 加入 .gitignore。
- 每个数字都应标注统计窗口;最后 2 天的数据可能与 Studio 相差几个百分点。
常见错误
- access_denied、“app has not completed verification”:邮箱不是测试用户,重做步骤一第 4 项。
- invalid_client:客户端类型错误,重做步骤一第 5 项,选择 Desktop app。
- accessNotConfigured:有 API 未启用,重做步骤一第 2 项。
- 曲线查询报 insufficientPermissions:令牌只有一个权限范围,删除令牌并重做步骤二。
- 打印的频道不对:用户选了个人账号,删除令牌后改选品牌账号。