UNPKG

rsshub

Version:
106 lines (104 loc) 3.11 kB
import "./esm-shims-CzJ_djXG.mjs"; import "./config-C37vj7VH.mjs"; import { t as ViewType } from "./types-D84BRIt4.mjs"; import "./dist-BInvbO1W.mjs"; import "./logger-Czu8UMNd.mjs"; import { t as ofetch_default } from "./ofetch-BIyrKU3Y.mjs"; import { load } from "cheerio"; //#region lib/routes/musify/index.ts const handler = async (ctx) => { const { language = "" } = ctx.req.param(); const limit = Number.parseInt(ctx.req.query("limit") ?? "30", 10); const baseUrl = "https://musify.club"; const targetUrl = new URL(language, baseUrl).href; const $ = load(await ofetch_default(targetUrl)); const items = $("div.playlist__item").slice(0, limit).toArray().map((el) => { const $el = $(el); const title = [$el.attr("data-artist"), $el.attr("data-name")].filter(Boolean).join(" - "); const linkUrl = $el.find("a.strong").attr("href"); const authors = $el.find("div.playlist__heading a").toArray().map((authorEl) => { const $authorEl = $(authorEl); return { name: $authorEl.text(), url: $authorEl.attr("href") ? new URL($authorEl.attr("href"), baseUrl).href : void 0, avatar: void 0 }; }); let processedItem = { title, link: linkUrl ? new URL(linkUrl, baseUrl).href : void 0, author: authors }; const enclosureUrl = $el.find("div.playlist__control").attr("data-play-url"); if (enclosureUrl) processedItem = { ...processedItem, enclosure_url: new URL(enclosureUrl, baseUrl).href, enclosure_type: `audio/${enclosureUrl.split(/\./).pop()}`, enclosure_title: title, enclosure_length: void 0, itunes_duration: void 0, itunes_item_image: void 0 }; return processedItem; }); return { title: $("title").text(), description: $("meta[property=\"og:description\"]").attr("content"), link: targetUrl, item: items, allowEmpty: true, image: $("meta[property=\"og:image\"]").attr("content"), author: $("meta[property=\"og:site_name\"]").attr("content"), id: $("meta[property=\"og:url\"]").attr("content") }; }; const route = { path: "/:language?", name: "Latest", url: "musify.club", maintainers: ["nczitzk"], handler, example: "/musify/en", parameters: { category: { description: "Language, Russian by default", options: [{ label: "Russian", value: "" }, { label: "English", value: "en" }] } }, description: `::: tip To subscribe to [Latest](https://musify.club/en), where the source URL is \`https://musify.club/en\`, extract the certain parts from this URL to be used as parameters, resulting in the route as [\`/musify/en\`](https://rsshub.app/musify/en). :::`, categories: ["multimedia"], features: { requireConfig: false, requirePuppeteer: false, antiCrawler: false, supportRadar: true, supportBT: false, supportPodcast: false, supportScihub: false }, radar: [ { source: ["musify.club/:language"], target: "/:language" }, { title: "Latest", source: ["musify.club/en"], target: "/en" }, { title: "​​Последняя", source: ["musify.club"], target: "/" } ], view: ViewType.Articles }; //#endregion export { handler, route };