先来简单说一下n8n是什么:n8n 是一个开源的工作流自动化工具,用户可通过可视化界面创建和管理各种自动化任务。它支持与多个应用和服务的集成,无需编写代码即可实现复杂的业务流程自动化。对比make和zapier,n8n的优势是用户可以自托管,避免了第三方托管带来的数据隐私问题。
那么接下来我们试着实现一个简单的场景,看看n8n如何使用。
需求是这样:每周固定的一个时间点,我希望自动在youtube上搜索关于一些关键词的视频,把发布日期是本周的并且观看次数最多的5条视频整理出来,然后通过telegram机器人发给我。这样我每周就可以获取到我关心的内容并且最热门的视频了,提高我的效率。
如何在n8n上进行配置呢?
1、首先我们在首页,新建一个workflow

看到页面是这样的

我们就在这个页面来创建我们的工作流
2、添加一个Schedule Trigger节点

第一个节点,我们添加Schedule Trigger,它是一个根据时间来自动触发工作流的节点。

我们设置成每周日的早上9点触发这个工作流
3、添加HTTP Request节点
这个节点主要是用来通过http接口获取数据的节点,理论上任何开放http接口的应用,都可以用这个节点来获取数据
因为我们要获取到youtube的数据,所以我们用这个节点来实现。

youtube的接口文档可以看这个:https://developers.google.com/youtube/v3/docs/search/list?hl=zh-cn
我们在url输入接口地址:https://www.googleapis.com/youtube/v3/search 方法选择get
参数我们就根据接口文档来输入即可
比如
part=snippet
q=工作流
order=viewCount
type=video
key=your_api_key
publishedBefore和publishedAfter
这些参数都是可以在接口文档看到详细说明的
我简单说下和我们需求相关的
①q:指定了要搜索的查询字词,你需要查询什么内容,就输入什么内容。
②order:对资源进行排序的方法,我们输入viewCount,意为按查看次数从高到低对资源进行排序
③publishedAfter和publishedBefore:包含在指定时间内创建的资源。这两个字段的值如何写,一会再详细说下。
④key:输入你的youtube api的key值
接下来我们说说publishedAfter和publishedBefore
publishedBefore,我希望是取流程发起时的时间。publishedAfter,我希望取流程发起前7天的时间。 也就是说,通过publishedAfter和publishedBefore的时间设定,我希望取到自流程发起时前7天内的数据。
那么对于publishedBefore,我们就直接把第一节点output的时间戳拖拽到publishedBefore的value里即可。

对于publishedAfter,我们可能需要简单计算一下,在publishedBefore的基础上减去7天。
我们在http节点前增加一个code节点,写个简单的js帮我们计算出publishedAfter

code节点可以这样写
// 获取当前的时间戳
const timestamp = new Date();
// 减去7天
const publishedAfter = new Date(timestamp);
publishedAfter.setDate(publishedAfter.getDate() - 7);
// 格式化为 ISO 8601 格式,并保留原始时区信息
const formattedPublishedAfter = publishedAfter.toISOString();
return {
json: {
timestamp: timestamp,
publishedAfter: formattedPublishedAfter,
}
}
接着我们在http节点,把publishedAfter的时间戳也拖拽到publishedAfter的value里面

好了,那么这几个节点就配置完成了。
你可以点这个test试一下

可以看到output里已经有真实数据了,说明运行是成功的。

4、用code节点处理一下信息
可以看到http节点output的是一个数组,这个数组里有5条信息,也就是5个视频。

我想把这5个视频的信息合并到一起统一让telegram的bot发送一条信息给我,应该如何处理?
我们配置一个code节点,简单写个js来满足我们的需求
const items = $node["HTTP Request"].json.items;
let message = '';
items.forEach((item, index) => {
const title = item.snippet.title;
const description = item.snippet.description;
const videoId = item.id.videoId;
const videoUrl = `https://www.youtube.com/watch?v=${videoId}`;
message += `Video ${index + 1}:\nTitle: ${title}\nDescription: ${description}\nLink: ${videoUrl}\n\n`;
});
return [
{
json: {
message
}
}
]

运行后可以看到output里,我们的信息都合并成一条了
5、配置telegram节点
(1)我们先去telegram创建个机器人
如何配置?
①在Telegram中搜索“BotFather”,然后单击“开始”
②在BotFathe输入 /newbot的指令,即新建一个bot
③输入机器人的名称(以后可以更改)
④获得了bot的token,这个token保留好

到此机器人就创建好了。
(2)在n8n里添加telegram节点

选择send message
这里主要是配chatid 和 text
①chat id如何获取:给机器人发条消息,然后打开链接:https://api.telegram.org/bottoken/getUpdates,注意token这里要换成你机器人的实际token
打开链接之后,红框里的id ,就是chat id了

②text就是消息内容的配置,就是在bot里你的消息是什么样子的。我们直接把上个节点的output内容字段拖拽到text框内即可

那么所有的配置就完成了,可以试着点下test workflow,看看你能不能正常收到消息。

看样子是正常的了~

6、发布

点击active的开关,这个自动化流程就可以开始执行了。
是不是非常的简单?
以上就是一个简单的案例,之后也会找一个遇到的实际案例用自动化流程工具实现,看看利用工具是如何提效的。



Your point of view caught my eye and was very interesting. Thanks. I have a question for you. https://www.binance.info/register?ref=IHJUI7TF
789clubios is where it’s at if you’re on iOS, like me! Game’s smooth, easy to use and can play wherever you are. Defo recommend it, brothers. 789clubios
I don’t think the title of your article matches the content lol. Just kidding, mainly because I had some doubts after reading the article. https://accounts.binance.com/es/register?ref=RQUR4BEO
Your point of view caught my eye and was very interesting. Thanks. I have a question for you. https://www.binance.info/el/register?ref=DB40ITMB
Okay, so I gave v8clubvip a shot, and gotta say, it’s not bad. Feels kinda familiar, ya know? Like that old comfy shoe you can always rely on. Solid selection, nothing too crazy, but it does the trick. Check it out if you’re looking for something dependable. More deets: v8clubvip