rsshub
Version:
Make RSS Great Again!
106 lines (104 loc) • 3.11 kB
JavaScript
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 };