rsshub
Version:
Make RSS Great Again!
92 lines (90 loc) • 2.92 kB
JavaScript
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 };