怎么监控对标YouTube频道?n8n+TikHub周更追踪

在《选题挖掘第一弹》里,我们按关键词去 YouTube 搜视频、抓评论、用 DeepSeek 做洞察,写进多维表格;在《第二弹》里,对象换成了 Reddit,按版块抓热帖和评论。两篇都是「广撒网式」的选题情报。

https://xiaobot.net/post/fb1bfadb-61d6-47d4-b0f0-9994db838d1d

https://xiaobot.net/post/2705486a-5bc6-4589-9ef4-2a0dad51328c

这一篇是系列的第三弹,场景更垂直:你只关心一批「对标youtube频道主」这周有没有发新片。你要监控的名单放在一张多维表格里维护,每周日晚上固定时间自动跑一条 n8n 流程,来看看本周频道主更新的内容,如有新的内容,就拉去视频的基本信息,以及热门评论,把结果写到另外一张多维表格里。

配图

*(你要定期监控的频道主名单)*

配图

*(每周定时将本周更新的内容同步到表格中)*

如果你更认同「跟人不跟词」的选题方式,这条流和前两弹互补:第一、二弹解决「话题面上在吵什么」,第三弹解决「我盯的几个人这周说了什么、评论区在聊什么」。

一、这条自动化解决什么问题?

做内容的人常会盯几个 YouTube 对标账号,但人肉刷更新有几个痛点:

1.频道多的时候,很容易漏看或忘记谁发过片。

2.即使点进去,也要自己判断「是不是这几天发的」。

3.评论区里的真实反馈,要一条条翻,很难沉淀成可查的档案。

所以这一条自动化流程,可以每周日晚上自动跑一轮,把「本周有新视频的频道」的新片信息 + 热门评论合并起来,落到一张结果表里;我们平时只维护「监控名单表」,看结果表即可。

二、多维表格怎么建?

如上面所说的,我们可以建两张表,一张是监控名单表,一张是结果表

1. 监控名单表

把我们要监控的频道主的信息填写到表里。

记录频道姓名、频道链接和频道ID。

配图

频道ID是必须的,我们就是通过这个ID来去获取视频信息的。其他两个字段,是为了咱们自己看起来方便维护的。

频道ID在哪看?在youtube的个人信息卡片里,点击分享频道,然后里面有一个频道ID就是了,不清楚的话可以搜一下在哪里。

2. 结果表(周更 + 评论)

记录监控的结果信息

配图

这里我们可以设置这几个字段:视频链接、视频发布时间、视频描述、视频评论、视频内容、videoid

除了视频内容,其他信息我们都可以通过tikhub的接口直接获取到。视频内容,就是视频里到底讲了什么,可以把视频文案提取出来,放到表格里给AI进行总结分析,不过视频内容我们先留空,这期先不讲。

三、工作流的结构是怎样的

配图

我们先对流程的整体思路进行一个概况。大概的逻辑就是我们挨个去获取到所监控的频道主的视频更新内容,然后判断本周内是否有更新,如果有更新,就获取视频的详细信息,写到表格里,如果没有,就继续查找下一个频道主。

先简单介绍下各节点的作用

1.触发:定时(每周日 20:00)或「手动测试」。

2.飞书鉴权:拿 tenant_access_token

3.合并配置:把 Token、多维表格 token、两张 table id、TikHub Key 等收成一条「配置包」,后面节点统一引用。

4.拉监控表:通过查询飞书多维表格的接口,获取监控表的数据。

5.解析频道:将返回的转成「一行一个频道」的扁平结构。

6.外循环(Split In Batches):每次只放行 1 个频道往下游。

7.拉频道视频:通过TikHub的接口去获取到视频的信息。

8.筛本周:根据发布时间,来判断本周发布的视频有哪些。

9.IF:本周有没有新视频?没有则直接回到外循环下一个频道;有的话则进入内循环。

10.内循环:本周每条视频依次通过tikhub接口拉评论 → 对结果数据进行加工 → 写入结果表 → 回到内循环直到本周视频全部写完 → 再回到外循环下一个频道。

以上就是整体流程的逻辑,接下来我们就详细来说说每个节点的配置。

四、流程节点详解

配图

1. 定时触发/手动触发

①定时触发(Schedule Trigger),按 Cron 触发工作流执行,适合周期性批任务。用大白话来说就是给流程设置一个闹钟,到点就「按闹钟」自动开始干活。

②手动触发(Manual Trigger),仅在手点「Test workflow」时产生一条执行。 简单来说就是如果你不想等到闹钟响的时候才执行的话,就直接先手动触发,把流程先跑一遍。

2. 获取飞书Token

HTTP Request节点,通过飞书的接口向飞书开放平台换取短期 tenant_access_token,后续所有多维表格 API 都要用到。这个是必须的步骤,简单来说就是要跟飞书「要一张临时通行证」,不然读表写表会被拒。

如何配置:

①MethodPOST

②URLhttps://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal

③Body:JSON,app_idapp_secret 填你的应用(勿泄露)。

成功时响应体里有 tenant_access_token,下一节点会读它。

配图

3. 合并配置

这是一个code节点,专门维护配置信息的,比如上一步获取到的飞书的token、多维表格的token和表格id,以及tikhub的接口的key,我们都放在这个节点来维护好。这样的好处就是方便,后面需要要修改配置,就直接在这个节点修改就好了。

配图
  const tok = $('获取飞书Token').first().json.tenant_access_token;
if (!tok) throw new Error('未获取到 tenant_access_token,请检查 app_id / app_secret');
return [{
  json: {
    feishuToken: tok,
    feishuAppToken: '【飞书多维表格token】',
    monitorTableId: '【飞书多维表格数据表id】',
    outputTableId:  '【飞书多维表格数据表id】',
    tikhubBaseUrl:  'https://api.tikhub.io',
    tikhubApiKey:   '【tikhub接口api key】',
  }
}];

4. 拉取频道监控表

这个节点主要是调用飞书的查询结构,把监控表里的记录都拉取出来,后面做循环时使用。

如何配置:

①method:post

②url:https://open.feishu.cn/open-apis/bitable/v1/apps/{{ \$(‘合并配置’).first().json.feishuAppToken }}/tables/{{ \$(‘合并配置’).first().json.monitorTableId }}/records/search

③header

  • AuthorizationBearer {{ $('合并配置').first().json.feishuToken }}
  • Content-Typeapplication/json; charset=utf-8
配图

5. 解析频道记录

这是一个code节点,主要目的是对获取到的数据进行格式的加工。用大白话来讲,接口直接获取到的数据格式都很绕,这个节点就是为了帮我们「扒平」成:这一行是谁、链接是啥、频道 ID 是啥;并且一行变一条,后面才能一个一个频道处理。

具体的配置:

function cellText(f) {
  if (f == null || f === '') return '';
  if (typeof f === 'string' || typeof f === 'number') return String(f);
  if (Array.isArray(f) && f[0] != null && f[0].text != null) return f.map(x => x.text).join('');
  if (typeof f === 'object' && Array.isArray(f.value)) return f.value.map(x => (x && x.text) || '').join('');
  if (typeof f === 'object' && f.link) return String(f.link);
  return '';
}
const root = $input.first().json;
const items = (root.data && root.data.items) || [];
const out = [];
for (const it of items) {
  const f = it.fields || {};
  const channelId = cellText(f.ID != null ? f.ID : f.id).trim();
  if (!channelId) continue;
  out.push({ json: {
    record_id: it.record_id,
    channelId,
    channelName: cellText(f.name != null ? f.name : f.Name),
    channelUrl:  cellText(f.url  != null ? f.url  : f.URL),
  }});
}
if (!out.length) throw new Error('频道监控表中无有效 channelId,请检查字段名 ID');
return out;
配图

6. 外循环-逐个频道

配图

这里主要就是为了依次去获取频道主的视频信息,所以需要一个循环节点。将上游 N 条频道拆成每次 1 条输出到「循环分支」,全部处理完后从「完成分支」结束。

7. TikHub获取频道视频

HTTP Request节点,调用 TikHub的获取youtube视频信息的接口,用 channel_id 拉取频道视频列表。

简单来说这里就是我们去 问 TikHub:这个频道主页上最近有哪些视频、标题链接播放量以及发布时间都是啥。

配置方法:

①MethodGET

②URLhttps://api.tikhub.io/api/v1/youtube/web_v2/get_channel_videos

③Query

  • channel_id{{ $json.channelId }}(来自外循环当前批次)
  • need_formattrue
  • language_codezh-CN
  • country_codeUS

④HeaderAuthorization = Bearer {{ $('合并配置').first().json.tikhubApiKey }}

配图

8. 筛选本周视频

我们用code节点做一个过滤,按视频的published_time也就是发布时间来进行判断,只筛出来最近一周内发布的视频。如果一个都没有,后面就不用进内循环写表了。

function isThisWeek(s) {
  if (!s) return false;
  const t = String(s).trim();
  if (/刚刚|^\d+\s*分钟前|^\d+\s*小时前|今天|昨天|前天/.test(t)) return true;
  const m = t.match(/^(\d+)\s*天前/);
  if (m) return parseInt(m[1], 10) <= 7;
  if (/本周|本星期/.test(t)) return true;
  return false;
}
const channel = $('外循环-逐个频道').item.json;
const body = $input.item.json;
const videos = (body.data && body.data.videos) || [];
const week = videos.filter(v => isThisWeek(v.published_time));
if (!week.length) {
  return [{ json: { __hasVideos: false, channelName: channel.channelName } }];
}
return week.map(v => ({ json: {
  __hasVideos: true,
  video_id: v.video_id,
  title: v.title || '',
  url: v.url || '',
  description: (v.description || '').slice(0, 8000),
  duration: v.duration || '',
  view_count: v.view_count || v.short_view_count || '',
  published_time: v.published_time || '',
  channelName: channel.channelName,
  channelUrl: channel.channelUrl,
  channelId: channel.channelId,
}}));
配图

9. 本周有新视频?

这里我们用if判断节点,来判断是否有视频更新,如果有就走「有视频」分支,否则走「无视频」分支。

配图

10. 内循环-逐个视频

配图

这里添加一个循序节点,对「本周视频」多条 item 每次放行 1 条,供评论接口与写表复用。 简单来说就是这个频道这周发了 3 条,就循环三次:一条一条拉评论、一条一条写入多维表格。

11. TikHub获取视频评论

这里是tikhub的另外一个接口,这个接口是用来获取视频评论的。把这条视频下面点赞高的评论抓一批回来。

我们用HTTP Request节点类型调用tikhub接口来实现

如何配置:

①URLhttps://api.tikhub.io/api/v1/youtube/web_v2/get_video_comments

②Queryvideo_id = {{ $json.video_id }}sort_by = toplanguage_code / country_code 与频道接口可保持一致。

③Header:同上,Bearer {{ \$(‘合并配置’).first().json.tikhubApiKey }}

配图

这个接口我们就把视频的热门评论都拉取到了。

12. 组装写入字段

因为我们上面的节点,获取到的评论数据,格式非常复杂并且有很多无关的信息,但是我们要把里面评论的内容拿出来,并且组装成飞书多维表格接口看得懂的格式,所以,就需要进行一次加工。

我们用code节点来实现

const cfg  = $('合并配置').first().json;
const vid  = $('内循环-逐个视频').item.json;
const raw  = $input.item.json;
const comments = (raw.data && raw.data.comments) || [];
const lines = comments.slice(0, 50).map((c, i) => {
  const who   = (c.author && c.author.display_name) || '匿名';
  const text  = String(c.content || '').replace(/\r\n/g, '\n');
  const likes = c.like_count != null ? c.like_count : '';
  return `#${i+1} [赞:${likes}] ${who}\n${text}`;
});
const 视频内容 = lines.length ? lines.join('\n\n---\n\n') : '(无评论数据)';
const link = vid.url || `https://www.youtube.com/watch?v=${vid.video_id}`;
return [{ json: {
  feishuToken:    cfg.feishuToken,
  feishuAppToken: cfg.feishuAppToken,
  outputTableId:  cfg.outputTableId,
  feishuFields: {
    '视频作者':     vid.channelName || '',
    '视频链接':     { link, text: link },
    '视频发布时间': vid.published_time || '',
    '观看次数':     String(vid.view_count || ''),
    '视频时长':     vid.duration || '',
    '视频标题':     vid.title || '',
    '视频描述':     vid.description || '',
    '视频评论': 视频内容.slice(0, 49000),
    'videoid':      vid.video_id || '',
  }
}}];

节点运行后,我们就提取出来我们想要的内容,并且将格式变成飞书多维表格看得懂的结构了。

配图

13. 写入结果表

这个节点就是用HTTP Request,调用飞书多维表格「新增记录」接口。也就是把上一节点打包好的那一行,真正插进结果表。

如何配置:

①MethodPOST

②URL

https://open.feishu.cn/open-apis/bitable/v1/apps/{{ $json.feishuAppToken }}/tables/{{ $json.outputTableId }}/records

③HeadersAuthorization: Bearer {{ $json.feishuToken }}Content-Type: application/json; charset=utf-8

④Body:JSON,使用表达式:

{{ JSON.stringify({ fields: $json.feishuFields }) }}

另外注意节点的连线:输出接回「内循环-逐个视频」,表示「这一条视频写完了,继续下一条」。

配图

以上就是整个流程的配置了,配置完成后,点击启用,我们就可以实现最后的效果了。

有几个注意点提醒一下:

1、获取本周数据:因为接口返回的数据,published_time并不是一个时间戳,而是文字描述,比如「N 天前」之类的,所以我们只能换一种方式来实现,当前逻辑是把「≤7 天前」「今天/昨天/小时前」等视为可能属于近一周。

2、费用问题:涉及到的费用只有tikhub的接口费用,虽然单次调用不贵,但是我们还是得清楚逻辑,这个是按次计费:约等于「频道数 × 1 次频道列表」+「本周每条视频 × 1 次评论」。所以我们心里要有个数,控制监控行数与执行频率。

五、总结

简单做个总结

我们这三期都写了什么

维度 第一弹 第二弹 第三弹(本篇)
信号来源 YouTube 关键词搜索 Reddit 版块热帖 指定 YouTube 频道列表
典型问题 话题面上大家在搜什么 社区里最近在吵什么 对标博主这周更了什么、评论怎么说
表结构 视频+评论+AI 洞察 帖子+评论+AI 洞察 视频元数据 + 视频评论长文本(无 DeepSeek,可自加)

若你希望第三弹也带「DeepSeek 一句话选题洞察」,可在「组装写入字段」与「写入结果表」之间插入与第一弹同结构的 HTTP 节点,并把洞察写入新列(例如「AI 选题要点」)。

通过这三弹,会发现我们的信息来源越来越丰富了开始。

其实还有更多的渠道可以去获取,并且获取到之后,我们还需要对内容进行监控和加工。

这个我们后续持续来分享。欢迎关注\~


📋 这套频道监控相关模板,我整理成模板了

跟着上面步骤搭要花点时间。想直接拿现成的改,加我微信备注「频道监控」,我发你。

🤔 卡在某一步了?

搭建过程里如果哪一步卡住了,如果你照着做没跑通,或者你们公司情况不太一样,可以找我聊聊,我免费帮你看看怎么调。不合适我也会直说。

加吨师傅微信咨询飞书多维表格搭建

扫码加我,备注「频道监控」领模板

想看更多这类方案,我都整理在 吨师傅工具箱 里了:客户管理、进销存、工单报修……按场景分好类,可以直接抄。

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部