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

基于Node.js将天气API数据生成RSS文件的技术问询

用Node.js实现定时生成天气RSS/XML文件的方案

完全可以用Node.js实现你的需求,而且刚好能解决之前PHP方案里JS变量传递的问题——整个流程都在JavaScript环境里完成,不需要跨语言传递数据。以下是具体实现方案:

核心实现思路

  1. 用Node.js直接调用天气API拉取数据
  2. 将获取到的天气数据生成符合规范的RSS/XML内容
  3. 定时(每5秒)将生成的内容写入到网络共享目录,供广播设备读取
  4. 用进程守护工具确保脚本持续运行(防止意外退出)

具体步骤与代码示例

1. 准备依赖

先在你的NAS或树莓派上初始化Node.js项目,安装所需依赖:

# 初始化项目(一路回车即可)
npm init -y

# 安装依赖:
# axios: 用于调用天气API
# rss: 快速生成标准RSS内容
# node-schedule: 更可靠的定时任务(避免setInterval的任务堆积问题)
# pm2: 守护进程,确保脚本一直运行
npm install axios rss node-schedule pm2

2. 编写核心脚本(weather-rss.js)

把你现有的天气API拉取逻辑整合进来,以下是基础模板:

const axios = require('axios');
const RSS = require('rss');
const fs = require('fs');
const schedule = require('node-schedule');

// 配置项
const WEATHER_API_URL = '你的天气API地址'; // 替换成你实际用的API
const RSS_OUTPUT_PATH = '/mnt/weather-share/weather.rss'; // 替换成网络共享的本地挂载路径
const RSS_FEED_CONFIG = {
  title: '实时天气播报',
  description: '供广播设备读取的实时天气数据',
  feed_url: 'http://你的设备IP/weather.rss', // 广播设备不需要的话可忽略
  site_url: 'http://你的设备IP'
};

// 拉取天气数据并生成RSS的核心函数
async function generateWeatherRSS() {
  try {
    // 1. 调用天气API获取数据
    const apiResponse = await axios.get(WEATHER_API_URL);
    const weatherData = apiResponse.data;

    // 2. 处理天气数据(替换成你现有JS里的处理逻辑)
    const weatherContent = `当前温度:${weatherData.temp}℃,天气:${weatherData.description}`;

    // 3. 生成RSS内容
    const feed = new RSS(RSS_FEED_CONFIG);
    feed.item({
      title: `实时天气 ${new Date().toLocaleString()}`,
      description: weatherContent,
      pubDate: new Date()
    });
    const rssXml = feed.xml({ indent: true });

    // 4. 写入到共享目录
    fs.writeFileSync(RSS_OUTPUT_PATH, rssXml, 'utf8');
    console.log(`RSS文件已更新:${new Date().toLocaleString()}`);
  } catch (error) {
    console.error('生成RSS失败:', error.message);
  }
}

// 立即执行一次,避免等待第一次定时任务
generateWeatherRSS();

// 定时任务:每5秒执行一次
schedule.scheduleJob('*/5 * * * * *', generateWeatherRSS);

3. 配置网络共享

如果是NAS的SMB共享,推荐先把共享目录挂载到树莓派/NAS的本地路径,这样写入文件更简单:

# 先创建挂载目录
sudo mkdir /mnt/weather-share

# 挂载SMB共享(替换成你的NAS地址、用户名、密码)
sudo mount -t cifs //192.168.1.100/weather-share /mnt/weather-share -o username=nas-user,password=nas-pass

如果需要开机自动挂载,可以把挂载命令添加到/etc/fstab文件中。

4. 启动并守护脚本

用pm2启动脚本,确保它持续运行:

# 启动脚本并命名
pm2 start weather-rss.js --name weather-rss-generator

# 设置开机自启
pm2 startup
pm2 save

可以用pm2 logs weather-rss-generator查看脚本运行日志,排查问题。

关键注意事项

  • API调用频率:部分天气API有调用次数限制,5秒一次可能超过免费额度,建议先确认API的Rate Limit,必要时调整定时间隔。
  • 错误处理:脚本里的try-catch会捕获API请求、文件写入的错误,避免脚本崩溃;可以额外添加日志文件记录,方便排查问题。
  • RSS格式兼容:如果广播设备有特定的XML格式要求,可以不用rss库,直接手动拼接符合要求的XML字符串,灵活性更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 21:15:22