rsshub
Version:
Make RSS Great Again!
88 lines (86 loc) • 3.08 kB
JavaScript
import "./esm-shims-CzJ_djXG.mjs";
import "./config-C37vj7VH.mjs";
import "./dist-BInvbO1W.mjs";
import "./logger-Czu8UMNd.mjs";
import { t as ofetch_default } from "./ofetch-BIyrKU3Y.mjs";
import { t as parseDate } from "./parse-date-BrP7mxXf.mjs";
import { t as cache_default } from "./cache-Bo__VnGm.mjs";
import { load } from "cheerio";
//#region lib/routes/bfl/announcements.ts
const ROOT_URL = "https://bfl.ai";
/**
* 辅助函数:获取并解析单个公告详情页,提取正文内容,并使用缓存。
*/
const fetchDescription = (item) => cache_default.tryGet(item.link, async () => {
const fullDescription = load(await ofetch_default(item.link, {}))("div.max-w-3xl.mx-auto.px-6").html()?.trim();
return {
...item,
description: fullDescription || item.description
};
});
/**
* 主路由处理函数
*/
async function handler() {
const listPageUrl = `${ROOT_URL}/announcements`;
const $ = load(await ofetch_default(listPageUrl));
const feedTitle = $("head title").text().trim() || "BFL AI Announcements";
const feedDescription = $("head meta[name=\"description\"]").attr("content")?.trim() || "Latest announcements from Black Forest Labs (bfl.ai).";
const preliminaryItems = $("div.flex.flex-col.max-w-3xl.mx-auto.space-y-8 > a[href^=\"/announcements/\"]").toArray().map((anchorElement) => {
const $anchor = $(anchorElement);
const relativeLink = $anchor.attr("href");
const link = relativeLink ? `${ROOT_URL}${relativeLink}` : void 0;
const title = $anchor.find("h2[class*=\"text-xl\"]").text().trim();
const $timeElement = $anchor.find("time");
const datetimeAttr = $timeElement.attr("datetime");
const timeText = $timeElement.text().trim();
const pubDate = datetimeAttr ? parseDate(datetimeAttr) : timeText ? parseDate(timeText) : void 0;
const summaryDescription = $anchor.find("p[class*=\"line-clamp-3\"]").html()?.trim() || "";
const author = "Black Forest Labs";
if (!title || !link) return null;
const preliminaryItem = {
title,
link,
description: summaryDescription,
author
};
if (pubDate) preliminaryItem.pubDate = pubDate.toUTCString();
return preliminaryItem;
}).filter((item) => item !== null && item.link !== void 0);
return {
title: feedTitle,
link: listPageUrl,
description: feedDescription,
item: await Promise.all(preliminaryItems.map((item) => fetchDescription(item))),
language: "en"
};
}
/**
* 定义并导出RSSHub路由对象
*/
const route = {
path: "/announcements",
categories: ["multimedia"],
example: "/bfl/announcements",
parameters: {},
features: {
requireConfig: false,
requirePuppeteer: false,
antiCrawler: false,
supportBT: false,
supportPodcast: false,
supportScihub: false
},
radar: [{
source: ["bfl.ai/announcements"],
target: "/announcements",
title: "Announcements"
}],
name: "Announcements",
maintainers: ["thirteenkai"],
handler,
url: "bfl.ai/announcements",
description: "Fetches the latest announcements from Black Forest Labs (bfl.ai). Provides full article content by default with caching."
};
//#endregion
export { route };