UNPKG

rsshub

Version:
113 lines (109 loc) 5.42 kB
import "./esm-shims-CzJ_djXG.mjs"; import "./config-C37vj7VH.mjs"; import "./dist-BInvbO1W.mjs"; import "./logger-Czu8UMNd.mjs"; import { t as ofetch_default } from "./ofetch-BIyrKU3Y.mjs"; import { t as parseDate } from "./parse-date-BrP7mxXf.mjs"; import { t as cache_default } from "./cache-Bo__VnGm.mjs"; import { t as timezone } from "./timezone-D8cuwzTY.mjs"; import { n as Parameter, r as SUPPORTED_LANGUAGES, t as Language } from "./constants-CvBdW0m_.mjs"; import * as cheerio from "cheerio"; //#region lib/routes/kurogames/wutheringwaves/utils.ts /** * Parse a number or a number as string.\ * **NOTE:** this may return `NaN` if the string is not a number or the value is `undefined` and no {@link fallback} is provided. */ const parseInteger = (value, fallback) => { if (typeof value === "number") return value; if (value === void 0) return fallback === void 0 ? NaN : fallback; const parsed = Number.parseInt(value, 10); if (fallback !== void 0 && Number.isNaN(parsed)) return fallback; return parsed; }; /** Type-guard to ensure {@link language} is a valid value of {@link SUPPORTED_LANGUAGES}. */ const isValidLanguage = (language) => SUPPORTED_LANGUAGES.includes(language); /** Fetch the articles for a given language in a given category. */ const fetchArticles = (language) => { if (language === Language.Chinese) return ofetch_default("https://media-cdn-mingchao.kurogame.com/akiwebsite/website2.0/json/G152/zh/ArticleMenu.json", { query: { t: Date.now() } }); return ofetch_default(`https://hw-media-cdn-mingchao.kurogame.com/akiwebsite/website2.0/json/G152/${language}/MainMenu.json`).then((data) => data.article); }; /** Get the link to the article content. */ const getArticleContentLink = (language, articleId) => { if (language === Language.Chinese) return `https://media-cdn-mingchao.kurogame.com/akiwebsite/website2.0/json/G152/zh/article/${articleId}.json`; return `https://hw-media-cdn-mingchao.kurogame.com/akiwebsite/website2.0/json/G152/${language}/article/${articleId}.json`; }; /** Get the link to an article from its ID. */ const getArticleLink = (language, articleId) => { if (language === Language.Chinese) return `https://mc.kurogames.com/main/news/detail/${articleId}`; return `https://wutheringwaves.kurogames.com/${language}/main/news/detail/${articleId}`; }; /** Resolve the handler language from the {@link Language}. */ const getHandlerLanguage = (language) => { switch (language) { case Language.English: return "en"; case Language.Chinese: return "zh-CN"; case Language.ChineseTaiwan: return "zh-TW"; case Language.French: return "fr"; case Language.German: return "de"; case Language.Japanese: return "ja"; case Language.Korean: return "ko"; case Language.Spanish: return "es"; default: throw new Error(`Could not resolve handler language from "${language}"`); } }; //#endregion //#region lib/routes/kurogames/wutheringwaves/news.ts const route = { path: `/wutheringwaves/news/:${Parameter.Language}?`, categories: ["game"], example: "/kurogames/wutheringwaves/news", parameters: { [Parameter.Language]: "The language to use for the content. Default: `zh`." }, name: "鸣潮 — 游戏公告、新闻与活动", radar: [{ source: ["mc.kurogames.com/m/main/news", "mc.kurogames.com/main"] }, { title: "Wuthering Waves — Game announcements, news and events", source: ["wutheringwaves.kurogames.com/en/main/news", "wutheringwaves.kurogames.com/en/main"] }], maintainers: ["goestav", "enpitsulin"], description: ` Language codes for the \`${Parameter.Language}\` parameter: | Language | Code | |----------|--------------| | English | en | | 日本語 | jp | | 한국어 | kr | | 简体中文 | zh (default) | | 繁體中文 | zh-tw | | Español | es | | Français | fr | | Deutsch | de | `, async handler(ctx) { const limitParam = ctx.req.query(Parameter.Limit); const languageParam = ctx.req.param(Parameter.Language); const limit = parseInteger(limitParam, 30); const language = languageParam || Language.Chinese; if (!isValidLanguage(language)) throw new TypeError(`Language parameter is not valid. Please use one of the following: ${SUPPORTED_LANGUAGES.join(", ")}`); const filteredArticles = (await fetchArticles(language)).filter((a) => a.articleType !== 0).slice(0, limit); const item = await Promise.all(filteredArticles.map((article) => { const contentUrl = getArticleContentLink(language, article.articleId); const item$1 = { title: article.articleTitle, pubDate: timezone(parseDate(article.createTime), 8), link: getArticleLink(language, article.articleId) }; return cache_default.tryGet(`wutheringwaves:${language}:${article.articleId}`, async () => { const articleContent = (await ofetch_default(contentUrl, { query: { t: Date.now() } })).articleContent ?? ""; item$1.description = cheerio.load(articleContent).html() ?? article.articleDesc ?? ""; return item$1; }); })); return { title: language === Language.Chinese ? "《鸣潮》— 游戏公告、新闻和活动" : "Wuthering Waves - Announcements, News and Events", link: language === Language.Chinese ? "https://mc.kurogames.com/main#news" : `https://wutheringwaves.kurogames.com/${language}/main/#news`, item, language: getHandlerLanguage(language) }; } }; //#endregion export { route };