Nodejs 第一个项目分享:一个把Hacker News 转为RSS的APP hackernews.io-meter.com

Nodejs 第一个项目分享:一个把Hacker News 转为RSS的APP hackernews.io-meter.com
### Nodejs 第一个项目分享:一个把Hacker News 转为RSS的APP hackernews.io-meter.com

在这个项目中,我将向大家展示如何使用Node.js创建一个简单的应用,该应用可以将Hacker News的新闻转为RSS格式。这个应用的主要功能是抓取Hacker News的最新新闻,并生成一个可供订阅的RSS Feed。

项目结构

hackernews-rss/
├── app.js
├── package.json
├── .env
└── README.md

安装依赖

首先,我们需要安装一些必要的库:

npm init -y
npm install express axios rss
  • express:用于创建HTTP服务器。
  • axios:用于发起HTTP请求。
  • rss:用于生成RSS Feed。

配置环境变量

创建一个.env文件来保存API密钥(如果需要)或任何敏感信息。

# .env
PORT=3000

编写代码

app.js中编写主要逻辑:

require('dotenv').config();
const express = require('express');
const axios = require('axios');
const RSS = require('rss');

const app = express();
const port = process.env.PORT || 3000;

// 获取Hacker News的最新新闻
async function fetchNews() {
    try {
        const response = await axios.get('https://hacker-news.firebaseio.com/v0/newstories.json');
        const newsIds = response.data.slice(0, 10); // 只获取前10条新闻
        const newsItems = [];

        for (let id of newsIds) {
            const newsResponse = await axios.get(`https://hacker-news.firebaseio.com/v0/item/${id}.json`);
            newsItems.push(newsResponse.data);
        }

        return newsItems;
    } catch (error) {
        console.error(error);
    }
}

// 创建RSS Feed
function createFeed(newsItems) {
    const feed = new RSS({
        title: 'Hacker News RSS',
        description: 'Latest Hacker News stories',
        feed_url: 'http://hackernews.io-meter.com/rss',
        site_url: 'http://hackernews.io-meter.com',
    });

    newsItems.forEach(item => {
        if (item.type === "story") {
            feed.item({
                title: item.title,
                description: item.text,
                url: `https://news.ycombinator.com/item?id=${item.id}`,
                date: new Date(item.time * 1000),
            });
        }
    });

    return feed.xml();
}

// 设置路由
app.get('/rss', async (req, res) => {
    const newsItems = await fetchNews();
    const xml = createFeed(newsItems);
    res.set('Content-Type', 'application/rss+xml');
    res.send(xml);
});

// 启动服务器
app.listen(port, () => {
    console.log(`Server running on http://localhost:${port}`);
});

运行项目

node app.js

访问RSS Feed

打开浏览器并访问 http://localhost:3000/rss,你将看到生成的RSS Feed。

总结

这个项目展示了如何使用Node.js和一些简单的库来抓取数据并生成RSS Feed。通过这种方式,你可以轻松地将任何网站的数据转换为RSS格式,从而方便用户订阅。希望这个项目对你有所帮助!


1 回复

Nodejs 第一个项目分享:一个把Hacker News 转为RSS的APP hackernews.io-meter.com

在这个项目中,我将向大家展示如何使用Node.js创建一个简单的应用,该应用可以将Hacker News的新闻转为RSS格式。这个应用的主要功能是抓取Hacker News的最新新闻,并生成一个可供订阅的RSS Feed。

项目结构

hackernews-rss/
├── app.js
├── package.json
├── .env
└── README.md

安装依赖

首先,我们需要安装一些必要的库:

npm init -y
npm install express axios rss
  • express:用于创建HTTP服务器。
  • axios:用于发起HTTP请求。
  • rss:用于生成RSS Feed。

配置环境变量

创建一个.env文件来保存API密钥(如果需要)或任何敏感信息。

# .env
PORT=3000

编写代码

app.js中编写主要逻辑:

require('dotenv').config();
const express = require('express');
const axios = require('axios');
const RSS = require('rss');

const app = express();
const port = process.env.PORT || 3000;

// 获取Hacker News的最新新闻
async function fetchNews() {
    try {
        const response = await axios.get('https://hacker-news.firebaseio.com/v0/newstories.json');
        const newsIds = response.data.slice(0, 10); // 只获取前10条新闻
        const newsItems = [];

        for (let id of newsIds) {
            const newsResponse = await axios.get(`https://hacker-news.firebaseio.com/v0/item/${id}.json`);
            newsItems.push(newsResponse.data);
        }

        return newsItems;
    } catch (error) {
        console.error(error);
    }
}

// 创建RSS Feed
function createFeed(newsItems) {
    const feed = new RSS({
        title: 'Hacker News RSS',
        description: 'Latest Hacker News stories',
        feed_url: 'http://hackernews.io-meter.com/rss',
        site_url: 'http://hackernews.io-meter.com',
    });

    newsItems.forEach(item => {
        if (item.type === "story") {
            feed.item({
                title: item.title,
                description: item.text,
                url: `https://news.ycombinator.com/item?id=${item.id}`,
                date: new Date(item.time * 1000),
            });
        }
    });

    return feed.xml();
}

// 设置路由
app.get('/rss', async (req, res) => {
    const newsItems = await fetchNews();
    const xml = createFeed(newsItems);
    res.set('Content-Type', 'application/rss+xml');
    res.send(xml);
});

// 启动服务器
app.listen(port, () => {
    console.log(`Server running on http://localhost:${port}`);
});

运行项目

node app.js

访问RSS Feed

打开浏览器并访问 http://localhost:3000/rss,你将看到生成的RSS Feed。

总结

这个项目展示了如何使用Node.js和一些简单的库来抓取数据并生成RSS Feed。通过这种方式,你可以轻松地将任何网站的数据转换为RSS格式,从而方便用户订阅。希望这个项目对你有所帮助!

回到顶部