n8n实战:批量获取多平台热点资讯(RSS源)+飞书表格+通知飞书群

0 阅读9分钟

做自媒体离不开选题,平时写文章都是看看各平台的热搜,还有最新资讯什么的,看看是否有合适的选题,可是每次都要打开各平台去看,比较麻烦。

今天我们分享一个用n8n和RSS汇总不同平台的热搜和最新资讯,打造一个自己专属的选题库。

工作流的运行逻辑

定时从多个平台的RSS源批量获取热点资讯,处理后写入飞书电子表格并通知消息到飞书群

在这里插入图片描述

🛠️ 准备工作

一、飞书应用配置

创建飞书应用主要以下几步:

1、登录飞书开放平台,进入开发者后台:

飞书开放平台: open.feishu.cn

2、创建一个企业自建应用

一般开发者都是以个人身份登录的飞书,个人可以成为只有一人的企业

输入应用名称、应用描述并设置图标,点击「创建」按钮,完成应用创建。

在这里插入图片描述

3、添加权限

切换左侧「权限管理」菜单,点击「开通权限」按钮,为应用添加文档相关的权限。

在这里插入图片描述

搜索框输入 电子表格 ,全选,右下角点击确认开通权限

在这里插入图片描述

便于应用发送提醒消息,建议也开通下面的消息权限。

在这里插入图片描述

4、激活机器人能力

在应用配置页面,切换左侧「添加应用能力」菜单,点击机器人能力「添加」按钮,为应用激活机器人能力。

在这里插入图片描述

激活后,在左侧「应用能力」菜单栏下,可以看见「机器人」菜单。

在这里插入图片描述

我们激活机器人能力,是给应用添加飞书文档的权限,机器人配置保持默认即可。

5、创建版本并发布

点击创建版本

在这里插入图片描述

输入版本号和更新说明,左下角点击保存

在这里插入图片描述

确认发布

在这里插入图片描述

获取并保存 App IDAPP Secret

在这里插入图片描述

二、在飞书创建「一人群」,添加机器人

这步非常关键,经常会有同学会卡在此处。

请按照下面步骤操作:

1、打开飞书桌面端或移动端。

2、点击左侧「消息」 → 右上角「+」 → 选择「创建群组」

在这里插入图片描述

在创建群组弹出框中填写群名称,下方不要添加其他群成员,然后点击右下角的「创建」按钮,完成群组的创建

在这里插入图片描述

点击群聊右上角「···」→ 选择「群机器人」→ 点击 「添加机器人」,选择你要添加的机器人。

在这里插入图片描述

如果在这一步添加机器人时,只能看见「自定义机器人」,并且提示「本群为外部群」,则一定是上一步建群时方式不对。

在这里插入图片描述

三、给飞书文件夹添加应用机器人

给飞书文件夹添加机器人权限,这个步骤也很关键。操作以后,应用机器人才可以使用拿到的 folder_token , 在文件夹下创建文档或者写入内容。

1、 新建一个文件夹,用于存放n8n输出的内容

在这里插入图片描述

2、打开该文件夹页面 ,点击右侧「分享」按钮。

在这里插入图片描述

3、在弹出的对话框中,搜索并添加应用对应的机器人群组为共享成员。

在这里插入图片描述

将添加的应用设置为「可编辑」权限。

在这里插入图片描述

四、安装飞书社区节点

飞书的社区节点在n8n工作台不能直接搜到,需要手动添加。

点击左下角头像的「settings」 → 点击「install」

在这里插入图片描述

在弹出的对话框输入飞书社区节点使用的npm包: n8n-nodes-feishu-lite , 完成安装。

在这里插入图片描述

安装完成后,可以在页面看到下面内容,就可以使用飞书社区节点了。

在这里插入图片描述

五、添加飞书凭证

安装完成之后,我们要去添加一下飞书的凭证

找到这个飞书的凭证进行添加

在这里插入图片描述

这里需要输入飞书的 App IDAPP Secret

在这里插入图片描述

🚀 创建工作流

节点一:定时触发节点(Schedule)

新建工作流,设置定时触发:点击n8n顶部的 「Create Workflow(创建工作流)」 ,进入画布页面。首先点击「+」搜索并选择 Schedule 节点

在这里插入图片描述

设置 Interval 为「Days」, Period 为1(即每天执行), Trigger Time 设置为「7am」(即早上7点)。

在这里插入图片描述

点击「测试步骤」运行输出数据,把 Timezone 的时区改为上海,如果不是上海时区,返回界面点击右上角「···」- 设置 - 在时区下拉框中找到 Asia/Shanghai 时区,在测试一遍

在这里插入图片描述

在这里插入图片描述

节点二:RSS节点

添加RSS节点:我这里方便演示,先添加两个节点

在这里插入图片描述

一个节点订阅的是百度热点文章,另一个节点订阅的是微信最新的文章

百度热点文章: https://rss.aishort.top/?type=baidu 微信最新文章: https://rss.aishort.top/?type=wasi

在这里插入图片描述

添加好之后执行测试,看到获取成功,一个获得了100条数据,另外一个获得了10条数据:

在这里插入图片描述

节点三:数据预处理节点

数据预处理:我们需要对获取的数据进行格式化处理。这里我们获取的都是RSS格式的数据,但不知道每篇内容的来源是哪里的,所以我们这里需要区分一下。

在这里插入图片描述

添加两个代码节点,对数据进行处理

在这里插入图片描述

进入code节点,按照如下配置,添加一个来源的属性,这个代码的意思就是给所有返回的内容加一个 source 字段来标记内容的来源

在这里插入图片描述

执行一下工作流,可以看到现在的数据多了一个来源的属性,接下来我们给不同的订阅分支设置不同来源

在这里插入图片描述

节点四:合并数据节点

合并数据:搜索 merge ,添加这个节点,然后把不同分支都连接过来。

在这里插入图片描述

修改设置,模式选择 append ,数字代表合并多少个分支,如果订阅的比较多,可以修改这个数字。

设置好后,点击执行,可以看到项目合在一起了

在这里插入图片描述

节点五:数据过滤节点

过滤数据:如果数据很多,需要筛选,这里我们只要发布日期在1天之内的内容

设置过滤的条件如下

在这里插入图片描述

表达式 new Date(Date.now() - 1 * 24 * 60 * 60 * 1000) 代表1天之前的时间。

设置后直接运行,可以看到过滤后结果

在这里插入图片描述

节点六:合并项目节点

合并项目:我们在批量获取数据后,大量发送http请求一般会有调用频次的限制。为了解决这个问题,需要把所有内容组装成一个JSON,然后一次性写入飞书表格。

搜索 aggregate ,添加这个节点,将前面的多个项目合并到一个变量中

在这里插入图片描述

添加设置并执行节点,可以看到所有内容数据都在字段 data 中了

在这里插入图片描述

节点七:创建电子表格节点

创建电子表格:为什么不直接写表格呢? 这里我们把功能做的更灵活一些,让工作流定时跑,每天都会生成一个电子表格,里面是当天的内容。

搜索 feishu 找到下面这个节点,添加进来

在这里插入图片描述

配置一下节点,设置表格标题为当天的日期,代码如下:

{{((d) => `${d.getFullYear()}${(d.getMonth()+1).toString().padStart(2,'0')}${d.getDate().toString().padStart(2,'0')}日`)(new Date())}}

文件夹 token 就在打开飞书云文档文件夹的链接地址上:

在这里插入图片描述

配置完成后执行一下,看到如下输出表示创建成功

在这里插入图片描述

节点八:获取电子表格节点

获取工作表:我们在写数据之前,需要获取表单,熟悉 Excel 的都会知道,一个表格里面可以有许多不同的表单,我们需要获取当前表格的表单ID。

在这里插入图片描述

配置执行一下

在这里插入图片描述

节点九:数据整理节点

数据整理:我们需要按照飞书的格式要求对数据进行处理。

添加code节点,把前面的JSON数据处理成下面这样的格式

在这里插入图片描述

下面是节点中的代码:

// 转换函数 
functionconvertToTableData(data) { 
// 表头(固定) 
const headers = ["标题","链接","发布时间","内容","摘要","来源"]; 
// 数据行 
const rows = data.map(item=> 
    [ 
      item.title||"", // 标题      
      item.link||"", // 链接  
      item.pubDate||"", // 发布时间
      item.content||"", // 内容
      item.contentSnippet||"", // 摘要
      item.source||""// 来源            
    ]); 
// 返回:表头 + 数据行 
return [headers, ...rows];
} 

// Add a new field called 'myNewField' to the JSON of the item 
// 原始数据 
const inputData = $('Aggregate').item.json.data; console.log(inputData) 
// 执行转换 
const tableData = convertToTableData(inputData); 
// 打印结果(可在控制台查看) 
console.log(tableData); 

$input.item.json.tableData= tableData; 

return $input.item;

节点十:写入电子表格节点

写入数据:获取工作表之后,我们需要写入数据到电子表格

在这里插入图片描述

将处理好的数据还有表格ID放进来,保存运行

在这里插入图片描述

节点十一:通知飞书群节点

我们先要获取飞书机器人 Webhook URL

打开飞书,左上角「+」号创建一个群组

创建好之后点击群组右上角「···」里的设置 - 点击群机器人 - 添加机器人

在这里插入图片描述

点击自定义机器人

在这里插入图片描述

命名之后点击添加

在这里插入图片描述

复制 Webhook URL 地址

在这里插入图片描述

下一步添加Code节点

这里我们使用Code内置函数发送HTTP请求,不用HTTP是因为Code输出更稳定,不像HTTP老是报错

在这里插入图片描述

粘贴以下JavaScript代码,替换以下代码中的 [你的电子表格链接前缀][你的飞书机器人Webhook URL]

// --- 使用n8n内置函数发送HTTP请求 ---

// 这里是生成的电子表格URL
const spreadsheetUrl = '[你的电子表格链接前缀]' + $input.first().json.data.spreadsheetToken

// 消息内容
const messageContent = '每日RSS文章资讯\n' + spreadsheetUrl;

// 这是要发送给飞书的、标准格式的JSON数据
const feishuPayload = {
  "msg_type": "text",
  "content": {
     "text": messageContent
  }
};

// 这里是您的飞书机器人Webhook URL
const webhookUrl = '[你的飞书机器人Webhook URL]';

try {
  // 使用n8n官方内置的httpRequest函数来发送POST请求
  // 这次我们不再需要任何外部库
  const response = awaitthis.helpers.httpRequest({
    method: 'POST',
    url: webhookUrl,
    headers: {
      'Content-Type': 'application/json'
    },
    // 注意:n8n官方函数使用 'body' 作为参数名,而不是 'data'
    body: feishuPayload
  });

  // 如果成功,返回飞书服务器的响应
  return [{
    json: {
      success: true,
      feishu_response: response
    }
  }];

} catch (error) {
  // 如果失败,返回错误信息
  return [{
    json: {
      success: false,
      error_message: error.message,
      // 注意:错误对象结构也可能不同,我们简化处理
      error_details: error.response ? error.response.body : 'No response data'
    }
  }];
}

所有节点配置完成后,点击n8n底部的「执行工作流」按钮,测试完整的自动化流程。

在这里插入图片描述

你会看到:首先通过RSS获取数据,然后经过数据处理,最后资讯被成功保存到飞书电子表格并通知到飞书群中!

在这里插入图片描述 在这里插入图片描述

最后一步,也是最关键的一步: 点击n8n右上角的 「 Activate(激活)」 按钮,激活整个工作流! 从此,你自己专属的选题库就正式上线了!每天早上7点,系统都会自动获取最新的RSS热点资讯,准时推送到你的飞书群中,你无需任何手动干预!

在这里插入图片描述

如果你在搭建过程中遇到任何问题,或者有什么更酷的玩法,欢迎在评论区留言, 一起交流探讨。


欢迎在评论区分享你的看法 👇

如果觉得不错,随手点个赞👍 + 推荐❤️ + 转发📮三连吧

关注我们,获取更多优质技术内容 ⭐