rsshub
Version:
Make RSS Great Again!
96 lines (94 loc) • 3.48 kB
JavaScript
import { n as init_esm_shims, t as __dirname } from "./esm-shims-CzJ_djXG.mjs";
import "./config-C37vj7VH.mjs";
import "./dist-BInvbO1W.mjs";
import "./logger-Czu8UMNd.mjs";
import "./ofetch-BIyrKU3Y.mjs";
import { t as parseDate } from "./parse-date-BrP7mxXf.mjs";
import { t as md5 } from "./md5-C8GRvctM.mjs";
import "./helpers-DxBp0Pty.mjs";
import { t as art } from "./render-BQo6B4tL.mjs";
import { t as got_default } from "./got-KxxWdaxq.mjs";
import path from "node:path";
import { load } from "cheerio";
//#region lib/routes/gcores/radio.ts
init_esm_shims();
const route = {
path: "/radios/:category?",
categories: ["new-media"],
example: "/gcores/radios/45",
parameters: { category: "分类名,默认为全部,可在分类页面的 URL 中找到,如 Gadio News -- 45" },
features: {
requireConfig: false,
requirePuppeteer: false,
antiCrawler: false,
supportBT: false,
supportPodcast: true,
supportScihub: false
},
radar: [{
source: ["gcores.com/categories/:category"],
target: "/radios/:category"
}],
name: "播客",
maintainers: ["eternasuno"],
handler,
url: "gcores.com/radios"
};
async function handler(ctx) {
const category = ctx.req.param("category") || "all";
const limit = Number.parseInt(ctx.req.query("limit")) || 12;
const link = getLink(category);
const $ = load(await get(link));
const title = $("head>title").text();
const description = $("head>meta[name=\"description\"]").attr("content");
const image = $("head>link[rel=\"apple-touch-icon\"]").attr("href");
const api = getApi(category);
api.searchParams.set("include", "media");
api.searchParams.set("page[limit]", limit.toString());
api.searchParams.set("sort", "-published-at");
api.searchParams.set("filter[list-all]", "0");
api.searchParams.set("filter[is-require-privilege]", "0");
api.searchParams.set("fields[radios]", "title,cover,published-at,duration,content,media");
const { data, included } = await get(api);
const audios = {};
for (const media of included) audios[media.id] = media.attributes.audio;
const item = data.map((radio) => {
const { id, attributes, relationships } = radio;
const link$1 = `https://www.gcores.com/radios/${id}`;
const itunes_item_image = `https://image.gcores.com/${attributes.cover}`;
const media_id = relationships.media.data.id;
const enclosure_url = new URL(audios[media_id], "https://alioss.gcores.com/uploads/audio/").toString();
const description$1 = art(path.join(__dirname, "templates/content-a26ee9e8.art"), { content: JSON.parse(attributes.content) });
return {
title: attributes.title,
author: "机核 GCORES",
description: description$1,
pubDate: parseDate(attributes["published-at"]),
guid: md5(link$1),
link: link$1,
itunes_item_image,
itunes_duration: attributes.duration,
enclosure_url,
enclosure_type: "audio/mpeg"
};
});
return {
title,
link,
description,
language: "zh-cn",
itunes_author: "机核 GCORES",
image: `https://www.gcores.com/${image}`,
item
};
}
const get = async (url) => {
return (await got_default({
method: "get",
url: new URL(url, "https://www.gcores.com")
})).data;
};
const getLink = (category) => category === "all" ? "https://www.gcores.com/radios" : `https://www.gcores.com/categories/${category}`;
const getApi = (category) => category === "all" ? new URL("https://www.gcores.com/gapi/v1/radios") : new URL(`https://www.gcores.com/gapi/v1/categories/${category}/radios`);
//#endregion
export { route };