定时AI新闻(二)-AI新闻自动发布

定时AI新闻/博客(二)- 实现AI新闻自动发布

背景

续接上一篇博客 定时AI新闻/博客(一)- n8n搭建 ,本篇博客就来实现每日AI新闻(博客)的自动发布。

需求明确

判断今天是不是工作日,如果是工作日,那就从接口获取AI相关的新闻,交给Gemini进行总结汇总,再将内容整理发布到github仓库去,这样子自动触发cloudflare构建部署,博客即可更新。

技术选型

  1. n8n
  2. ChinaHolidayAPI - 查询指定日期是否工作日的免费api
  3. newsapi - 获取新闻
  4. gnews - 也是获取新闻
  5. Gemini - 谷歌的大模型,这里用来总结精炼新闻,每天都有一定的免费额度,足够我们实现功能
  6. Github - 博客代码部署在github上的,发布自然也要经过它,也是由它触发cloudflare的构建部署

前置准备

ChinaHolidayAPI可以直接使用,不用申请参数啥的。
newsapi和gnews都是邮箱注册即可,也有免费的额度使用。
Gemini也是由免费额度的,谷歌账号登录获取一下apikey即可。

这些都是基础操作,这里就不赘述了。

搭建流程

获取是否工作日

添加http请求,ChinaHolidayAPI 的接口不需要验证啥的,也不用带参数,就是获取今天是否是工作日。

添加一个条件判断,通过判断返回内容中的 isHoliday 字段来确定今日是否是工作日。

现在整体的流程如下,下一步就是在 true 分支上继续获取新闻处理:

需要注意的一点是,我们需要做好健壮性的处理,比如这个网络请求报错了怎么办?
在每个n8n的每个流程节点上,都有Settings选项,可以配置该节点的一些特性。

我们可以在On Error选项中,选择 Continue。这样会在该判断报错时,继续执行后续流程。相当于获取是否工作日失败,我都当做今天是工作日来处理。

获取新闻内容

  1. 请求新闻接口
    添加两个http请求节点,分别从newsapi和gnews获取新闻。要从if判断的true结果引出流程。

这两个请求也非常简单,都是GET请求,将你的apikey配置到url中即可。

https://newsapi.org/v2/everything?q=ai&apiKey=xxxx&pageSize=10&page=1 — newspai返回的数据量非常大,100条,设置一下页数和页大小,可以只获取到10条数据。
https://gnews.io/api/v4/search?q=ai&lang=en&apikey=xxxx

其中q参数是新闻的类型,我写的是ai,可以根据自己的需要改动即可。


现在手动触发一下工作流,查看两个接口返回的数据格式,方便后续处理。

分别双击运行之后的两个http节点,可以查看接口返回的数据。

  1. 整理数据
    通过观察可以发现(你也可以直接查看它们的文档),两个api的网络请求返回格式几乎一模一样,最终要的就是articles字段,它是一个数组,其中就是所有的新闻详情。
    我们需要将两个请求的articles字段进行合并,所以添加一个code节点进行数据合并,但是合并之前,我们要提前取出这两个articles。取出数据使用Edit Field节点。这里要注意是两个Edit Field节点,分别处理两个请求的返回内容。


    之后使用code节点,合并两个articles字段,代码如下(不会写可以问ai的):
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    var result1 = $('Edit Fields').first().json.articles
    var result2 = $input.first().json.articles

    return [
    {
    json: {
    articles: result2.concat(result1)
    }
    }
    ];

整体流程现在如下:

这里提一句:你可能注意到我的截图中,有些节点是紫色的,这是因为,我将该节点的数据(pin)钉住了,pin住的数据会在后续的执行中直接使用,不会进行真的再次请求,这对于我们调试工作流非常有用,特别是需要调用大模型时可以节约费用。

大模型整理新闻内容

搜索节点 AI Agent ,并将Code节点的输出引入到其输入。给其 Chat Model 添加一个模型,我这里使用的是Gemini。


选择你希望使用的模型,我这里使用的是Gemini 2.0 flash,它有免费的额度,足够我使用了。

双击AI Agent节点,进入编辑模式,自定义提示词。

我这里提供一个提示词参考,可以自行编辑修改。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
你是一名AI新闻编辑,负责筛选、翻译和整理最新的AI行业动态,并确保信息清晰、美观地呈现给读者。

任务要求:
1. 从{{ $json.articles.toJsonString() }}中筛选15条仅与AI技术进展和应用相关的新闻,忽略无关信息。
2. 精准翻译为中文,并保留业内常见的英文术语(如NeuralNetworks、ReinforcementLearning等,不必强制翻译)。
3. 确保每条新闻附带原始URL,方便读者获取详细信息,如果没有原始URL,则丢弃掉这条新闻。
4. 对输出内容进行排版美化,使用适当的换行、编号、粗体等格式,使信息更易阅读。
5. 请确保最终输出内容清晰、美观,方便读者快速获取关键信息。
6. 不要输出新闻之外的其他内容。
7. 过滤掉三星相关的新闻,我不喜欢三星。

例如:
1. **AI突破:新型Transformer架构提升文本理解能力**
[原文链接](URL)
研究人员开发了一种改进版的Transformer结构,相比传统模型,在文本分类和摘要生成方面提升了20%的准确率……

2. **OpenAI发布GPT-5,参数量达2万亿**
[原文链接](URL)
最新的GPT-5具备更强的推理能力,能够更自然地处理多轮对话,并支持实时检索

注意:这里{{ $json.articles.toJsonString() }}必须要转为字符串,就是说必须要加上这个 toJsonString(),因为前面处理出来的articles是个数组,如果直接传入,Gemini并不能拿到新闻内容,所以不能整理出结果。

运行一下,试试Gemini输出的效果,

提交内容到github进行发布

添加一个Github节点,选择 Edit a file 。

编辑github节点,File Path 填写你的博客仓库中提前准备好的AI日报的博客页面文件路径。这里是相对于仓库根目录的相对路径。
File Content 填写你的AI日报内容,我的模板如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
---
title: AI日报
date: 2025-06-20 15:12:11
categories:
- AI
tags:
- AI
cover: https://images.664663.xyz/images/2025/06/c3cc3a8cdd914960edde75ecc3e02541.png
---

## 本博客每个工作日早上8点自动更新(节假日我也想休息,嘻嘻哦)
### 本篇文章内容从newsapi和gnews获取,并由deepseek或Gemini进行自动归纳整理生成,仅供参考。

早上好,今天是{{ $item("0").$node["Merge1"].json["formattedDate"] }},以下是最新的AI行业新闻。

{{ $item("1").$node["Merge1"].json["output"] }}

我这里做了当日日期的获取 – {{ $item("0").$node["Merge1"].json["formattedDate"] }}
{{ $item("1").$node["Merge1"].json["output"] }} - 这里是AI输出的新闻内容,而且是markdown格式,可以直接使用

这两个都需要你替换成你的工作流的节点中的数据引用。根据自己需要修改即可,不要日期也行,而且我在这次示例中并没有实现日期的获取。

至此,就完成了整个工作流,再换个定时触发器,每天定时做更新即可。

总结

这个工作流其实我当初在做的时候也是碰到了很多问题,各种节点使用也不熟悉,翻文档才是王道。有时候,用代码来处理可能更符合程序员的习惯,但是对于其他人来说可能有一些门槛,并不适合。
文章里面有蛮多细节的东西,上一篇博客有讲到,比如添加凭证,添加定时触发,我也就略过没有再去重复了。