UNPKG

rsshub

Version:
92 lines (90 loc) 2.92 kB
import { n as init_esm_shims, t as __dirname } from "./esm-shims-CzJ_djXG.mjs"; import { t as parseDate } from "./parse-date-BrP7mxXf.mjs"; import { t as art } from "./render-BQo6B4tL.mjs"; import { t as got_default } from "./got-KxxWdaxq.mjs"; import path from "node:path"; import dayjs from "dayjs"; import { load } from "cheerio"; import localizedFormat from "dayjs/plugin/localizedFormat.js"; import { JSDOM } from "jsdom"; import "dayjs/locale/zh-cn.js"; //#region lib/routes/nintendo/utils.ts init_esm_shims(); dayjs.extend(localizedFormat); function nuxtReader(data) { let nuxt = {}; try { nuxt = new JSDOM(data, { runScripts: "dangerously" }).window.__NUXT__.data[0]; } catch { throw new Error("Nuxt 框架信息提取失败,请报告这个问题"); } return nuxt; } function generateImageLink(link) { return `<img src="${link}"><br/>`; } async function loadContent(link) { const data = (await got_default(link)).data; return { content: load(data)(".description").html() }; } async function loadNews(link) { const data = (await got_default(link)).data; const $ = load(data); let description = $(".detail-body-container").html(); const date = $(".topics-articleHead__date").text(); description = description.replaceAll("src=\"/topics/", "src=\"https://www.nintendo.com.hk/topics/"); return { content: description, pubDate: parseDate(date, "YYYY.M.D") }; } const ProcessItem = (list, caches) => Promise.all(list.map(async (item) => { const other = await caches.tryGet(item.link, () => loadContent(item.link)); return { ...item, ...other }; })); const ProcessNews = (list, caches) => Promise.all(list.map(async (item) => { const other = await caches.tryGet(item.url, () => loadNews("https://www.nintendo.com.hk" + item.url)); return { ...item, ...other }; })); const ProcessItemChina = (list, cache) => Promise.all(list.map(async (item) => { if (!item.link.startsWith("https://www.nintendoswitch.com.cn/software/")) return item; const software = (await cache.tryGet(item.link, async () => nuxtReader((await got_default(item.link)).data))).data; return { ...item, category: [ ...software.supportLanguages, ...software.genre, ...software.playMode ], description: art(path.join(__dirname, "templates/eshop_cn-23aed242.art"), { item, software, releaseDatetime: dayjs(software.releaseDatetime).locale("zh-cn").format("lll") }) }; })); const ProcessNewsChina = (list, cache) => Promise.all(list.map(async (item) => { const n = await cache.tryGet(item.link, async () => nuxtReader((await got_default(item.link)).data)); return { ...item, description: item.description + n.newsData.content, category: n.newsData.category, pubDate: parseDate(n.newsData.releaseTime, "x") }; })); var utils_default = { ProcessItem, ProcessNews, ProcessNewsChina, ProcessItemChina, nuxtReader, generateImageLink }; //#endregion export { utils_default as t };