UNPKG

rsshub

Version:
97 lines (95 loc) 3.4 kB
import { n as init_esm_shims, t as __dirname } from "./esm-shims-CzJ_djXG.mjs"; import "./config-C37vj7VH.mjs"; import "./dist-BInvbO1W.mjs"; import "./logger-Czu8UMNd.mjs"; import "./ofetch-BIyrKU3Y.mjs"; import { t as parseDate } from "./parse-date-BrP7mxXf.mjs"; import "./helpers-DxBp0Pty.mjs"; import { t as art } from "./render-BQo6B4tL.mjs"; import { t as got_default } from "./got-KxxWdaxq.mjs"; import { t as timezone } from "./timezone-D8cuwzTY.mjs"; import path from "node:path"; import { load } from "cheerio"; //#region lib/routes/baidu/tieba/post.ts init_esm_shims(); /** * 获取最新的帖子回复(倒序查看) * * @param {*} id 帖子ID * @param {number} [lz=0] 是否只看楼主(0: 查看全部, 1: 只看楼主) * @param {number} [pn=7e6] 帖子最大页码(默认假设为 7e6,如果超出假设则根据返回的最大页码再请求一次,否则可以节省一次请求) * 这个默认值我测试下来 7e6 是比较接近最大值了,因为当我输入 8e6 就会返回第一页的数据而不是最后一页了 * @returns */ async function getPost(id, lz = 0, pn = 7e6) { const { data } = await got_default(`https://tieba.baidu.com/p/${id}?see_lz=${lz}&pn=${pn}&ajax=1`, { headers: { Referer: "https://tieba.baidu.com/" } }); const $ = load(data); const max = Number.parseInt($("[max-page]").attr("max-page")); if (max > pn) return getPost(id, max); return data; } const route = { path: ["/tieba/post/:id", "/tieba/post/lz/:id"], categories: ["bbs"], example: "/baidu/tieba/post/686961453", parameters: { id: "帖子 ID" }, features: { requireConfig: false, requirePuppeteer: false, antiCrawler: false, supportBT: false, supportPodcast: false, supportScihub: false }, radar: [{ source: ["tieba.baidu.com/p/:id"] }], name: "帖子动态", maintainers: ["u3u"], handler }; async function handler(ctx) { const id = ctx.req.param("id"); const lz = ctx.req.path.includes("lz") ? 1 : 0; const $ = load(await getPost(id, lz)); const title = $(".core_title_txt").attr("title"); const list = $(".p_postlist > [data-field]:not(:has(.ad_bottom_view))"); return { title: lz ? `【只看楼主】${title}` : title, link: `https://tieba.baidu.com/p/${id}?see_lz=${lz}`, description: `${title}的最新回复`, item: list.toArray().map((element) => { const item = $(element); const { author, content } = item.data("field"); const tempList = item.find(".post-tail-wrap > .tail-info").toArray().map((element$1) => $(element$1).text()); let [pubContent, from, num, time] = [ "", "", "", "" ]; if (0 === tempList.length && "date" in content) { num = `${content.post_no}楼`; time = content.date; pubContent = item.find(".j_d_post_content").html(); } else if (2 === tempList.length) { [num, time] = tempList; pubContent = content.content; } else if (3 === tempList.length) { [from, num, time] = tempList; pubContent = content.content; } return { title: `${author.user_name}回复了帖子《${title}》`, description: art(path.join(__dirname, "templates/post-c443ff41.art"), { pubContent, author: author.user_name, num, from }), pubDate: timezone(parseDate(time, "YYYY-MM-DD hh:mm"), 8), link: `https://tieba.baidu.com/p/${id}?pid=${content.post_id}#${content.post_id}` }; }) }; } //#endregion export { route };