UNPKG

rsshub

Version:
76 lines (75 loc) 3.25 kB
import { n as parseRelativeDate, t as parseDate } from "./parse-date-Cr0wQjV_.mjs"; import { t as cache_default } from "./cache-BkqOokyU.mjs"; import { r as getSubPath } from "./common-utils-DtQojudb.mjs"; import { t as got_default } from "./got-BTowW50G.mjs"; import { t as timezone } from "./timezone-BBvDwS_3.mjs"; import { load } from "cheerio"; //#region lib/routes/toodaylab/index.ts const route = { path: "/posts", categories: ["new-media"], example: "/toodaylab/posts", radar: [{ source: ["toodaylab.com/posts"], target: "/posts" }], name: "滚动", maintainers: ["nczitzk"], handler }; async function handler(ctx) { const path = getSubPath(ctx); const limit = ctx.req.query("limit") ? Number(ctx.req.query("limit")) : 30; const isHot = path === "/hot"; const rootUrl = "https://www.toodaylab.com"; const currentUrl = new URL(isHot ? "/posts" : path, rootUrl).href; const { data: response } = await got_default(currentUrl); const $ = load(response); let items = isHot ? $("div.hot-list a").slice(0, limit).toArray().map((item) => { const $item = $(item); return { title: $item.find("div.hot-item p").text(), link: new URL($item.prop("href"), rootUrl).href }; }) : $("div.single-post").slice(0, limit).toArray().map((item) => { const $item = $(item); const a = $item.find("p.title a"); const pubDate = $item.find("div.left-infos p").text().trim().split(/\/\/\s/).pop(); return { title: a.text(), link: new URL(a.prop("href"), rootUrl).href, description: $item.find("p.excerpt").html(), author: $item.find("div.left-infos p a").text().trim(), pubDate: timezone(/[年日月]/.test(pubDate) ? parseDate(pubDate, ["YYYY年M月D日 HH:mm", "M月D日 HH:mm"]) : parseRelativeDate(pubDate), 8) }; }); items = await Promise.all(items.map((item) => cache_default.tryGet(item.link, async () => { const { data: detailResponse } = await got_default(item.link); const content = load(detailResponse); const pubDate = content("div.left-infos p").text().trim().split(/\/\/\s/).pop(); item.title = content("h1").text() || item.title; item.description = content("div.post-content").html() ?? item.description; item.author = content("div.left-infos p a").text().trim() ?? item.author; item.category = content("div.right-infos a").slice(1).toArray().map((c) => content(c).text().replace(/#/, "")); item.pubDate ??= timezone(/[年日月]/.test(pubDate) ? parseDate(pubDate, ["YYYY年M月D日 HH:mm", "M月D日 HH:mm"]) : parseRelativeDate(pubDate), 8); item.upvotes = content("#like_count").text() ? Number(content("#like_count").text()) : 0; item.comments = Number(content("div.right-infos a").first().text()) || 0; return item; }))); const title = $("title").text().split(/\s-/, 1)[0]; const icon = $("link[rel=\"apple-touch-icon\"]").last().prop("href"); return { item: items, title: isHot ? title.replace(/[^|]+/, "最热 ") : title, link: currentUrl, description: $("meta[name=\"description\"]").prop("content"), language: $("html").prop("lang"), image: $("h3.logo a img").prop("src"), icon, logo: icon, subtitle: $("meta[name=\"keywords\"]").prop("content"), author: $("h3.logo a img").prop("alt") }; } //#endregion export { route as n, handler as t };