rsshub
Version:
Make RSS Great Again!
454 lines (449 loc) • 13.5 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 { t as parseDate } from "./parse-date-BrP7mxXf.mjs";
import { t as cache_default } from "./cache-Bo__VnGm.mjs";
import { load } from "cheerio";
import iconv from "iconv-lite";
//#region lib/routes/6v123/index.ts
const handler = async (ctx) => {
const { category = "dy" } = ctx.req.param();
const limit = Number.parseInt(ctx.req.query("limit") ?? "25", 10);
const encoding = "gb2312";
const baseUrl = "https://www.hao6v.me";
const targetUrl = new URL(category.startsWith("gvod") ? `${category}.html` : category, baseUrl).href;
const response = await ofetch_default(targetUrl, { responseType: "arrayBuffer" });
const $ = load(iconv.decode(Buffer.from(response), encoding));
const language = $("html").attr("lang") ?? "zh";
let items = [];
items = $("ul.list li").slice(0, limit).toArray().map((el) => {
const $el = $(el);
const title = $el.find("a").text();
const pubDateStr = $el.find("span").text().replaceAll(/(\[|\])/g, "");
const linkUrl = $el.find("a").attr("href");
const guid = `${linkUrl}#${title}`;
const upDatedStr = pubDateStr;
return {
title,
pubDate: pubDateStr ? parseDate(pubDateStr, ["MM-DD", "YYYY-MM-DD"]) : void 0,
link: linkUrl ? new URL(linkUrl, baseUrl).href : void 0,
guid,
id: guid,
updated: upDatedStr ? parseDate(upDatedStr, ["MM-DD", "YYYY-MM-DD"]) : void 0,
language
};
});
items = await Promise.all(items.map((item) => {
if (!item.link) return item;
return cache_default.tryGet(item.link, async () => {
const detailResponse = await ofetch_default(item.link, { responseType: "arrayBuffer" });
const $$ = load(iconv.decode(Buffer.from(detailResponse), encoding));
$$("div#endText div.fl").remove();
$$("div#endText div.fr").remove();
$$("div#endText div.cr").remove();
$$("div#endText div.tps").remove();
$$("div#endText div.downtps").remove();
const title = $$("h1").text();
const description = $$("div#endText").html() ?? void 0;
const pubDateStr = item.link?.match(/\/(\d{4}-\d{2}-\d{2})\/\d+\.html/)?.[1];
const categoryEls = $$("div#endText p a").toArray();
const categories = [...new Set(categoryEls.map((el) => $$(el).text()?.trim()).filter(Boolean))];
const image = $$("div#endText p img").attr("src");
const upDatedStr = pubDateStr;
let processedItem = {
title,
description,
pubDate: pubDateStr ? parseDate(pubDateStr) : item.pubDate,
category: categories,
content: {
html: description,
text: description
},
image,
banner: image,
updated: upDatedStr ? parseDate(upDatedStr) : item.updated,
language
};
const $enclosureEl = $$("td a[href^=\"magnet\"]").last();
const enclosureUrl = $enclosureEl.attr("href");
if (enclosureUrl) {
const enclosureType = "application/x-bittorrent";
const enclosureTitle = $enclosureEl.text();
processedItem = {
...processedItem,
enclosure_url: enclosureUrl,
enclosure_type: enclosureType,
enclosure_title: enclosureTitle || title
};
}
return {
...item,
...processedItem
};
});
}));
return {
title: `${$("title").text().split(/,/).pop()} - ${$("div.t a").last().text()}`,
description: $("meta[name=\"description\"]").attr("content"),
link: targetUrl,
item: items,
allowEmpty: true,
image: new URL("images/logo.gif", baseUrl).href,
language,
id: targetUrl
};
};
const route = {
path: "/:category{.+}?",
name: "分类",
url: "www.hao6v.me",
maintainers: ["nczitzk"],
handler,
example: "/6v123/dy",
parameters: { category: {
description: "分类,默认为 `dy`,即最新电影,可在对应分类页 URL 中找到",
options: [
{
label: "最新电影",
value: "dy"
},
{
label: "国语配音电影",
value: "gydy"
},
{
label: "动漫新番",
value: "zydy"
},
{
label: "经典高清",
value: "gq"
},
{
label: "动画电影",
value: "jddy"
},
{
label: "3D 电影",
value: "3D"
},
{
label: "真人秀",
value: "shoujidianyingmp4"
},
{
label: "国剧",
value: "dlz"
},
{
label: "日韩剧",
value: "rj"
},
{
label: "欧美剧",
value: "mj"
},
{
label: "综艺节目",
value: "zy"
},
{
label: "港台电影",
value: "s/gangtaidianying"
},
{
label: "日韩电影",
value: "s/jingdiandianying"
},
{
label: "喜剧",
value: "s/xiju"
},
{
label: "动作",
value: "s/dongzuo"
},
{
label: "爱情",
value: "s/aiqing"
},
{
label: "科幻",
value: "s/kehuan"
},
{
label: "奇幻",
value: "s/qihuan"
},
{
label: "神秘",
value: "s/shenmi"
},
{
label: "幻想",
value: "s/huanxiang"
},
{
label: "恐怖",
value: "s/kongbu"
},
{
label: "战争",
value: "s/zhanzheng"
},
{
label: "冒险",
value: "s/maoxian"
},
{
label: "惊悚",
value: "s/jingsong"
},
{
label: "剧情",
value: "s/juqingpian"
},
{
label: "传记",
value: "s/zhuanji"
},
{
label: "历史",
value: "s/lishi"
},
{
label: "纪录",
value: "s/jilu"
},
{
label: "印度电影",
value: "s/yindudianying"
},
{
label: "国产电影",
value: "s/guochandianying"
},
{
label: "欧洲电影",
value: "s/xijudianying"
}
]
} },
description: `::: tip
订阅 [最新电影](https://www.hao6v.me/dy/),其源网址为 \`https://www.hao6v.me/dy/\`,请参考该 URL 指定部分构成参数,此时路由为 [\`/6v123/dy\`](https://rsshub.app/6v123/dy)。
:::
<details>
<summary>更多分类</summary>
| 分类 | ID |
| ---------------------------------------------------- | ----------------------------------------------------------------- |
| [最新电影](https://www.hao6v.me/dy/) | [dy](https://rsshub.app/6v123/dy) |
| [国语配音电影](https://www.hao6v.me/gydy/) | [gydy](https://rsshub.app/6v123/gydy) |
| [动漫新番](https://www.hao6v.me/zydy/) | [zydy](https://rsshub.app/6v123/zydy) |
| [经典高清](https://www.hao6v.me/gq/) | [gq](https://rsshub.app/6v123/gq) |
| [动画电影](https://www.hao6v.me/jddy/) | [jddy](https://rsshub.app/6v123/jddy) |
| [3D 电影](https://www.hao6v.me/3D/) | [3D](https://rsshub.app/6v123/3D) |
| [真人秀](https://www.hao6v.me/shoujidianyingmp4/) | [shoujidianyingmp4](https://rsshub.app/6v123/shoujidianyingmp4) |
| [国剧](https://www.hao6v.me/dlz/) | [dlz](https://rsshub.app/6v123/dlz) |
| [日韩剧](https://www.hao6v.me/rj/) | [rj](https://rsshub.app/6v123/rj) |
| [欧美剧](https://www.hao6v.me/mj/) | [mj](https://rsshub.app/6v123/mj) |
| [综艺节目](https://www.hao6v.me/zy/) | [zy](https://rsshub.app/6v123/zy) |
| [港台电影](https://www.hao6v.me/s/gangtaidianying/) | [s/gangtaidianying](https://rsshub.app/6v123/s/gangtaidianying) |
| [日韩电影](https://www.hao6v.me/s/jingdiandianying/) | [s/jingdiandianying](https://rsshub.app/6v123/s/jingdiandianying) |
| [喜剧](https://www.hao6v.me/s/xiju/) | [s/xiju](https://rsshub.app/6v123/s/xiju) |
| [动作](https://www.hao6v.me/s/dongzuo/) | [s/dongzuo](https://rsshub.app/6v123/s/dongzuo) |
| [爱情](https://www.hao6v.me/s/aiqing/) | [s/aiqing](https://rsshub.app/6v123/s/aiqing) |
| [科幻](https://www.hao6v.me/s/kehuan/) | [s/kehuan](https://rsshub.app/6v123/s/kehuan) |
| [奇幻](https://www.hao6v.me/s/qihuan/) | [s/qihuan](https://rsshub.app/6v123/s/qihuan) |
| [神秘](https://www.hao6v.me/s/shenmi/) | [s/shenmi](https://rsshub.app/6v123/s/shenmi) |
| [幻想](https://www.hao6v.me/s/huanxiang/) | [s/huanxiang](https://rsshub.app/6v123/s/huanxiang) |
| [恐怖](https://www.hao6v.me/s/kongbu/) | [s/kongbu](https://rsshub.app/6v123/s/kongbu) |
| [战争](https://www.hao6v.me/s/zhanzheng/) | [s/zhanzheng](https://rsshub.app/6v123/s/zhanzheng) |
| [冒险](https://www.hao6v.me/s/maoxian/) | [s/maoxian](https://rsshub.app/6v123/s/maoxian) |
| [惊悚](https://www.hao6v.me/s/jingsong/) | [s/jingsong](https://rsshub.app/6v123/s/jingsong) |
| [剧情](https://www.hao6v.me/s/juqingpian/) | [s/juqingpian](https://rsshub.app/6v123/s/juqingpian) |
| [传记](https://www.hao6v.me/s/zhuanji/) | [s/zhuanji](https://rsshub.app/6v123/s/zhuanji) |
| [历史](https://www.hao6v.me/s/lishi/) | [s/lishi](https://rsshub.app/6v123/s/lishi) |
| [纪录](https://www.hao6v.me/s/jilu/) | [s/jilu](https://rsshub.app/6v123/s/jilu) |
| [印度电影](https://www.hao6v.me/s/yindudianying/) | [s/yindudianying](https://rsshub.app/6v123/s/yindudianying) |
| [国产电影](https://www.hao6v.me/s/guochandianying/) | [s/guochandianying](https://rsshub.app/6v123/s/guochandianying) |
| [欧洲电影](https://www.hao6v.me/s/xijudianying/) | [s/xijudianying](https://rsshub.app/6v123/s/xijudianying) |
</details>
`,
categories: ["multimedia"],
features: {
requireConfig: false,
requirePuppeteer: false,
antiCrawler: false,
supportRadar: true,
supportBT: true,
supportPodcast: false,
supportScihub: false
},
radar: [
{
source: ["www.hao6v.me/:category"],
target: "/:category"
},
{
title: "最新电影",
source: ["www.hao6v.me/dy/"],
target: "/dy"
},
{
title: "国语配音电影",
source: ["www.hao6v.me/gydy/"],
target: "/gydy"
},
{
title: "动漫新番",
source: ["www.hao6v.me/zydy/"],
target: "/zydy"
},
{
title: "经典高清",
source: ["www.hao6v.me/gq/"],
target: "/gq"
},
{
title: "动画电影",
source: ["www.hao6v.me/jddy/"],
target: "/jddy"
},
{
title: "3D电影",
source: ["www.hao6v.me/3D/"],
target: "/3D"
},
{
title: "真人秀",
source: ["www.hao6v.me/shoujidianyingmp4/"],
target: "/shoujidianyingmp4"
},
{
title: "国剧",
source: ["www.hao6v.me/dlz/"],
target: "/dlz"
},
{
title: "日韩剧",
source: ["www.hao6v.me/rj/"],
target: "/rj"
},
{
title: "欧美剧",
source: ["www.hao6v.me/mj/"],
target: "/mj"
},
{
title: "综艺节目",
source: ["www.hao6v.me/zy/"],
target: "/zy"
},
{
title: "港台电影",
source: ["www.hao6v.me/s/gangtaidianying/"],
target: "/s/gangtaidianying"
},
{
title: "日韩电影",
source: ["www.hao6v.me/s/jingdiandianying/"],
target: "/s/jingdiandianying"
},
{
title: "喜剧",
source: ["www.hao6v.me/s/xiju/"],
target: "/s/xiju"
},
{
title: "动作",
source: ["www.hao6v.me/s/dongzuo/"],
target: "/s/dongzuo"
},
{
title: "爱情",
source: ["www.hao6v.me/s/aiqing/"],
target: "/s/aiqing"
},
{
title: "科幻",
source: ["www.hao6v.me/s/kehuan/"],
target: "/s/kehuan"
},
{
title: "奇幻",
source: ["www.hao6v.me/s/qihuan/"],
target: "/s/qihuan"
},
{
title: "神秘",
source: ["www.hao6v.me/s/shenmi/"],
target: "/s/shenmi"
},
{
title: "幻想",
source: ["www.hao6v.me/s/huanxiang/"],
target: "/s/huanxiang"
},
{
title: "恐怖",
source: ["www.hao6v.me/s/kongbu/"],
target: "/s/kongbu"
},
{
title: "战争",
source: ["www.hao6v.me/s/zhanzheng/"],
target: "/s/zhanzheng"
},
{
title: "冒险",
source: ["www.hao6v.me/s/maoxian/"],
target: "/s/maoxian"
},
{
title: "惊悚",
source: ["www.hao6v.me/s/jingsong/"],
target: "/s/jingsong"
},
{
title: "剧情",
source: ["www.hao6v.me/s/juqingpian/"],
target: "/s/juqingpian"
},
{
title: "传记",
source: ["www.hao6v.me/s/zhuanji/"],
target: "/s/zhuanji"
},
{
title: "历史",
source: ["www.hao6v.me/s/lishi/"],
target: "/s/lishi"
},
{
title: "纪录",
source: ["www.hao6v.me/s/jilu/"],
target: "/s/jilu"
},
{
title: "印度电影",
source: ["www.hao6v.me/s/yindudianying/"],
target: "/s/yindudianying"
},
{
title: "国产电影",
source: ["www.hao6v.me/s/guochandianying/"],
target: "/s/guochandianying"
},
{
title: "欧洲电影",
source: ["www.hao6v.me/s/xijudianying/"],
target: "/s/xijudianying"
}
],
view: ViewType.Articles
};
//#endregion
export { handler, route };