面向百度贴吧的数据获取与互动操作 SDK,基于 TypeScript + Effect,提供帖子、用户、贴吧、搜索、互动与管理相关能力。
npm i tieba.js
# 或
pnpm add tieba.js
# 或
bun add tieba.js
当前仓库内工作区包名与 npm 发布包名一致,均为
tieba.js。
import {
TiebaClient,
initClient,
getThreads,
getPosts,
consume
} from "tieba.js";
// 1) 初始化客户端(必须)
initClient(
new TiebaClient({
bduss: process.env.BDUSS ?? ""
})
);
// 2) 获取贴吧帖子列表
const threads = await consume(
getThreads({
fname: "v吧",
page: 1,
rn: 30,
sort: 1
})
);
// 3) 获取某个主题帖楼层
const posts = await consume(
getPosts({
tid: Number(threads?.threadList?.[0]?.id ?? 0),
page: 1
})
);
console.log(posts);
getThreads、getForumDetail、getForumMembers、followForum、unfollowForum、signForumgetPosts、getComments、getUserPost、addPost、delPost、delThreadgetProfile、getUserByUid、getFans、getFollow、getLikeForum、followUser、unfollowUsersearchForum、searchPostagree、disagreegoodThread、ungoodThread、topThread、untopThread、blockUser、unblockUser完整参数与返回结构请查看 Typedoc 文档:http://sdk.eztb.org/
Effect 返回值,组合与并发控制更清晰,错误处理更统一。Undici,并使用共享连接池与连接复用,减少重复建连开销。关于浏览器:SDK 当前默认基于 Undici 请求链路,主目标是服务端运行时(Node/Bun)。如需浏览器场景,建议通过你自己的后端 API 转发调用。
tieba.js 发布包内置了 dist/shims/undici.js,用于 Cloudflare Worker 等非 Node 运行时的打包替换。
原因是 undici 当前主要面向 Node 运行时,且存在 CJS/Node 依赖路径;在 Worker 环境直接打包或运行时,可能因为 Node 专属能力缺失而失败。
Worker 构建时建议将 undici 别名到该 shim,例如:
esbuild ... --alias:undici=./node_modules/tieba.js/dist/shims/undici.js
Node/Bun 场景不需要此别名,默认继续使用 undici 即可。
SDK 统一抛出 TiebaError 体系,常见包括:
FetchError:网络层请求失败或超时TiebaServerError:贴吧接口业务错误(如 errorno != 0)InvalidParamError:参数不合法import {
consume,
TiebaError,
TiebaServerError,
FetchError
} from "tieba.js";
try {
// await consume(...)
} catch (err) {
if (err instanceof TiebaServerError) {
console.error("贴吧业务错误", err.code, err.message);
} else if (err instanceof FetchError) {
console.error("网络请求错误", err.message);
} else if (err instanceof TiebaError) {
console.error("SDK 错误", err.message);
} else {
console.error("未知错误", err);
}
}
SDK 默认使用共享连接池。你也可以注入自己的 dispatcher:
import { Agent } from "undici";
import { setHttpDispatcher } from "tieba.js";
setHttpDispatcher(
new Agent({
connections: 64,
pipelining: 1,
connectTimeout: 10_000,
keepAliveTimeout: 10_000
})
);