为什么选 Node.js?
Node.js 是 TikTok 直播集成最常用的运行时。官方 @tiktool/live SDK 用 TypeScript 编写,发布在 npm 上,开箱即带完整类型定义。你能得到:
- 类型安全 - 每个事件和方法都有完整的 TypeScript 定义
- 自动重连 - SDK 自动处理连接断开
- 事件驱动 - 熟悉的
.on('event', handler)写法 - 到处都能跑 - Node.js 18+、Bun、Deno
安装 SDK
npm install @tiktool/live或者用其他包管理器:
# Yarn
yarn add @tiktool/live
# pnpm
pnpm add @tiktool/live
# Bun
bun add @tiktool/live快速上手:3 行代码拿到直播数据
新建 app.mjs 并粘贴:
import { TikTokLive } from '@tiktool/live'
const client = new TikTokLive({
uniqueId: 'tv_asahi_news', // TikTok username (without @)
apiKey: process.env.TIKTOOL_API_KEY
})
client.on('chat', (event) => {
console.log(`${event.nickname}: ${event.comment}`)
})
await client.connect()运行:
TIKTOOL_API_KEY=your_api_key node app.mjs几秒内就能在终端里看到弹幕不断涌入。
全部可用事件
直播间里的每一次互动,SDK 都会推送结构化事件:
import { TikTokLive } from '@tiktool/live'
const client = new TikTokLive({
uniqueId: 'target_username',
apiKey: process.env.TIKTOOL_API_KEY
})
// Chat messages
client.on('chat', (event) => {
console.log(`[CHAT] ${event.nickname}: ${event.comment}`)
})
// Virtual gifts (Rose, Universe, etc.)
client.on('gift', (event) => {
console.log(`[GIFT] ${event.nickname} sent ${event.giftName} (${event.diamondCount} 💎)`)
})
// New followers
client.on('follow', (event) => {
console.log(`[FOLLOW] ${event.nickname} just followed!`)
})
// Likes
client.on('like', (event) => {
console.log(`[LIKE] ${event.nickname} liked (total: ${event.totalLikeCount})`)
})
// Viewer count changes
client.on('viewer_count', (event) => {
console.log(`[VIEWERS] ${event.viewerCount} watching`)
})
// Member joins (someone enters the stream)
client.on('member', (event) => {
console.log(`[JOIN] ${event.nickname} joined the stream`)
})
// Share events
client.on('share', (event) => {
console.log(`[SHARE] ${event.nickname} shared the stream`)
})
await client.connect()
console.log('✅ Connected and listening!')预期输出
✅ Connected and listening!
[VIEWERS] 3,412 watching
[CHAT] viewer_1: Hello everyone! 👋
[FOLLOW] new_fan just followed!
[GIFT] whale_user sent Universe (34,000 💎)
[LIKE] cool_viewer liked (total: 12,847)
[CHAT] fan_123: Love this stream!
[JOIN] curious_viewer joined the stream
[SHARE] supporter_1 shared the streamTypeScript 支持
SDK 本身用 TypeScript 编写,类型自动包含,不需要额外装 @types 包:
import { TikTokLive } from '@tiktool/live'
import type { ChatEvent, GiftEvent } from '@tiktool/live'
const client = new TikTokLive({
uniqueId: 'target_username',
apiKey: process.env.TIKTOOL_API_KEY
})
client.on('chat', (event: ChatEvent) => {
// event.comment, event.nickname, event.userId - all typed
console.log(event.nickname, event.comment)
})
client.on('gift', (event: GiftEvent) => {
// event.giftName, event.diamondCount, event.repeatCount - all typed
if (event.diamondCount >= 100) {
console.log(`Big gift from ${event.nickname}!`)
}
})
await client.connect()原生 WebSocket(不用 SDK)
想直接用原生 WebSocket?任何语言或框架都可以:
import WebSocket from 'ws' // npm install ws
const ws = new WebSocket(
'wss://api.tik.tools?uniqueId=tv_asahi_news&apiKey=YOUR_API_KEY'
)
ws.on('message', (raw) => {
const msg = JSON.parse(raw.toString())
switch (msg.event) {
case 'chat':
console.log(`${msg.data.user.nickname}: ${msg.data.comment}`)
break
case 'gift':
console.log(`Gift: ${msg.data.giftName} (${msg.data.diamondCount} 💎)`)
break
case 'viewer_count':
console.log(`Viewers: ${msg.data.viewerCount}`)
break
}
})
ws.on('open', () => console.log('Connected!'))常见问题
TikTok 有官方的 Node.js API 吗?
没有。TikTok 没有开放直播数据的公开 API。TikTools API 是托管的第三方服务,稳定提供弹幕、礼物、观众等直播事件的实时访问。@tiktool/live npm 包就是这个 API 的官方 SDK。
免费吗?
免费。Sandbox 套餐提供每天 5,000 次请求和 3 个并发 WebSocket 连接,免费,仅供评估使用,无需信用卡。点这里注册。
能和 Express、Fastify 或 Next.js 一起用吗?
可以。SDK 适用于任何 Node.js 环境,Express 路由处理函数、Fastify 插件、Next.js API 路由或独立脚本里都能用。
支持 Bun 和 Deno 吗?
支持。SDK 兼容 Bun 和 Deno。用 bun add @tiktool/live 安装,或在 Deno 中从 npm 导入。