n8n 配置 workflow

一、目标

在 n8n 平台配置自动化 workflow,实现 定时触发 -> 获取b站关键词为 AI 大模型的20个视频 -> 自定义热度算法进行排序 -> 生成 OpenAI 结构化输出报告 -> 发送邮箱

二、实现步骤

2.1 步骤一:创建定时触发器

点击 Add first step 添加第一个节点

由于我们想每天获取最新的资讯,因此需要设定定时触发器(schedule trigger)每天上午10:00定时触发

同时请注意时区需要选择 Asia/shanghai

2.2 步骤二:HTTP Request 获取B站视频

搜索节点,选择 HTTP Request

基础配置信息如下:

plain 复制代码
Method: GET
URL: https://api.bilibili.com/x/web-interface/search/type
Response Format: JSON

添加查询参数如下:

plain 复制代码
search_type = video
keyword = AI大模型 教程
order = pubdate
page = 1
page_size = 20

添加请求头信息如下:

plain 复制代码
User-Agent = Mozilla/5.0
Referer = https://search.bilibili.com/
  • 其中 order=pubdate 是按发布时间取最近视频。
  • 直接 order=click 按播放量搜更像"热度最高",但更容易触发 B 站 412 风控。
  • 所以后面会在 n8n 里按播放、点赞、收藏、弹幕、评论计算热度分。

2.3 步骤三:Code 对视频进行排序处理

搜索节点,选择 Code 节点

复制如下 JavaScript 代码

javascript 复制代码
const response = items[0].json;
const rows = response?.data?.result || [];

function stripHtml(text) {
  return String(text || '')
    .replace(/<[^>]*>/g, '')
    .replace(/&quot;/g, '"')
    .replace(/&amp;/g, '&')
    .replace(/&lt;/g, '<')
    .replace(/&gt;/g, '>')
    .trim();
}

function toNumber(value) {
  if (typeof value === 'number') return value;
  const text = String(value || '').trim();
  if (!text || text === '--') return 0;
  if (text.endsWith('万')) return Number.parseFloat(text) * 10000;
  return Number.parseFloat(text.replace(/,/g, '')) || 0;
}

const videos = rows
  .filter(v => v.type === 'video')
  .map(v => {
    const play = toNumber(v.play);
    const like = toNumber(v.like);
    const favorites = toNumber(v.favorites);
    const danmaku = toNumber(v.danmaku);
    const review = toNumber(v.review);

    return {
      title: stripHtml(v.title),
      author: v.author || '',
      bvid: v.bvid || '',
      url: v.bvid ? `https://www.bilibili.com/video/${v.bvid}` : v.arcurl,
      description: stripHtml(v.description),
      tags: v.tag || '',
      duration: v.duration || '',
      publishedAt: v.pubdate
        ? new Date(v.pubdate * 1000).toISOString().slice(0, 10)
        : '',
      play,
      like,
      favorites,
      danmaku,
      review,
      heatScore: play + like * 20 + favorites * 30 + danmaku * 10 + review * 15,
    };
  })
  .sort((a, b) => b.heatScore - a.heatScore)
  .slice(0, 10);

const reportInput = {
  date: new Date().toLocaleDateString('zh-CN', { timeZone: 'Asia/Shanghai' }),
  topic: 'Bilibili 最新 AI 教程视频热度 Top 10',
  videos,
};

return [{ json: reportInput }];

2.4 步骤四:OpenAI 生成结构化报告

搜索节点,选择 AI 节点,并选择 OpenAI 分组的 Message Model

模型选择gpt-4o-mini,系统提示词如下:

plain 复制代码
你是我的中文 AI 学习助理。下面是今天从 Bilibili 抓取到的"AI 教程"相关视频候选列表,请你生成一份结构化中文报告。

要求:
1. 不要编造视频里没有的信息,只能基于标题、描述、标签、作者、热度数据分析。
2. 先给出 150 字以内的总览。
3. 按排名列出 10 个视频,每个包含:标题、作者、链接、推荐理由、适合人群、可能能学到什么。
4. 最后给出"今天最值得优先看的 3 个"和理由。
5. 输出适合直接作为邮件正文阅读,使用清晰的小标题和列表。

今天日期:{{ $json.date }}
视频数据 JSON:
{{ JSON.stringify($json.videos, null, 2) }}

2.5 步骤五:发送报告到邮箱

搜索节点,选择 Send Email 节点

点击 setup credentials,配置如下内容

  • user:你的 163 邮箱账号
  • password:是你的 163 授权码,可以在163设置中查看
  • Host:smtp.163.com
  • Port:465

然后继续配置如下内容:

  • from email:发件人
  • to email:收件人
  • subject: 主题
  • email format:邮件格式(text 文本)
  • text:文本内容
plain 复制代码
{{ $json.output[0].content[0].text }}

三、测试

点击执行: execute workflow,如果没有报错说明执行成功

此时在邮件中也能看到发送成功,一切大功告成!

相关推荐
土星云SaturnCloud1 小时前
边缘计算赋能工业智能化:重大危险源监测+产线控制+视觉分析一体化解决方案
服务器·人工智能·ai·边缘计算
爱编程的小新☆1 小时前
Langchain4j框架入门
ai·langchain4j
m0_634666731 小时前
Zero 和 Spec Kit:AI Agent 正在把“编程”推向更显式的契约时代
人工智能·ai
ftpeak2 小时前
LangGraph Agent 开发指南(10~子图 Subgraphs)
python·ai·langchain·ai编程·langgraph
xian_wwq2 小时前
【学习笔记】探讨大模型应用安全建设系列——顶层规划:如何推动公司级大模型安全建设-1
笔记·学习·安全·ai
令狐少侠20112 小时前
创建钉钉企业内应用,钉钉AI助手操作钉钉文档
ai·钉钉
Orange_sparkle2 小时前
什么是前缀缓存,缓存命中
缓存·ai·deepseek·claude code
声声codeGrandMaster2 小时前
seq2seq概念和数据集处理
人工智能·pytorch·python·算法·ai
兮山与2 小时前
SpringAI3.0
ai