You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何创建可并行拉取多RSS源的Feed适配器集成流?(关联GitHub Issue #3677)

实现多RSS源并行拉取并定时保存的集成流

核心需求回顾

你需要搭建一个集成流,满足:

  • 从多个RSS源并行拉取数据
  • 每日7点自动触发拉取任务
  • 将拉取到的内容保存到文件中
  • 关联GitHub Issue #3677中关于多适配器并行执行的要求

具体实现步骤(以Python为例)

下面是一套可落地的方案,你可以根据自己的技术栈调整:

1. 依赖准备

首先安装必要的库,处理RSS解析、定时任务和并行执行:

pip install feedparser schedule concurrent.futures python-dotenv

2. 定义RSS源配置

把所有需要拉取的RSS源整理成配置列表,方便管理和扩展:

RSS_FEEDS = [
    {"name": "TechCrunch", "url": "https://techcrunch.com/feed/"},
    {"name": "MIT Technology Review", "url": "https://www.technologyreview.com/feed/"},
    # 这里添加更多你的RSS源
]

3. 实现单个RSS源拉取与保存函数

这个函数负责拉取单个RSS源的内容,并按源名称+日期的格式保存到JSON文件:

import feedparser
import json
from datetime import datetime

def fetch_and_save_rss(feed_config):
    feed_name = feed_config["name"]
    feed_url = feed_config["url"]
    
    try:
        # 拉取并解析RSS内容
        feed = feedparser.parse(feed_url)
        # 整理需要保存的核心数据(可根据需求调整字段)
        items = []
        for entry in feed.entries:
            items.append({
                "title": entry.title,
                "link": entry.link,
                "published": entry.get("published", ""),
                "summary": entry.get("summary", "")
            })
        
        # 生成带日期的文件名,避免覆盖历史数据
        today = datetime.now().strftime("%Y%m%d")
        filename = f"{feed_name}_{today}.json"
        
        # 写入文件,确保中文等特殊字符正常显示
        with open(filename, "w", encoding="utf-8") as f:
            json.dump(items, f, ensure_ascii=False, indent=2)
        
        print(f"✅ 成功拉取并保存 {feed_name} 的内容到 {filename}")
    except Exception as e:
        print(f"❌ 拉取 {feed_name} 失败: {str(e)}")

4. 实现并行拉取逻辑

用线程池来实现多个RSS源的并行拉取,避免串行等待浪费时间:

from concurrent.futures import ThreadPoolExecutor

def parallel_fetch_rss_feeds(feed_list):
    # 根据RSS源数量动态设置线程数,也可以固定值(比如5)
    with ThreadPoolExecutor(max_workers=len(feed_list)) as executor:
        executor.map(fetch_and_save_rss, feed_list)

5. 设置每日定时触发

用schedule库配置每日7点的定时任务,让脚本持续运行等待触发:

import schedule
import time

def scheduled_task():
    print(f"⏰ 开始执行每日RSS拉取任务 ({datetime.now().strftime('%Y-%m-%d %H:%M:%S')})")
    parallel_fetch_rss_feeds(RSS_FEEDS)
    print("🎉 今日RSS拉取任务完成")

# 配置每日7点执行任务
schedule.every().day.at("07:00").do(scheduled_task)

# 保持脚本后台运行
if __name__ == "__main__":
    print("🚀 RSS拉取服务已启动,等待每日7点触发...")
    while True:
        schedule.run_pending()
        time.sleep(60)  # 每分钟检查一次任务状态

关键注意事项

  • 并行执行优化:RSS拉取是IO密集型操作,线程池足够高效;如果是复杂场景,也可以用asyncio实现异步拉取
  • 错误处理扩展:示例中加入了基础异常捕获,你可以根据需求添加重试机制、错误日志持久化等
  • 存储策略调整:如果需要合并所有源内容到单个文件,可修改保存逻辑,将所有条目合并后写入统一文件
  • 结合Issue #3677:如果你的集成流基于特定框架(如Apache Camel、MuleSoft),可参考Issue中关于多适配器并行调度的方案,调整框架内的任务执行策略(比如设置并行路由、配置线程池参数)

内容的提问来源于stack exchange,提问作者pjsagar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.01 02:49:10