UNPKG

rsshub

Version:
101 lines (99 loc) 3.41 kB
import { n as init_esm_shims, t as __dirname } from "./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 "./ofetch-BIyrKU3Y.mjs"; import { t as parseDate } from "./parse-date-BrP7mxXf.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/jimmyspa/books.ts init_esm_shims(); const route = { path: "/books/:language", categories: ["design"], view: ViewType.Articles, example: "/jimmyspa/books/tw", parameters: { language: { description: "语言", options: [ { value: "tw", label: "臺灣正體" }, { value: "en", label: "English" }, { value: "jp", label: "日本語" } ] } }, radar: [{ source: ["www.jimmyspa.com/:language/Books"] }], name: "Books", description: ` | language | Description | | --- | --- | | tw | 臺灣正體 | | en | English | | jp | 日本語 | `, maintainers: ["Cedaric"], handler }; async function handler(ctx) { const language = ctx.req.param("language"); const baseUrl = "https://www.jimmyspa.com"; const booksListUrl = new URL(`/${language}/Books/Ajax/changeList?year=&keyword=&categoryId=0&page=1`, baseUrl).href; const bookItems = load((await got_default(booksListUrl)).data.view)("ul#appendWork li.work_block").toArray().map(async (bookElement) => { const bookContent = load(bookElement); const bookTitle = bookContent("p.tit").text(); const bookImageRelative = bookContent("div.work_img img").prop("src") || ""; const bookImageUrl = bookImageRelative ? baseUrl + bookImageRelative : ""; const bookDetailUrl = bookContent("li.work_block").prop("data-route"); const { renderedDescription, publishDate } = await cache_default.tryGet(bookDetailUrl, async () => { const detailPage = load((await got_default(bookDetailUrl)).data); const bookDescription = detailPage("article.intro_cont").html() || ""; const bookInfoWrap = detailPage("div.info_wrap").html() || ""; const processedDescription = bookDescription.replaceAll(/<img\b[^>]*>/g, (imgTag) => imgTag.replaceAll(/\b(src|data-src)="(?!http|https|\/\/)([^"]*)"/g, (_, attrName, relativePath) => { return `${attrName}="${new URL(relativePath, baseUrl).href}"`; })); const publishDateMatch = bookInfoWrap.match(/<span>(首次出版|First Published|初版)<\/span>\s*<span class="num">([^<]+)<\/span>/); const publishDate$1 = publishDateMatch ? parseDate(publishDateMatch[2] + "-02") : ""; return { renderedDescription: art(path.join(__dirname, "templates/description-16be3a2a.art"), { images: bookImageUrl ? [{ src: bookImageUrl, alt: bookTitle }] : void 0, description: processedDescription }), publishDate: publishDate$1 }; }); return { title: bookTitle, link: bookDetailUrl, description: renderedDescription, pubDate: publishDate, content: { html: renderedDescription, text: bookTitle } }; }); return { title: `幾米 - 幾米創作(${language})`, link: `${baseUrl}/${language}/Books`, allowEmpty: true, item: await Promise.all(bookItems) }; } //#endregion export { route };