UNPKG

rsshub

Version:
46 lines (45 loc) 1.85 kB
import { t as rofetch } from "./ofetch-eUBdfMpp.mjs"; import { t as config } from "./config-Bpyy15zS.mjs"; import { t as cache_default } from "./cache-CiDoUSLo.mjs"; import { t as md5 } from "./md5-CpIHIxCO.mjs"; //#region lib/routes/baidu/tieba/common.ts /** * 通过 /c/f/frs/page API 获取贴吧帖子列表 * 使用贴吧客户端签名认证,无需 Puppeteer */ const TIEBA_CLIENT_SECRET = "tiebaclient!!!"; const computeSign = (params) => { return md5(Object.keys(params).toSorted().map((key) => `${key}=${params[key]}`).join("") + TIEBA_CLIENT_SECRET); }; const tiebaClientRequest = async (path, params) => { const bduss = config.baidu.cookie?.match(/BDUSS=([^;]+)/)?.[1]; const apiParams = { _client_id: `wappc_${Date.now()}_${Math.floor(Math.random() * 1e3)}`, _client_type: "2", _client_version: "12.20.1.0", _phone_imei: "000000000000000", from: "tieba", ...bduss && { BDUSS: bduss }, ...params }; apiParams.sign = computeSign(apiParams); const cacheKey = `tieba:api:${path}:${new URLSearchParams(params).toString()}`; const data = await cache_default.tryGet(cacheKey, () => rofetch(`https://tieba.baidu.com${path}`, { method: "POST", body: new URLSearchParams(apiParams), parseResponse: JSON.parse }), config.cache.routeExpire, false); if (Number(data.error_code) !== 0) throw new Error(`Tieba API error: ${data.error_msg || data.error_code}`); return data; }; const renderContent = (items = []) => items.map((item) => { switch (Number(item.type)) { case 1: case 18: return `<a href="${item.link}">${item.text}</a>`; case 2: return `<img src="https://tb3.bdstatic.com/emoji/${item.text}@2x.png" alt="${item.c}">`; case 3: return `<img src="${item.origin_src || item.src}">`; default: return item.text ?? ""; } }).join(""); //#endregion export { tiebaClientRequest as n, renderContent as t };