Какие данные аналитики доступны?
У TikTok нет публичного API аналитики для трансляций LIVE. TikTools API закрывает этот пробел и отдаёт каждое событие эфира в реальном времени через WebSocket. Из этих сырых событий можно посчитать любую метрику:
- Число зрителей - обновляется в реальном времени каждые несколько секунд
- Доход с подарков - каждое событие подарка содержит стоимость в алмазах (1 алмаз ≈ $0.005)
- Активность чата - сообщения в минуту, уникальные авторы, частота ключевых слов
- Вовлечённость - лайки, репосты, подписки за период
- Пик зрителей - максимумы за всю сессию
- Рейтинг дарителей - топ поддерживающих по сумме потраченных алмазов
Быстрый старт: данные для дашборда в реальном времени
Этот пример собирает все данные аналитики в реальном времени. Подключите его к любому фронтенд-фреймворку или сохраняйте в базу данных:
import { TikTokLive } from '@tiktool/live'
const client = new TikTokLive({
uniqueId: 'target_username',
apiKey: process.env.TIKTOOL_API_KEY
})
// ── Analytics State ──
const stats = {
viewerCount: 0,
peakViewers: 0,
totalMessages: 0,
totalGifts: 0,
totalDiamonds: 0,
totalLikes: 0,
totalFollows: 0,
totalShares: 0,
uniqueChatters: new Set(),
giftLeaderboard: new Map(),
startTime: Date.now()
}
// Viewer count tracking
client.on('viewer_count', (event) => {
stats.viewerCount = event.viewerCount
if (event.viewerCount > stats.peakViewers) {
stats.peakViewers = event.viewerCount
}
})
// Chat analytics
client.on('chat', (event) => {
stats.totalMessages++
stats.uniqueChatters.add(event.userId)
})
// Gift revenue tracking
client.on('gift', (event) => {
stats.totalGifts++
stats.totalDiamonds += event.diamondCount
const current = stats.giftLeaderboard.get(event.nickname) || 0
stats.giftLeaderboard.set(event.nickname, current + event.diamondCount)
})
// Engagement tracking
client.on('like', (event) => {
stats.totalLikes = event.totalLikeCount
})
client.on('follow', () => { stats.totalFollows++ })
client.on('share', () => { stats.totalShares++ })
await client.connect()
console.log('📊 Analytics tracking started!')
// Print summary every 60 seconds
setInterval(() => {
const minutes = (Date.now() - stats.startTime) / 60000
const revenue = (stats.totalDiamonds * 0.005).toFixed(2)
console.log('\n── Stream Analytics ──')
console.log(`Viewers: ${stats.viewerCount} (peak: ${stats.peakViewers})`)
console.log(`Messages: ${stats.totalMessages} (${(stats.totalMessages / minutes).toFixed(1)}/min)`)
console.log(`Unique chatters: ${stats.uniqueChatters.size}`)
console.log(`Gifts: ${stats.totalGifts} (${stats.totalDiamonds} 💎 ≈ $${revenue})`)
console.log(`Likes: ${stats.totalLikes} | Follows: ${stats.totalFollows} | Shares: ${stats.totalShares}`)
}, 60000)Что вы увидите
📊 Analytics tracking started!
── Stream Analytics ──
Viewers: 2,347 (peak: 3,891)
Messages: 487 (81.2/min)
Unique chatters: 203
Gifts: 34 (12,450 💎 ≈ $62.25)
Likes: 45,230 | Follows: 89 | Shares: 23Сохранение в базу данных
Храните события в PostgreSQL, MongoDB или любой другой базе для анализа истории:
import { TikTokLive } from '@tiktool/live'
// Example: save to PostgreSQL with Prisma
import { PrismaClient } from '@prisma/client'
const prisma = new PrismaClient()
const client = new TikTokLive({
uniqueId: 'target_username',
apiKey: process.env.TIKTOOL_API_KEY
})
client.on('gift', async (event) => {
await prisma.giftEvent.create({
data: {
streamer: 'target_username',
senderNickname: event.nickname,
senderUserId: event.userId,
giftName: event.giftName,
diamondCount: event.diamondCount,
repeatCount: event.repeatCount,
timestamp: new Date()
}
})
})
client.on('viewer_count', async (event) => {
await prisma.viewerSnapshot.create({
data: {
streamer: 'target_username',
viewerCount: event.viewerCount,
timestamp: new Date()
}
})
})
await client.connect()
console.log('💾 Saving events to database...')Чистый WebSocket (любой язык)
Стройте аналитику на Python, Go, Rust или любом языке с поддержкой WebSocket:
# Python example using websockets library
import asyncio, json, websockets
async def track_analytics():
url = "wss://api.tik.tools?uniqueId=target_username&apiKey=YOUR_API_KEY"
async with websockets.connect(url) as ws:
total_diamonds = 0
peak_viewers = 0
async for raw in ws:
msg = json.loads(raw)
if msg["event"] == "viewer_count":
viewers = msg["data"]["viewerCount"]
peak_viewers = max(peak_viewers, viewers)
print(f"Viewers: {viewers} (peak: {peak_viewers})")
elif msg["event"] == "gift":
diamonds = msg["data"]["diamondCount"]
total_diamonds += diamonds
revenue = total_diamonds * 0.005
print(f"Gift revenue: {total_diamonds} 💎 (${revenue:.2f})")
asyncio.run(track_analytics())Частые вопросы
Есть ли у TikTok официальный API аналитики для трансляций LIVE?
Нет. TikTok показывает аналитику авторам внутри приложения через LIVE Center, но публичного API для программного доступа к этим данным нет. TikTools API отдаёт сырые события в реальном времени, на которых можно построить свою аналитику.
Можно отслеживать несколько стримов одновременно?
Да. Создайте несколько клиентов TikTokLive - по одному на стрим. Тариф Pro поддерживает до 50 одновременных WebSocket-подключений.
Насколько точно число зрителей?
Число зрителей приходит напрямую из внутренних данных TikTok и обновляется каждые несколько секунд. Оно совпадает с числом в приложении TikTok.