UNPKG

rsshub

Version:
145 lines (142 loc) 4.92 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 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 { load } from "cheerio"; //#region lib/routes/hkepc/data.ts const baseUrl = "https://www.hkepc.com"; const categoryMap = { price: { url: `${baseUrl}/news`, feedSuffix: " - 腦場新聞", selector: "#sidebar > div:nth-child(1) > div.content > ul > li" }, review: { url: `${baseUrl}/news`, feedSuffix: " - 新品快遞", selector: "#sidebar > div:nth-child(2) > div.content > ul > li" }, coverStory: { url: `${baseUrl}/news`, feedSuffix: " - 專題報導", selector: "#sidebar > div:nth-child(3) > div.content > ul > li" }, news: { url: `${baseUrl}/news`, feedSuffix: " - 新聞中心", selector: "#sidebar > div:nth-child(4) > div.content > ul > li" }, press: { url: `${baseUrl}/news`, feedSuffix: " - 業界資訊", selector: "#sidebar > div:nth-child(5) > div.content > ul > li" }, member: { url: `${baseUrl}/news`, feedSuffix: " - 會員消息", selector: "#sidebar > div:nth-child(6) > div.content > ul > li" }, digital: { url: baseUrl, feedSuffix: " - 流動數碼", selector: "#contentR5 > div.left > div.article > div.heading" }, entertainment: { url: baseUrl, feedSuffix: " - 生活娛樂", selector: "#contentR5 > div.right > div.article > div.heading" }, latest: { url: baseUrl, feedSuffix: " - 最新消息", selector: "div .item" }, "": { url: baseUrl, feedSuffix: " - 最新消息", selector: "div .item" }, ocLab: { url: `${baseUrl}/ocLab`, feedSuffix: " - 超頻領域", selector: ".heading" } }; //#endregion //#region lib/routes/hkepc/index.ts const route = { path: "/:category?", categories: ["new-media"], example: "/hkepc/news", parameters: { category: "分类,见下表,默认为最新消息" }, features: { requireConfig: false, requirePuppeteer: false, antiCrawler: true, supportBT: false, supportPodcast: false, supportScihub: false }, radar: [{ source: ["hkepc.com/"], target: "" }], name: "HKEPC 电脑领域", maintainers: ["TonyRL"], handler, url: "hkepc.com/", description: `| 专题报导 | 新闻中心 | 新品快递 | 超频领域 | 流动数码 | 生活娱乐 | 会员消息 | 脑场新闻 | 业界资讯 | 最新消息 | | ---------- | -------- | -------- | -------- | -------- | ------------- | -------- | -------- | -------- | -------- | | coverStory | news | review | ocLab | digital | entertainment | member | price | press | latest |` }; async function handler(ctx) { const category = ctx.req.param("category") ?? ""; const { data: response } = await got_default(categoryMap[category].url, { headers: { Referer: baseUrl } }); const $ = load(response); const list = $(categoryMap[category].selector).find("a").toArray().map((item) => ({ title: $(item).text(), link: baseUrl + $(item).attr("href") })); const items = await Promise.all(list.map((item) => cache_default.tryGet(item.link, async () => { const { data: response$1 } = await got_default(item.link, { headers: { Referer: baseUrl } }); const $$1 = load(response$1); const content = $$1("#view"); const nextPages = $$1("#articleFooter .navigation a").toArray().map((a) => `${baseUrl}${a.attribs.href}`).slice(1); if (nextPages.length) { const pages = await Promise.all(nextPages.map(async (url) => { const { data: response$2 } = await got_default(url, { headers: { referer: item.link } }); return load(response$2)("#view").html(); })); content.append(pages); } content.find("#view > div.advertisement").remove(); content.find("div#comments").remove(); content.find("div#share_btn").remove(); content.find("#articleFooter").remove(); content.find("#view > p").filter((_, e) => e.children[0]?.data === String.fromCharCode(160)).remove(); content.find("#view > p > img").each((_, e) => { if (e.attribs.rel) e.attribs.src = e.attribs.rel; }); item.author = $$1(".newsAuthor").text().trim() || $$1("#articleHead div.author").text().trim(); item.category = $$1("div#relatedArticles div.tags a").toArray().map((e) => $$1(e).text().trim()); item.description = content.html(); item.pubDate = timezone(parseDate($$1(".publishDate").text()), 8); item.guid = item.link.slice(0, item.link.lastIndexOf("/")); return item; }))); return { title: `電腦領域 HKEPC${categoryMap[category].feedSuffix}`, link: `https://www.hkepc.com/${category}`, description: "電腦領域 HKEPC Hardware - 全港 No.1 PC網站", language: "zh-hk", item: items }; } //#endregion export { route };