3. 创建工作流


创建每日自动获取youtube热点咨询工作流

创建 DataTable

image-20260415224113621

进入 n8n 左侧菜单 → 「个人生活」→ 「数据表」> 「创建数据表」。

image-20260415224158163

新建表格命名为 YouTube_Hot_Trends

image-20260415224515107

点击右上角添加以下列:

datetitlechannelvideo_idurlhot_scoredays_agoai_summary

类型全部选 :string


创建工作流

image-20260415224742893

点击「个人生活」→ 「工作流程」> 「创建工作流程」。

image-20260415224853060

点击右上角「+」。

image-20260415224924991

添加「Schedule Trigger」节点。

image-20260415224959810

点击节点进行配置:

  • 触发间隔:Days

  • 天数:1天

  • Trigger at Hour:9点

  • 触发点:0分

image-20260415225448476

添加 3 个「HTTP Request」节点。

image-20260415225534531

image-20260415225622622

image-20260415225635818

方法都为:GET,然后依次填入以下 URL,:

  • 科技频道:https://www.youtube.com/feeds/videos.xml?channel_id=UCXuqSBlHAE6Xw-yeJA0Tunw
  • 金融频道:https://www.youtube.com/feeds/videos.xml?channel_id=UCV6KDgJskWaEckne5aPA0aQ
  • 新闻频道:https://www.youtube.com/feeds/videos.xml?channel_id=UCupvZG-5ko_eiXAupbDfxWw

image-20260415225832128

将3个「HTTP Request」节点与「Schedule Trigger」节点连接。

image-20260415225910053

添加「Merge」节点。

image-20260415225953483

点击「Merge」节点进行配置:

  • 模式:Append

  • 输入数量:3

image-20260415230108207

将三个「HTTP Request」节点分别连入「Merge」节点的 输入1、2、3。

image-20260415230242607

添加「Code」节点,语言选 JavaScript,连接到「Merge」节点的输出。

image-20260415230316482

点击「Code」节点进行配置,

  • 模式:Run Once for ALL items

  • 语言:JavaScript

  • 粘贴以下代码:

// 解析多个频道的RSS数据
const allInputs = $input.all();
let allVideos = [];

for (const input of allInputs) {
  const xmlData = input.json.data;
  const entries = xmlData.match(/<entry[\s\S]*?<\/entry>/g) || [];
  
  const videos = entries.map(entry => {
    const titleMatch = entry.match(/<title>([^<]*)<\/title>/);
    const title = titleMatch ? titleMatch[1] : '';
    
    const videoIdMatch = entry.match(/<yt:videoId>([^<]*)<\/yt:videoId>/);
    const videoId = videoIdMatch ? videoIdMatch[1] : '';
    
    const publishedMatch = entry.match(/<published>([^<]*)<\/published>/);
    const published = publishedMatch ? publishedMatch[1].split('T')[0] : '';
    
    const authorMatch = entry.match(/<name>([^<]*)<\/name>/);
    const channel = authorMatch ? authorMatch[1] : '';
    
    // 计算发布天数(越新分数越高)
    const daysAgo = Math.floor((new Date() - new Date(publishedMatch ? publishedMatch[1] : 0)) / (1000 * 60 * 60 * 24));
    const recencyScore = Math.max(0, 30 - daysAgo);
    
    return {
      title: title,
      videoId: videoId,
      url: `https://youtube.com/watch?v=${videoId}`,
      published: published,
      channel: channel,
      daysAgo: daysAgo,
      hotScore: recencyScore
    };
  });
  
  allVideos = allVideos.concat(videos);
}

// 按新鲜度排序,取前15个
allVideos.sort((a, b) => b.hotScore - a.hotScore);
const topVideos = allVideos.slice(0, 15);

return topVideos;

image-20260415230547780

添加「OpenAI」节点(向模型发送消息),连接到「Code」输出。

image-20260415230659520

点击「OpenAI」节点进行配置:

  • 资历:可自行选择API

  • 资源:Text

  • 运营:Message a Model

  • 模型:可自行选择模型

  • 信息类型:Text

  • 职责:User

  • 提示词填入:

分析这个YouTube热门视频:
标题:{{ $json.title }}
频道:{{ $json.channel }}
发布时间:{{ $json.published }}({{ $json.daysAgo }}天前)

请用一句话总结这个视频为什么成为热点(不超过30字)。

image-20260415231033171

添加「DataTable」节点,选 Upsert排,连接到「OpenAI」输出。

image-20260415231755742

image-20260415231804266

点击「DataTable」节点进行配置:

  • 资源:Row

  • 运营:Upsert

  • 数据表:YouTube_Hot_Trends

  • 必须匹配:Any Condition

  • 添加一个条件:柱状结构(Column) 选 video_id,状况(Condition) 选 Equals,价值(Value )填 {{ $('Code in JavaScript').item.json.videoId }}

  • 映射列模式选 Map Each Column Manually,按下表填入各字段:

字段
date{{ $('Code in JavaScript').item.json.published }}
title{{ $('Code in JavaScript').item.json.title }}
channel{{ $('Code in JavaScript').item.json.channel }}
video_id{{ $('Code in JavaScript').item.json.videoId }}
url{{ $('Code in JavaScript').item.json.url }}
hot_score{{ $('Code in JavaScript').item.json.hotScore }}
days_ago{{ $('Code in JavaScript').item.json.daysAgo }}
ai_summary{{ $json.output[0].content[0].text }}

image-20260415231850676

配置完成后点击「执行工作流程」测试运行,确认数据正常写入后激活自动调度。

image-20260415232011903

image-20260415232130730

执行成功后进入 n8n 左侧菜单 → 「个人生活」→ 「数据表」> 「YouTube_Hot_Trends」即可看到输出结果。

评论

0
还没有评论,来写第一条吧