UNPKG

rsshub

Version:
96 lines (94 loc) 3.48 kB
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 };