UNPKG

rsshub

Version:
204 lines (201 loc) 6.9 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 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 };