UNPKG

rsshub

Version:
67 lines (66 loc) 2.37 kB
import { t as rofetch } from "./ofetch-W1aeTHCo.mjs"; import { t as parseDate } from "./parse-date-CjhZE69i.mjs"; import { t as cache_default } from "./cache-CiDoUSLo.mjs"; import dayjs from "dayjs"; import { load } from "cheerio"; //#region lib/routes/gocomics/index.ts const route = { path: "/:name", categories: ["picture"], example: "/gocomics/foxtrot", parameters: { name: "URL path of the strip on gocomics.com" }, radar: [{ source: ["www.gocomics.com/:name"] }], name: "Comic Strips", maintainers: ["stjohnjohnson"], handler, url: "www.gocomics.com" }; async function handler(ctx) { const baseUrl = "https://www.gocomics.com"; const { name } = ctx.req.param(); const limit = Number(ctx.req.query("limit") ?? 5); const url = `${baseUrl}/${name}`; const $ = load(await rofetch(url)); const ldJson = $("script[type=\"application/ld+json\"]").toArray().map((el) => JSON.parse($(el).text())); const series = ldJson.find((data) => data["@type"] === "ComicSeries"); const strip = ldJson.find((data) => data["@type"] === "ImageObject" && data.contentUrl && data.datePublished); if (!strip) throw new Error(`Comic Not Found - ${name}`); const author = strip.author?.name; const items = [{ title: strip.name, author, category: ["comic"], description: `<img src="${strip.contentUrl}" />`, pubDate: parseDate(strip.datePublished), link: `${baseUrl}/${name}/${dayjs(strip.datePublished).format("YYYY/MM/DD")}` }]; const previousSelector = "[data-testid=\"main-comic-viewer\"] a[class*=\"controls__button_previous\"]"; let previous = $(previousSelector).attr("href"); while (items.length < limit && previous) { const link = `${baseUrl}${previous}`; const page = await cache_default.tryGet(link, async () => { const $ = load(await rofetch(link)); return { item: { title: $("meta[property=\"og:title\"]").attr("content")?.replace(" | GoComics", ""), author, category: ["comic"], description: `<img src="${$("meta[property=\"og:image\"]").attr("content")}" />`, pubDate: parseDate(link.split("/").slice(-3).join("/")), link }, previous: $(previousSelector).attr("href") }; }); items.push(page.item); previous = page.previous; } return { title: `${series?.name ?? name} - GoComics`, description: series?.description, link: url, item: items }; } //#endregion export { route };