先来简单说一下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的开关,这个自动化流程就可以开始执行了。
是不是非常的简单?
以上就是一个简单的案例,之后也会找一个遇到的实际案例用自动化流程工具实现,看看利用工具是如何提效的。