チュートリアル

TikTok LIVE API Pythonガイド

TikToolsのWebSocket APIを使って、PythonからどのTikTok LIVE配信にも接続。チャットメッセージ、ギフト、視聴者数などをリアルタイムで受信できます。本番対応、フルマネージドです。

PythonでTikToolsを使う理由

MITライセンスのPythonクライアントTikTokLiveはTikTokの配信プロトコルに直接接続し、署名処理をマネージドバックエンドに任せます(デフォルトはEuler Streamで、独自の無料プランと有料プランがあります)。クライアントは自分でホストし、署名はマネージドという方式で、Euler Streamチームがメンテナンスしています。

TikToolsは独自の署名インフラを持つ独立したマネージドAPIサービスです。プロトコルの変更はサーバー側で対応し、稼働率99.9%を目標として公開しています。標準のWebSocketなのでどの言語でも使えます。プロトコルを扱う必要はなく、接続すればイベントが届きます。チームに合う方式を選んでください。

ホスティング方式✓ フルマネージド - 稼働率99.9%~ セルフホストのクライアント + マネージドの署名
セットアップ✓ pip install websockets~ pip install TikTokLive
メンテナンスの範囲✓ なし - サーバー側で対応~ クライアントと署名バックエンドの更新

必要なもの

方法1: asyncio + websockets

一番シンプルな方法です。標準的なwebsocketsライブラリを使ってTikToolsのWebSocket APIに接続します:

pip install websockets
import asyncio
import websockets
import json
import os

API_KEY = os.environ.get("TIKTOOL_API_KEY", "YOUR_API_KEY")
STREAMER = "tv_asahi_news"  # TikTok username (without @)

async def connect():
    uri = f"wss://api.tik.tools?uniqueId={STREAMER}&apiKey={API_KEY}"

    async with websockets.connect(uri) as ws:
        print(f"✅ Connected to @{STREAMER}")

        async for message in ws:
            event = json.loads(message)
            event_type = event.get("event", "")
            data = event.get("data", {})

            if event_type == "chat":
                user = data.get("user", {}).get("uniqueId", "?")
                comment = data.get("comment", "")
                print(f"[CHAT] {user}: {comment}")

            elif event_type == "gift":
                user = data.get("user", {}).get("uniqueId", "?")
                gift = data.get("giftName", "?")
                diamonds = data.get("diamondCount", 0)
                print(f"[GIFT] {user} sent {gift} ({diamonds} 💎)")

            elif event_type == "member":
                user = data.get("user", {}).get("uniqueId", "?")
                print(f"[JOIN] {user} joined")

            elif event_type == "roomUserSeq":
                viewers = data.get("viewerCount", 0)
                print(f"[VIEWERS] {viewers} watching")

asyncio.run(connect())

方法2: requestsでREST APIを使う

一度だけデータを取得する場合(ルーム情報、ユーザープロフィールなど)はREST APIを使います:

pip install requests
import requests

API_KEY = "YOUR_API_KEY"
BASE = "https://api.tik.tools"

# Get room info for a streamer
resp = requests.get(f"{BASE}/webcast/room_info/", params={
    "uniqueId": "tv_asahi_news",
    "apiKey": API_KEY,
})
data = resp.json()
print(f"Title: {data.get('title', 'N/A')}")
print(f"Viewers: {data.get('viewer_count', 0)}")
print(f"Status: {'LIVE' if data.get('alive') else 'OFFLINE'}")

スクリプトを実行

# Set your API key as environment variable
export TIKTOOL_API_KEY=your_api_key_here

# Run the WebSocket example
python tiktok_live.py

出力例

✅ Connected to @tv_asahi_news
[VIEWERS] 1,234 watching
[CHAT] viewer42: Hello everyone!
[GIFT] big_fan sent Rose (1 💎)
[CHAT] news_watcher: Great coverage
[JOIN] new_viewer joined
[VIEWERS] 1,237 watching

次のステップ

  • イベントをデータベースに保存 - イベントをPostgreSQL、MongoDB、SQLiteに流し込む
  • ダッシュボードを作る - FlaskやFastAPIでリアルタイムのWebダッシュボードを作成
  • AI分析 - チャットメッセージをGPT/Claudeに渡して感情分析
  • 複数配信 - 複数の配信を同時にモニタリング(Proプラン: 50接続)