rsshub
Version:
Make RSS Great Again!
204 lines (201 loc) • 6.9 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 cache_default } from "./cache-Bo__VnGm.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/oreno3d/get-sec-page-data.ts
init_esm_shims();
const rootUrl$1 = "https://oreno3d.com";
async function sync_detail(link) {
const sec_page_selector = "article.g-main-video-article";
const raw_pic_selector = "header > figure.video-figure > a ";
const video_name_selector = "header > h1.video-h1 ";
const author_selector = "section:nth-child(4) > a > div.video-center";
const origins_selector = "section:nth-child(5) > a > div.video-center";
const characters_selector = "section:nth-child(6) > a > div.video-center";
const tags_selector = "section:nth-child(7) > ul > li > a div.tag-text";
const desc_selector = "section blockquote.video-information-comment";
const iwara_link_selector = "header > figure.video-figure > a";
const $ = load((await got_default(link)).data);
const tags = [];
const authors = [];
const origins = [];
const characters = [];
const raw_pic_link = rootUrl$1 + $(raw_pic_selector).find("img").attr("src");
const video_name = $(video_name_selector).text();
$(sec_page_selector).find(author_selector).each(function(i) {
authors[i] = $(this).text();
authors[i].replace(" ", "");
authors[i].trim();
});
$(sec_page_selector).find(origins_selector).each(function(i) {
origins[i] = $(this).text();
origins[i].replace(" ", "");
origins[i].trim();
});
$(sec_page_selector).find(characters_selector).each(function(i) {
characters[i] = $(this).text();
characters[i].replace(" ", "");
characters[i].trim();
});
$(sec_page_selector).find(tags_selector).each(function(i) {
tags[i] = $(this).text();
tags[i].replace(" ", "");
tags[i].trim();
});
const desc = $(sec_page_selector).find(desc_selector).text();
const iwara_link = $(iwara_link_selector).attr("href");
return {
raw_pic_link,
video_name,
authors: authors.join(" "),
origins: origins.join(" "),
characters: characters.join(" "),
tags: tags.join(" "),
desc,
iwara_link,
oreno3d_link: link
};
}
var get_sec_page_data_default = sync_detail;
//#endregion
//#region lib/routes/oreno3d/main.ts
const rootUrl = "https://oreno3d.com";
const sortRename = {
favorites: "高評価",
hot: "急上昇",
latest: "新着",
popularity: "人気"
};
function get_user_url(rootUrl$2, ctx, sort) {
let userUrl = "";
if (ctx.req.param("keyword")) userUrl = `${rootUrl$2}/search?sort=${sort}&keyword=${ctx.req.param("keyword")}`;
else if (ctx.req.param("characterid")) userUrl = `${rootUrl$2}/characters/${ctx.req.param("characterid")}?sort=${sort}`;
else if (ctx.req.param("authorid")) userUrl = `${rootUrl$2}/authors/${ctx.req.param("authorid")}?sort=${sort}`;
else if (ctx.req.param("tagid")) userUrl = `${rootUrl$2}/tags/${ctx.req.param("tagid")}?sort=${sort}`;
else if (ctx.req.param("originid")) userUrl = `${rootUrl$2}/origins/${ctx.req.param("originid")}?sort=${sort}`;
return userUrl;
}
const route = {
path: [
"/authors/:authorid/:sort/:pagelimit?",
"/characters/:characterid/:sort/:pagelimit?",
"/origins/:originid/:sort/:pagelimit?",
"/search/:keyword/:sort/:pagelimit?",
"/tags/:tagid/:sort/:pagelimit?"
],
categories: ["anime"],
example: "/oreno3d/authors/3189/latest/1",
parameters: {
authorid: "Author id, can be found in URL",
sort: "Sort method, see the table above",
pagelimit: "The maximum number of pages to be crawled, the default is 1"
},
features: {
requireConfig: false,
requirePuppeteer: false,
antiCrawler: false,
supportBT: false,
supportPodcast: false,
supportScihub: false,
nsfw: true
},
name: "Author Search",
maintainers: ["xueli_sherryli"],
handler,
description: `| favorites | hot | latest | popularity |
| --------- | --- | ------ | ---------- |
| favorites | hot | latest | popularity |`
};
async function handler(ctx) {
function getLinksTitle(response$1) {
const selector = "a.box";
const $$1 = load(response$1.data);
return {
title: $$1("div.g-main-list").find("h1.main-h").text(),
list: $$1(selector)
};
}
async function getData(response$1) {
const $$1 = load(response$1.data);
const title = getLinksTitle(response$1).title;
const list = getLinksTitle(response$1).list;
return {
items: await Promise.all(list.toArray().map(async (item) => {
const sec_data = await get_sec_page_data_default($$1(item).attr("href"));
const raw_pic_link = sec_data.raw_pic_link;
const video_name = sec_data.video_name;
const authors = sec_data.authors;
const origins = sec_data.origins;
const characters = sec_data.characters;
const tags = sec_data.tags;
const desc = sec_data.desc;
const iwara_link = sec_data.iwara_link;
const oreno3d_link = sec_data.oreno3d_link;
const description = art(path.join(__dirname, "templates/description-cefeafec.art"), {
raw_pic_link,
video_name,
authors,
origins,
characters,
tags,
desc,
iwara_link,
oreno3d_link
});
const title$1 = `${video_name} - ${authors}`;
return await cache_default.tryGet(oreno3d_link, () => {
return {
title: title$1,
author: authors,
link: oreno3d_link,
category: tags.split(" "),
description
};
});
})),
title
};
}
const sort = ctx.req.param("sort");
let pagelimit = ctx.req.param("pagelimit") ?? 1;
const userUrl = get_user_url(rootUrl, ctx, sort);
const response = await got_default(userUrl);
const $ = load(response.data);
const maxPageSelector = "div.container > main > div.g-main-list > ul.pagination > li:last-child > a";
if ($(maxPageSelector)) {
const actualNum = new URLSearchParams($(maxPageSelector).attr("href")).get("page");
if (Number.parseInt(pagelimit) >= Number.parseInt(actualNum)) pagelimit = actualNum;
} else pagelimit = 1;
const responseList = [response];
const Links = [];
for (let i = 1; i < pagelimit; i++) Links.push(`${userUrl}&page=${i + 1}`);
await Promise.all(Links.map(async (link) => {
const response$1 = await got_default(link);
responseList.push(response$1);
}));
const tempData = [];
await Promise.all(responseList.map(async (response$1) => {
const result = await getData(response$1);
tempData.push(result);
}));
let realItem = [];
for (const data$1 of tempData) realItem = [...realItem, ...data$1.items];
const data = {
title: tempData[0].title,
item: realItem
};
return {
title: `${data.title} - ${sortRename[sort]}(Page 1-${pagelimit})`,
link: userUrl,
item: data.item
};
}
//#endregion
export { route };