rsshub
Version:
Make RSS Great Again!
89 lines (86 loc) • 2.6 kB
JavaScript
import "./esm-shims-CzJ_djXG.mjs";
import "./config-C37vj7VH.mjs";
import "./dist-BInvbO1W.mjs";
import "./logger-Czu8UMNd.mjs";
import "./ofetch-BIyrKU3Y.mjs";
import { t as cache_default } from "./cache-Bo__VnGm.mjs";
import "./helpers-DxBp0Pty.mjs";
import { t as got_default } from "./got-KxxWdaxq.mjs";
import { t as rss_parser_default } from "./rss-parser-Dtop7M8f.mjs";
import { load } from "cheerio";
//#region lib/routes/9to5/utils.ts
const ProcessFeed = (data) => {
const $ = load(data);
const content = $("div.post-content");
const cover = $("meta[property=\"og:image\"]");
if (cover.length > 0) $(`<img src=${cover[0].attribs.content}>`).insertBefore(content[0].firstChild);
content.find("hr").nextAll().remove();
content.find("hr, ins.adsbygoogle, script").each((i, e) => {
$(e).remove();
});
content.find("div.ad-disclaimer-container").remove();
content.find("div").each((i, e) => {
if ($(e)[0].attribs.class) {
const classes = $(e)[0].attribs.class;
if (/\w{10}\s\w{10}/g.test(classes)) $(e).remove();
}
});
return content.html();
};
var utils_default = { ProcessFeed };
//#endregion
//#region lib/routes/9to5/subsite.ts
const route = {
path: "/:subsite/:tag?",
name: "Unknown",
maintainers: [],
handler
};
async function handler(ctx) {
let title = "9To5", link, description;
switch (ctx.req.param("subsite")) {
case "mac":
link = "https://9to5mac.com";
title += "Mac";
description = "Apple News & Mac Rumors Breaking All Day";
break;
case "google":
link = "https://9to5google.com";
title += "Google";
description = "Google, Pixel news, Android, Home, Chrome OS, apps, more";
break;
case "toys":
link = "https://9to5toys.com";
title += "Toys";
description = "New Gear, reviews and deals";
break;
default: break;
}
if (ctx.req.param("tag")) {
link = `${link}/guides/${ctx.req.param("tag")}/feed/`;
title = `${ctx.req.param("tag")} | ${title}`;
} else link = `${link}/feed/`;
const feed = await rss_parser_default.parseURL(link);
const items = await Promise.all(feed.items.splice(0, ctx.req.query("limit") ? Number.parseInt(ctx.req.query("limit")) : 10).map((item) => cache_default.tryGet(item.link, async () => {
const response = await got_default({
method: "get",
url: item.link
});
const description$1 = utils_default.ProcessFeed(response.data);
return {
title: item.title,
description: description$1,
pubDate: item.pubDate,
link: item.link,
author: item["dc:creator"]
};
})));
return {
title,
link,
description,
item: items
};
}
//#endregion
export { route };