前言
本地把 n8n 搭起来是第一步,后面能玩的东西就很多了。
n8n 常见玩法:
自动化 API
例如:
Webhook → 处理数据 → 调用 API → 写入数据库
常见:
-
自动发 Telegram
-
自动发邮件
-
自动调用 AI
AI 自动化
例如:
Webhook
↓
OpenAI
↓
整理数据
↓
发送到 Notion / Telegram爬虫自动化
例如:
定时任务
↓
HTTP Request
↓
解析数据
↓
存数据库本地部署的 n8n:只能 本机访问
如果想:
手机访问
外网访问
接 webhook
一般会加:
Cloudflare Tunnel
或 ngrok
把
localhost:5678映射到公网。
我今天的需求是:搭建一个自动检测最近一个YouTube视频说明部分的最后200个文本,如果有变化就说明视频有更新,就把视频标题前加一句“节点已更新”和视频链接自动发到 指定Telegram 频道。
完整思路 + 节点结构
一、整体逻辑
目标:
1️⃣ 定时检查某个
YouTube 视频
2️⃣ 获取 标题 + description
3️⃣ 取 description
最后200个字符
4️⃣ 与上一次检测结果比较
5️⃣ 如果变化 → 发送到
Telegram 频道
流程:
Cron (定时任务)
↓
HTTP Request (获取视频数据)
↓
Function (取 description 最后200字符)
↓
Compare (与历史数据比较)
↓
IF
├─ 未变化 → 结束
└─ 有变化 → Telegram发送消息
↓
更新历史记录
二、关键问题:如何获取YouTube视频信息
YouTube官方API是:
https://www.googleapis.com/youtube/v3/videos
请求示例:
https://www.googleapis.com/youtube/v3/videos
?part=snippet
&id=视频ID
&key=你的APIKEY
返回数据里会包含:
snippet.title
snippet.description
三、n8n 节点配置
1️⃣ Cron 节点(定时触发 1小时)
2️⃣ HTTP Request
方法:
GET
URL:
https://www.googleapis.com/youtube/v3/videos
Query参数:
part = snippet
id = 视频ID
key = API_KEY
3️⃣ Function 节点(提取最后200字符)
代码:
const desc = $json.items[0].snippet.description;
const title = $json.items[0].snippet.title;
const last200 = desc.slice(-200);
return [
{
json:{
title:title,
last200:last200
}
}
];
输出:
title
last200
4️⃣ 判断是否变化
有两种做法:
方法1(推荐)
用 Static Data
Function代码:
const data = this.getWorkflowStaticData('global');
if (!data.last200) {
data.last200 = $json.last200;
return [];
}
if (data.last200 !== $json.last200) {
data.last200 = $json.last200;
return [{json:$json}];
}
return [];
逻辑:
第一次 → 记录
以后 → 比较
变化 → 输出
没变 → 不输出
这样 不会重复发消息。
5️⃣ Telegram 发送
节点:
Telegram
操作:
Send Message
频道ID:
@你的频道名
消息内容:
节点已更新
{{$json.title}}
https://youtu.be/视频ID
四、最终效果
当视频说明最后200字符发生变化:
Telegram频道自动出现:
节点已更新
视频标题
https://youtu.be/xxxxxxx
五、一个更专业的优化(推荐)
其实你完全可以不用 YouTube API,直接抓网页:
https://www.youtube.com/watch?v=视频ID
解析:
ytInitialPlayerResponse
优点:
✔ 不需要API Key
✔ 不限请求次数
六、稳定性建议
定时建议:
10分钟
不要:
1分钟
YouTube会限流。
0 评论