rsshub
Version:
Make RSS Great Again!
46 lines (45 loc) • 1.85 kB
JavaScript
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 };