UNPKG

rsshub

Version:
82 lines (80 loc) 3.52 kB
import "./esm-shims-CzJ_djXG.mjs"; import "./config-C37vj7VH.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 request_in_progress_default } from "./request-in-progress-Bdms9gGw.mjs"; import { t as cache_default } from "./cache-Bo__VnGm.mjs"; import "./helpers-DxBp0Pty.mjs"; import { t as got_default } from "./got-KxxWdaxq.mjs"; import { t as timezone } from "./timezone-D8cuwzTY.mjs"; import { t as wait_default } from "./wait-Dk55sosP.mjs"; import { n as finishArticleItem } from "./wechat-mp-Dq_pp853.mjs"; import { load } from "cheerio"; //#region lib/routes/wechat/data258.ts const parsePage = ($item, hyperlinkSelector, timeSelector) => { const hyperlink = $item.find(hyperlinkSelector); return { title: hyperlink.text(), link: hyperlink.attr("href"), pubDate: timezone(parseDate($item.find(timeSelector).text(), "YYYY-MM-DD HH:mm"), 8) }; }; const route = { path: "/data258/:id?", radar: [{ source: ["mp.data258.com/", "mp.data258.com/article/category/:id"] }], name: "Unknown", maintainers: ["Rongronggg9"], handler, url: "mp.data258.com/" }; async function handler(ctx) { if (await cache_default.get("data258:lock", false) === "1") throw new request_in_progress_default("Another request is in progress, please try again later."); const id = ctx.req.param("id"); const limit = ctx.req.query("limit") ? Number.parseInt(ctx.req.query("limit")) : 5; const rootUrl = "https://mp.data258.com"; const pageUrl = id ? `${rootUrl}/article/category/${id}` : rootUrl; const $ = load((await got_default(pageUrl)).data); const title = $("head title").text(); const description = $("meta[name=\"description\"]").attr("content"); const categoryPage = $("ul.fly-list"); let items = categoryPage && categoryPage.length ? $(categoryPage).find("li").toArray().map((item) => parsePage($(item), "h2 a", ".fly-list-info span")) : $("ul.jie-row li").toArray().map((item) => parsePage($(item), "a.jie-title", ".layui-hide-xs")); items = items.slice(0, limit); if (await cache_default.get("data258:lock", false) === "1") throw new request_in_progress_default("Another request is in progress, please try again later."); else await cache_default.set("data258:lock", "1", 60); let err; for (const item of items) { const cacheId = item.link.match(/id=([\da-f]+)/)[1]; item.link = item.link.startsWith("http") ? item.link : `${rootUrl}${item.link}`; const realLink = await cache_default.tryGet(`data258:${cacheId}`, async () => { try { await wait_default(1e3); const response = await got_default.get(item.link, { headers: { Referer: pageUrl } }); if (response.data.includes("今日浏览次数已达上限")) { err = new got_default.RequestError(response.data, {}, response.request); return null; } const $$1 = load(response.data); return $$1("script").filter((_, e) => $$1(e).html().includes("location.href")).html().match(/location\.href='([^']+)'/)[1]; } catch (error) { err = error; return null; } }); if (realLink) item.link = realLink; else break; } await cache_default.set("data258:lock", "0", 1); items = items.filter((item) => item.link.match(/^https?:\/\/mp\.weixin\.qq\.com\/s/)); if (items.length === 0 && err) throw err; await Promise.all(items.map((item) => finishArticleItem(item, !!categoryPage))); return { title, link: pageUrl, description, item: items }; } //#endregion export { route };