dailyhot-api
Version:
An Api on Today's Hot list
54 lines (53 loc) • 1.63 kB
JavaScript
import RSSParser from "rss-parser";
import logger from "./logger.js";
/**
* 提取 RSS 内容
* @param content HTML 内容
* @returns RSS 内容
*/
export const extractRss = (content) => {
// 匹配 <rss> 标签及内容
const rssRegex = /(<rss[\s\S]*?<\/rss>)/i;
const matches = content.match(rssRegex);
return matches ? matches[0] : null;
};
/**
* 解析 RSS 内容
* @param rssContent RSS 内容
* @returns 解析后的 RSS 内容
*/
export const parseRSS = async (rssContent) => {
const parser = new RSSParser();
// 是否为网址
const isUrl = (url) => {
try {
new URL(url);
return true;
// eslint-disable-next-line @typescript-eslint/no-unused-vars
}
catch (error) {
return false;
}
};
try {
const feed = isUrl(rssContent)
? await parser.parseURL(rssContent)
: await parser.parseString(rssContent);
const items = feed.items.map((item) => ({
title: item.title, // 文章标题
link: item.link, // 文章链接
pubDate: item.pubDate, // 发布日期
author: item.creator ?? item.author, // 作者
content: item.content, // 内容
contentSnippet: item.contentSnippet, // 内容摘要
guid: item.guid, // 全局唯一标识符
categories: item.categories, // 分类
}));
// 返回解析数据
return items;
}
catch (error) {
logger.error("❌ [RSS] An error occurred while parsing RSS content");
throw error;
}
};