UNPKG

rsshub

Version:
191 lines (188 loc) 4.94 kB
import "./esm-shims-CzJ_djXG.mjs"; import { t as config } from "./config-C37vj7VH.mjs"; import { t as ViewType } from "./types-D84BRIt4.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 { load } from "cheerio"; //#region lib/routes/bitget/announcement.ts const handler = async (ctx) => { const baseUrl = "https://www.bitget.com"; const announcementApiUrl = `${baseUrl}/v1/msg/push/stationLetterNew`; const { type, lang = "zh-CN" } = ctx.req.param(); const languageCode = lang.replace("-", "_"); const headers = { Referer: baseUrl, accept: "application/json, text/plain, */*", "content-type": "application/json;charset=UTF-8", language: languageCode, locale: languageCode }; const pageSize = ctx.req.query("limit") ?? "10"; const reqBody = { pageSize, openUnread: 0, stationLetterType: "0", isPre: false, lastEndId: null, languageType: 1 }; switch (type) { case "new-listing": reqBody.stationLetterType = "02"; break; case "latest-activities": reqBody.stationLetterType = "01"; break; case "new-announcement": reqBody.stationLetterType = "06"; break; case "all": reqBody.stationLetterType = "0"; reqBody.excludeStationLetterType = "00"; break; default: throw new Error("Invalid type"); } const response = await cache_default.tryGet(`bitget:announcement:${type}:${pageSize}:${lang}`, async () => { const result = await ofetch_default(announcementApiUrl, { method: "POST", body: reqBody, headers }); if (result?.code !== "200") throw new Error("Failed to fetch announcements, error code: " + result?.code); return result; }, config.cache.routeExpire, false); if (!response) throw new Error("Failed to fetch announcements"); const items = response.data.items; const data = await Promise.all(items.map((item) => cache_default.tryGet(`bitget:announcement:${item.id}:${pageSize}:${lang}`, async () => { const date = parseDate(Number(item.sendTime)); const dataItem = { title: item.title ?? "", link: item.openUrl ?? "", pubDate: item.sendTime ? date : void 0, description: item.content ?? "" }; if (item.imgUrl) dataItem.image = item.imgUrl; if (item.stationLetterType === "01" || item.stationLetterType === "06") try { const $ = load(await ofetch_default(item.openUrl ?? "", { headers })); const nextData = JSON.parse($("script#__NEXT_DATA__").text()); dataItem.description = nextData.props.pageProps.details?.content || nextData.props.pageProps.pageInitInfo?.ruleContent || item.content || ""; } catch (error) { if (error.name && (error.name === "HTTPError" || error.name === "RequestError" || error.name === "FetchError")) dataItem.description = item.content ?? ""; else throw error; } return dataItem; }))); return { title: `Bitget | ${findTypeLabel(type)}`, link: `https://www.bitget.com/${lang}/inmail`, item: data }; }; const findTypeLabel = (type) => { return { all: "All", "new-listing": "New Listing", "latest-activities": "Latest Activities", "new-announcement": "New Announcement" }[type]; }; const route = { path: "/announcement/:type/:lang?", categories: ["finance"], view: ViewType.Articles, example: "/bitget/announcement/all/zh-CN", parameters: { type: { description: "Bitget 通知类型", default: "all", options: [ { value: "all", label: "全部通知" }, { value: "new-listing", label: "新币上线" }, { value: "latest-activities", label: "最新活动" }, { value: "new-announcement", label: "最新公告" } ] }, lang: { description: "语言", default: "zh-CN", options: [ { value: "zh-CN", label: "中文" }, { value: "en-US", label: "English" }, { value: "es-ES", label: "Español" }, { value: "fr-FR", label: "Français" }, { value: "de-DE", label: "Deutsch" }, { value: "ja-JP", label: "日本語" }, { value: "ru-RU", label: "Русский" }, { value: "ar-SA", label: "العربية" } ] } }, radar: [{ source: ["www.bitget.com/:lang/inmail"], target: "/announcement/all/:lang" }], name: "Announcement", description: ` type: | Type | Description | | --- | --- | | all | 全部通知 | | new-listing | 新币上线 | | latest-activities | 最新活动 | | new-announcement | 最新公告 | lang: | Lang | Description | | --- | --- | | zh-CN | 中文 | | en-US | English | | es-ES | Español | | fr-FR | Français | | de-DE | Deutsch | | ja-JP | 日本語 | | ru-RU | Русский | | ar-SA | العربية | `, maintainers: ["YukiCoco"], handler }; //#endregion export { route };