dify案例分享-Dify+RSS 聚合 8 大平台实时热点,新闻获取效率飙升 300%

1.前言

RSS(Really Simple Syndication)是一种基于XML的网络内容分发格式,主要用于将新闻、博客、论坛等频繁更新的内容以订阅的方式提供给用户。它允许用户通过RSS阅读器(或聚合器)在一个界面中跟踪多个网站的更新,而无需手动访问每个网站。

image-20250609170512958

热点新闻是指在特定时间段内,受到公众广泛关注和讨论的新闻事件或话题。这些新闻通常具有时效性、影响力和传播性,能够引发社会的广泛关注和讨论。热点新闻不仅反映了当前社会的热点问题,也体现了公众的兴趣和关注点。

在当今信息化浪潮席卷的时代,海量媒体资讯如潮水般每日涌来。然而,受制于有限的时间与精力,人们往往更倾向于聚焦两类信息:一类是与自身兴趣深度契合的个性化新闻,另一类则是当下全网热议的焦点事件。在此背景下,能否快速、精准地捕捉实时热点资讯,成为现代人高效获取信息、把握时代脉搏的关键所在。

不过之前的案例是通过爬虫方式实现最新的新闻获取,时效性不够,另外新闻覆盖的内容也不全面。今天给大家介绍使用RSS多平台新闻聚合结合dify实现一个多平台实时获取最新新闻资讯的工作流。

工作流效果如下:

image-20250609171838135

生成的效果如下:

image-20250609172001162

那么这样的工作流是如何制作的呢?话不多说下面给大家手把手搭建这样的工作流。

2.工作流的制作

我们在dify工作台上,新建空白应用

image-20250609172204037

我们先拆解下这个工作流,这个工作流主要是有开始、条件分支、rookie_rss(第三方插件)、代码执行、变量聚合器、系统时间(第三插件)、llm大语言模型、直接回复等。

其中本次工作流用到了一个新的第三方组件,名字叫做rookie_rss。我们首先介绍一下rookie_rss安装使用。

rookie_rss安装

我们在dify的 插件市场中查找名称“rookie_rss”

image-20250609172903767

搜索到这个插件后,点击“ 安装” 按钮完成插件的安装。

image-20250609172944559

安装完成后,我们可以在我们已经安装的插件列表中查询到

image-20250609173027782

rookie_rss 授权

插件安装完成后,我们打开rookie_rss 点击”“授权” 按钮

image-20250609173140473

这里默认弹出每日热榜的RSS接口,我们点击保存就可以了

image-20250609173225833

保存按钮提交后,我们就可以看到这个组件授权成功。(可以访问上面热榜URL)

image-20250609173314064

接下来我们回到工作流,创建开始节点。

开始

这个开始节点我们这里设置一个type 类型,为了方便用户输入我们这里设置下拉选型。

image-20250609173520559

这里我们提供 掘金、bilibili、ac_fun、微博、今日头条、36kr、虎嗅、hellogithub 热点新闻提供用户选择。

(新浪微博需要登录,这里主要注意,知乎测试返回不了数据,我们直接从工作流中删除)

image-20250609173701384

上面我们就完成了开始节点的配置。

条件分支

这个条件分支也不难, 主要就是根据前面 type类型进行判断。 我们这里也是根据上面掘金、bilibili、ac_fun、微博、今日头条、36kr、虎嗅、hellogithub进行判断,下面的一张图就能看的明白了。

image-20250609174319211

rookie_rss

这个rookie_rss我们需要从工作流画布中添加。

image-20250609174533376

这里我们需要拖拽出多个节点。 这个组件有2个参数,第一个是 平台的名称,组件提供下拉选项提供用户选择。

image-20250609174704359

第二个参数是 获取信息的数量。我这里填写 5条新闻。

image-20250609174746698

rookie_rss 返回的生成数据如下(方便大家理解和调试)

{
  "text":"",
"files":[],
"json":[
    {
      "articles":[
        {
          "author":null,
          "hot_score":43139928,
          "id":"7512959589315346468",
          "links":{
            "mobile":"https://api.toutiaoapi.com/feoffline/amos_land/new/html/main/index.html?topic_id=7512959589315346468",
            "pc":"https://www.toutiao.com/trending/7512959589315346468/"
          },
          "metadata":{
            "list_type":"热榜",
            "platform":"toutiao",
            "update_time":"2025-06-09T09:40:06.916Z"
          },
          "rank":1,
          "title":"两办印发重磅民生文件"
        },
        {
          "author":null,
          "hot_score":39034620,
          "id":"7513402802211717129",
          "links":{
            "mobile":"https://api.toutiaoapi.com/feoffline/amos_land/new/html/main/index.html?topic_id=7513402802211717129",
            "pc":"https://www.toutiao.com/trending/7513402802211717129/"
          },
          "metadata":{
            "list_type":"热榜",
            "platform":"toutiao",
            "update_time":"2025-06-09T09:40:06.916Z"
          },
          "rank":2,
          "title":"马斯克的“星链”卫星大批坠落"
        }
      ],
      "code":200,
      "pagination":{
        "returned":2,
        "total":2
      },
      "status":"success"
    }
]
}

代码执行

这个代码执行也是多个,主要是通过代码的方式处理一下rookie_rss 数据返回。

输入参数 arg1 其中对应的值是一个数组对象

image-20250609175047452

输出变量 result, 返回类型是string

中间处理的代码如下:

import json
from datetime import datetime, timezone, timedelta

defmain(arg1: str) -> dict:
    try:
        # 如果已经是 dict 或 list,直接用,不再 loads
        ifisinstance(arg1, (dict, list)):
            parsed_data = arg1
        else:
            parsed_data = json.loads(arg1)
        
        # 后续逻辑保持不变
        ifisinstance(parsed_data, dict) and"arg1"in parsed_data:
            data = parsed_data["arg1"]
        else:
            data = parsed_data
        
        articles = []
        ifisinstance(data, list):
            for item in data:
                articles.extend(item.get("articles", []))
        elifisinstance(data, dict):
            articles = data.get("articles", [])
            
        table = []
        
        # 添加表头
        table.append(["标题", "热门评分", "新闻链接-手机端", "新闻链接-PC端", "更新时间"])
        
        for item in articles:
            title = item.get('title', '')
            hot_score = item.get('hot_score', '')
            mobile_link = item.get('links', {}).get('mobile', '')
            pc_link = item.get('links', {}).get('pc', '')
            update_time_raw = item.get('metadata', {}).get('update_time', '')
            
            update_time = ''
            if update_time_raw:
                try:
                    # 先尝试按 ISO8601 带毫秒Z格式解析
                    dt_utc = datetime.strptime(update_time_raw, "%Y-%m-%dT%H:%M:%S.%fZ")
                    dt_utc = dt_utc.replace(tzinfo=timezone.utc)
                    # 转换为上海时间(UTC+8)
                    shanghai_tz = timezone(timedelta(hours=8))
                    dt_shanghai = dt_utc.astimezone(shanghai_tz)
                    update_time = dt_shanghai.strftime("%Y-%m-%d %H:%M:%S")
                except Exception:
                    try:
                        # 不带毫秒的ISO8601格式
                        dt_utc = datetime.strptime(update_time_raw, "%Y-%m-%dT%H:%M:%SZ")
                        dt_utc = dt_utc.replace(tzinfo=timezone.utc)
                        shanghai_tz = timezone(timedelta(hours=8))
                        dt_shanghai = dt_utc.astimezone(shanghai_tz)
                        update_time = dt_shanghai.strftime("%Y-%m-%d %H:%M:%S")
                    except Exception:
                        try:
                            # 如果是时间戳(秒级或毫秒级)
                            ts = int(update_time_raw)
                            iflen(str(update_time_raw)) == 13:
                                ts = ts / 1000
                            dt = datetime.fromtimestamp(ts, tz=timezone.utc)
                            dt_shanghai = dt.astimezone(timezone(timedelta(hours=8)))
                            update_time = dt_shanghai.strftime("%Y-%m-%d %H:%M:%S")
                        except Exception:
                            # 直接使用原始字符串
                            update_time = str(update_time_raw)
            
            table.append([title, hot_score, mobile_link, pc_link, update_time])

        return {
            "result": str(table).replace("'", '"')
        }
    except Exception as e:
        return {
            "result": [["错误", f"{type(e).__name__}: {e}"]]
        }

image-20250609175242409

变量聚合器

变量聚合器的目的主要是把代码处理后的同类型返回结果聚合到一个输出。这里我们定义多个输入变量。这些输入变量都是代码执行对应返回。

image-20250609175452555

这个地方配置需要仔细,否自返回的数据会出现错乱。其他的节点和上面图类似,这里就不做详细展开了。

获取当前时间

这个组件主要目的是在最后直接回复的时候方便输出当前生成的热点新闻执行时间。

image-20250609175746711

时间格式 %Y-%m-%d %H:%M:%S

市区:亚洲/上海

image-20250609175852975

LLM大语言模型

这里我们使用一个文本大语言模型对前面代码处理返回的数组数据进行转换,让返回的数据转出markdown格式的数据。

模型这里我们使用阿里百炼平台提供的deepseek-v3

image-20250609180852827

系统提示词:

 请将输出的表格{{#1749458027152.output#}}转换成markdown表格输出

image-20250609180948928

直接回复

直接回复这里我们使用3个参数拼接起来。

第一个是开始节点用户输入的 type .第二个参数 获取当前系统时间。 第三个参数就是LLM大语言模型返回的markdown格式数据

image-20250609181202580

以上我们就完成了工作流的搭建。

3.验证及测试

我们制作好的工作流可以在工作流平台上验证测试一下,点击右上角“预览”按钮。

image-20250609181345225

聊天窗口中随便输入消息触发工作执行。

image-20250609181638591

生成表格后,点击新闻链接 打开对应的新闻详细信息。

image-20250609181758426

体验地址

工作流地址:https://dify.duckcloud.fun/chat/qW4sBC02JNmiailX备用地址(http://14.103.204.132/chat/qW4sBC02JNmiailX)

4.总结

今天主要带大家了解并实现了使用 RSS 多平台新闻聚合结合 Dify 搭建实时获取最新新闻资讯工作流的方案。该工作流的搭建涉及多个关键步骤:开始节点配置、条件分支判断、rookie_rss 插件的安装与使用、代码执行处理数据、变量聚合器聚合结果、获取当前时间、LLM 大语言模型转换数据格式以及直接回复展示最终结果。通过整合这些工作流节点和工具,该方案不仅解决了之前通过爬虫获取新闻时效性不够、内容覆盖不全面的问题,还能够让用户在一个界面中快速、精准地获取多个平台的实时热点新闻资讯。

感兴趣的小伙伴可以按照本文步骤去尝试搭建自己的多平台实时获取最新新闻资讯的工作流。今天的分享就到这里结束了,我们下一篇文章见。

最后

为什么要学AI大模型

当下,⼈⼯智能市场迎来了爆发期,并逐渐进⼊以⼈⼯通⽤智能(AGI)为主导的新时代。企业纷纷官宣“ AI+ ”战略,为新兴技术⼈才创造丰富的就业机会,⼈才缺⼝将达 400 万!

DeepSeek问世以来,生成式AI和大模型技术爆发式增长,让很多岗位重新成了炙手可热的新星,岗位薪资远超很多后端岗位,在程序员中稳居前列。

在这里插入图片描述

与此同时AI与各行各业深度融合,飞速发展,成为炙手可热的新风口,企业非常需要了解AI、懂AI、会用AI的员工,纷纷开出高薪招聘AI大模型相关岗位。
在这里插入图片描述
最近很多程序员朋友都已经学习或者准备学习 AI 大模型,后台也经常会有小伙伴咨询学习路线和学习资料,我特别拜托北京清华大学学士和美国加州理工学院博士学位的鲁为民老师给大家这里给大家准备了一份涵盖了AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频 全系列的学习资料,这些学习资料不仅深入浅出,而且非常实用,让大家系统而高效地掌握AI大模型的各个知识点。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

AI大模型系统学习路线

在面对AI大模型开发领域的复杂与深入,精准学习显得尤为重要。一份系统的技术路线图,不仅能够帮助开发者清晰地了解从入门到精通所需掌握的知识点,还能提供一条高效、有序的学习路径。

img

但知道是一回事,做又是另一回事,初学者最常遇到的问题主要是理论知识缺乏、资源和工具的限制、模型理解和调试的复杂性,在这基础上,找到高质量的学习资源,不浪费时间、不走弯路,又是重中之重。

AI大模型入门到实战的视频教程+项目包

看视频学习是一种高效、直观、灵活且富有吸引力的学习方式,可以更直观地展示过程,能有效提升学习兴趣和理解力,是现在获取知识的重要途径

在这里插入图片描述
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
在这里插入图片描述

海量AI大模型必读的经典书籍(PDF)

阅读AI大模型经典书籍可以帮助读者提高技术水平,开拓视野,掌握核心技术,提高解决问题的能力,同时也可以借鉴他人的经验。对于想要深入学习AI大模型开发的读者来说,阅读经典书籍是非常有必要的。
在这里插入图片描述

600+AI大模型报告(实时更新)

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。
在这里插入图片描述

AI大模型面试真题+答案解析

我们学习AI大模型必然是想找到高薪的工作,下面这些面试题都是总结当前最新、最热、最高频的面试题,并且每道题都有详细的答案,面试前刷完这套面试题资料,小小offer,不在话下
在这里插入图片描述

在这里插入图片描述

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值