UNPKG

rsshub

Version:
114 lines (111 loc) 3.84 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 "./render-BQo6B4tL.mjs"; import { a as topicPost, i as imagePost, n as appDetail, o as videoPost, r as getRootUrl, t as X_UA } from "./utils-DY91kUEc.mjs"; //#region lib/routes/taptap/topic.ts const typeMap = { feed: { zh_CN: "最新", zh_TW: "最新" }, official: { zh_CN: "官方", zh_TW: "官方" }, elite: { zh_CN: "精华", zh_TW: "精華" }, video: { zh_CN: "影片", zh_TW: "影片" } }; const route = { path: "/topic/:id/:type?/:sort?/:lang?", categories: ["game"], example: "/taptap/topic/142793/official", parameters: { id: "游戏 ID,游戏主页 URL 中获取", type: "论坛版块,默认显示所有帖子,论坛版块 URL 中 `type` 参数,见下表,默认为 `feed`", sort: "排序,见下表,默认为 `created`", lang: "语言,`zh-CN`或`zh-TW`,默认为`zh-CN`" }, features: { requireConfig: false, requirePuppeteer: false, antiCrawler: false, supportBT: false, supportPodcast: false, supportScihub: false }, radar: [{ source: ["taptap.cn/app/:id/topic", "taptap.cn/app/:id"], target: "/topic/:id" }], name: "游戏论坛", maintainers: ["hoilc", "TonyRL"], handler, description: `| 全部 | 精华 | 官方 | 影片 | | ---- | ----- | -------- | ----- | | feed | elite | official | video | | 发布时间 | 回复时间 | 默认排序 | | -------- | --------- | ------- | | created | commented | default |` }; async function handler(ctx) { const lang = ctx.req.param("lang") ?? "zh_CN"; const appId = ctx.req.param("id"); const appData = await appDetail(appId, lang); const type = ctx.req.param("type") ?? "feed"; const sort = ctx.req.param("sort") ?? "created"; const groupId = appData.group.id; const appImg = appData.app.icon.original_url || appData.app.icon.url; const appName = appData.app.title; const topicsList = await ofetch_default(`${getRootUrl(false)}/webapiv2/feed/v7/by-group?group_id=${groupId}&type=${type}&sort=${sort}&${X_UA(lang)}`); const list = topicsList.data.list; const out = await Promise.all(list.map(({ moment }) => { const link = moment.sharing.url; return cache_default.tryGet(link, async () => { const isRepost = !moment.topic?.id_str; const author = moment.author.user.name; const topicId = isRepost ? moment.reposted_moment.topic.id_str : moment.topic.id_str; const title = isRepost ? moment.repost.contents.raw_text || "" : moment.topic.title || moment.topic.summary.split(" ")[0]; let description = isRepost ? moment.repost.contents.raw_text || "" : moment.topic.summary || ""; if (isRepost) { description += (moment.reposted_moment.topic.title || "") + (await topicPost(appId, topicId, lang) || ""); if (moment.reposted_moment.topic.footer_images) description += imagePost(moment.reposted_moment.topic.footer_images); } else if (moment.topic.pin_video) { description += videoPost(moment.topic.pin_video); if (moment.topic.footer_images?.images) description += imagePost(moment.topic.footer_images.images); } else description = await topicPost(appId, topicId, lang); return { title, description, author, link, pubDate: parseDate(moment.created_time, "X") }; }); })); const ret = { title: `${appName} - ${typeMap[type][lang]} - TapTap 论坛`, link: `${getRootUrl(false)}/app/${appId}/topic?type=${type}&sort=${sort}`, image: appImg, item: out.filter((item) => item !== "") }; ctx.set("json", { ...ret, appId, groupId, topicsList }); return ret; } //#endregion export { route };