rsshub
Version:
Make RSS Great Again!
103 lines (102 loc) • 3.61 kB
JavaScript
import { t as parseDate } from "./parse-date-Cr0wQjV_.mjs";
import { r as getSubPath } from "./common-utils-DtQojudb.mjs";
import { t as got_default } from "./got-BTowW50G.mjs";
import { Fragment, jsx, jsxs } from "hono/jsx/jsx-runtime";
import { load } from "cheerio";
import { renderToString } from "hono/jsx/dom/server";
//#region lib/routes/xyzrank/index.tsx
const route = {
path: "/",
categories: ["multimedia"],
example: "/xyzrank",
radar: [{
source: ["xyzrank.com/"],
target: "/"
}],
name: "热门节目",
maintainers: ["nczitzk"],
handler,
url: "xyzrank.com/"
};
async function handler(ctx) {
const category = getSubPath(ctx).slice(1);
const rootUrl = "https://xyzrank.com";
const currentUrl = `${rootUrl}/#/${category}`;
let response = await got_default({
method: "get",
url: rootUrl
});
const $ = load(response.data);
const categories = {
"": {
url: `${rootUrl}/api/episodes`,
title: "热门节目",
type: "episodes"
},
"hot-podcasts": {
url: `${rootUrl}/api/podcasts`,
title: "热门播客",
type: "podcasts"
},
"hot-episodes-new": {
url: `${rootUrl}/api/new-episodes`,
title: "新锐节目",
type: "episodes"
},
"new-podcasts": {
url: `${rootUrl}/api/new-podcasts`,
title: "新锐播客",
type: "podcasts"
}
};
response = await got_default({
method: "get",
url: categories[category].url
});
const type = categories[category].type;
const items = response.data.items.slice(0, ctx.req.query("limit") ? Number.parseInt(ctx.req.query("limit")) : 250).map((item, index) => ({
title: `#${index + 1} ${item.title ?? item.name}`,
category: [item.primaryGenreName],
author: item.authorsText,
link: `${item.link ?? item.links[0].url}${item.trackCount ? `#${item.trackCount}` : ""}`,
pubDate: parseDate(item.postTime ?? item.lastReleaseDate),
description: renderToString(/* @__PURE__ */ jsxs(Fragment, { children: [item.logoURL ? /* @__PURE__ */ jsx("img", { src: item.logoURL }) : null, /* @__PURE__ */ jsx("table", { children: Object.entries(type === "podcasts" ? {
"#": index + 1,
播客电台: item.name,
主持: item.authorsText,
分类: item.primaryGenreName,
更新频率: `${(item.avgUpdateFreq / 24).toFixed(1)}天`,
最近更新: `${item.lastReleaseDateDayCount.toFixed(1)}天前`,
总集数: item.trackCount,
平均时长: `${item.avgDuration}′`,
平均播放量: item.avgPlayCount,
平均评论量: item.avgCommentCount,
千播互动量: (item.avgInteractIndicator * 1e3).toFixed(0),
平均打开率: `${(item.avgOpenRate * 100).toFixed(1)}%`,
小宇宙: item.links[0].url,
"Apple Podcasts": item.links[1].url,
官方网站: item.links[2].url,
"RSS 订阅": item.links[3].url
} : {
"#": index + 1,
节目标题: item.title,
播客电台: item.podcastName,
播放量: item.playCount,
评论量: item.commentCount,
互动率: `${(item.commentCount / item.playCount * 100).toFixed(1)}%`,
打开率: `${(item.openRate * 100).toFixed(1)}%`,
时长: `${item.duration}′`,
发布时间: item.postTime,
分类: item.primaryGenreName,
链接: item.link
}).map(([label, value]) => value ? /* @__PURE__ */ jsxs("tr", { children: [/* @__PURE__ */ jsx("td", { children: /* @__PURE__ */ jsx("b", { children: label }) }), /* @__PURE__ */ jsx("td", { children: value })] }) : null) })] }))
}));
return {
title: `${$("title").text()} - ${categories[category].title}`,
link: currentUrl,
item: items,
description: $("meta[property=\"og:description\"]").attr("content")
};
}
//#endregion
export { route as n, handler as t };