UNPKG

rsshub

Version:
67 lines (65 loc) 2.31 kB
import "./esm-shims-CzJ_djXG.mjs"; import { t as config } from "./config-C37vj7VH.mjs"; import "./dist-BInvbO1W.mjs"; import "./logger-Czu8UMNd.mjs"; import { t as ofetch_default } from "./ofetch-BIyrKU3Y.mjs"; import { t as cache_default } from "./cache-Bo__VnGm.mjs"; import { t as config_not_found_default } from "./config-not-found-Dyp3RlZZ.mjs"; import { t as getHeaders } from "./utils-BXkxCuHO.mjs"; import { load } from "cheerio"; //#region lib/routes/smzdm/product.ts const route = { path: "/product/:id", categories: ["shopping"], example: "/smzdm/product/zm5vzpe", parameters: { id: "商品 id,网址上直接可以看到" }, features: { requireConfig: [{ name: "SMZDM_COOKIE", description: "什么值得买登录后的 Cookie 值" }], requirePuppeteer: false, antiCrawler: false, supportBT: false, supportPodcast: false, supportScihub: false }, radar: [{ source: ["wiki.smzdm.com/p/:id"], target: "/product/:id" }], name: "商品", maintainers: ["chesha1"], handler }; async function handler(ctx) { if (!config.smzdm.cookie) throw new config_not_found_default("什么值得买排行榜 is disabled due to the lack of SMZDM_COOKIE"); const link = `https://wiki.smzdm.com/p/${ctx.req.param("id")}`; const $ = load(await ofetch_default(link, { headers: getHeaders() })); const title = $("title").text(); const items = $("ul#feed-main-list li").toArray().map((elem) => { const altText = $(elem).find("img").attr("alt"); const link$1 = $(elem).find("h5.feed-block-title a").attr("href"); const price = $(elem).find(".z-highlight").text(); return { title: altText + " " + price, link: link$1, description: $(elem).find(".feed-block-descripe").text().replaceAll(/\s+/g, "") }; }); return { title, link, item: (await Promise.all(items.map((item) => cache_default.tryGet(item.link, async () => { const $$1 = load(await ofetch_default(item.link, { headers: getHeaders() })); if ($$1("span.old").length > 0) return null; else { item.pubDate = $$1("meta[name=\"weibo:webpage:create_at\"]").attr("content"); if (item.description === "阅读全文") item.description = $$1("p[itemprop=\"description\"]").first().html(); return item; } })))).filter((result) => result !== null) }; } //#endregion export { route };