UNPKG

rsshub

Version:
79 lines (78 loc) 3.04 kB
import { t as parseDate } from "./parse-date-Cr0wQjV_.mjs"; import { t as cache_default } from "./cache-BkqOokyU.mjs"; import { t as got_default } from "./got-BTowW50G.mjs"; import { t as InvalidParameterError } from "./invalid-parameter-CGxhjomn.mjs"; import { Fragment, jsx, jsxs } from "hono/jsx/jsx-runtime"; import { load } from "cheerio"; import { renderToString } from "hono/jsx/dom/server"; import { raw } from "hono/html"; //#region lib/routes/wnacg/common.tsx const categories = { 1: "同人誌 漢化", 2: "同人誌 CG畫集", 3: "同人誌 Cosplay", 5: "同人誌", 6: "單行本", 7: "雜誌&短篇", 9: "單行本 漢化", 10: "雜誌&短篇 漢化", 12: "同人誌 日語", 13: "單行本 日語", 14: "雜誌&短篇 日語", 16: "同人誌 English", 17: "單行本 English", 18: "雜誌&短篇 English", 19: "韓漫", 20: "韓漫 漢化", 21: "韓漫 生肉", 22: "同人誌 3D漫畫" }; const baseUrl = "https://www.wnacg.com"; async function handler(ctx) { const { cid, tag } = ctx.req.param(); if (cid && !Object.keys(categories).includes(cid)) throw new InvalidParameterError("此分类不存在"); const url = `${baseUrl}/albums${cid ? `-index-cate-${cid}` : ""}${tag ? `-index-tag-${tag}` : ""}.html`; const { data } = await got_default(url); const $ = load(data); const list = $(".gallary_item").toArray().map((item) => { const $item = $(item); const href = $item.find("a").attr("href"); const aid = href.match(/^\/photos-index-aid-(\d+)\.html$/)[1]; return { title: $item.find("a").attr("title"), link: `${baseUrl}${href}`, pubDate: parseDate($item.find(".info_col").text().replace(/\d+張照片,\n創建於/, ""), "YYYY-MM-DD"), aid }; }); const items = await Promise.all(list.map((item) => cache_default.tryGet(item.link, async () => { const { data: descRes } = await got_default(item.link, { headers: { referer: encodeURI(url) } }); let $ = load(descRes); const author = $(".uwuinfo p").first().text(); const category = $(".tagshow").toArray().map((item) => $(item).text()); $(".addtags").remove(); const description = $(".uwconn").html(); const { data } = await got_default(`${baseUrl}/photos-gallery-aid-${item.aid}.html`, { headers: { referer: `${baseUrl}/photos-slide-aid-${item.aid}.html` } }); $ = load(data); const imgListMatch = $("script").text().match(/var imglist = (\[.*\]);"\);/)[1]; const imgList = JSON.parse(imgListMatch.replaceAll("url:", "\"url\":").replaceAll("caption:", "\"caption\":").replaceAll("fast_img_host+\\", "").replaceAll("\\", "")); item.author = author; item.category = category; item.description = renderToString(/* @__PURE__ */ jsxs(Fragment, { children: [ description ? raw(description) : null, /* @__PURE__ */ jsx("br", {}), imgList ? imgList.map((img) => /* @__PURE__ */ jsx("img", { src: `https:${img.url}`, alt: img.caption })) : null ] })); return item; }))); return { title: $("head title").text(), link: url, item: items }; } //#endregion export { handler as t };