UNPKG

dailyhot-api

Version:
54 lines (53 loc) 1.63 kB
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; } };