ビスたん配信スパチャ検索API リファレンス

ビスたん配信のスーパーチャットを投稿者名・メッセージ本文で部分一致検索する公開 API です。 検索結果には紐付く配信のタイトルと配信日も含まれます。

配信開始当初にメンバーシップ限定配信だった配信のスパチャは収集対象外のため、本 API では取得できません。

エンドポイント概要

URL https://bistan-tool.com/api/super_chat.php
Method GET
Content-Type application/json; charset=utf-8
CORS ブラウザからのクロスオリジンアクセスを許可 (Access-Control-Allow-Origin: *)
Preflight OPTIONS メソッドに対応 (HTTP 204 を返却、ボディなし)
レート制限 30 リクエスト / 5 秒 / IP (超過時は HTTP 429)。運用状況に応じて変更する場合あり

クエリパラメータ

名前 既定値 必須 説明
user_name string "" 投稿者名の部分一致検索。user_namemessage の両方が空の場合は空結果を返す (全件スキャン防止)。
message string "" メッセージ本文の部分一致検索。user_name との OR ではなく AND 条件 (両方指定すると絞り込まれる)。
page integer 1 No ページ番号 (1 始まり)。1 ページあたり 50 件固定。
1 未満の値 (0, -1 等) や非数値文字列 (abc 等) は自動的に 1 に丸められる。 totalPages を超える値を指定した場合は空配列が返る。
sort string "desc" No asc (古い順) または desc (新しい順)。投稿日時 (created_at) でソート。
大文字・小文字を問わない (ASC / DESC / Desc 等も有効)。 上記以外の不正値はすべて desc 扱いになる。

user_namemessage はどちらか一方は必ず指定してください。両方空の場合、ヒット件数 0 の空結果が返ります。

レスポンス (成功時 HTTP 200)

JSON
{
  "status": "success",
  "data": {
    "messages": [
      {
        "id": "ChwKGkNKLXdyLW5zdDRNRENoWndSN2dDZXdBdw==",
        "video_id": "dQw4w9WgXcQ",
        "user_name": "Jane Doe",
        "message": "Great stream!",
        "amount_display": "\u00a5500",
        "amount_micros": 500000000,
        "currency": "JPY",
        "tier": 3,
        "created_at": "2026-04-10 14:30:15",
        "stream_title": "Morning broadcast #42",
        "stream_date": "2026-04-10"
      }
    ],
    "totalCount": 142,
    "totalPages": 3
  }
}

レスポンスフィールド: トップレベル

フィールド 説明
status string 成功時は "success"、エラー時は "error" を返す (エラー時は message フィールドも付属、下記「エラーレスポンス」参照)。
data object 検索結果データ。内訳は下記「data オブジェクト」参照。

data オブジェクト

フィールド 説明
messages array 検索にヒットしたスパチャの配列。各要素のフィールドは下記「data.messages 配列の各要素」参照。
totalCount integer 検索条件に合致する総件数 (全ページ合計)。
totalPages integer 総ページ数 (totalCount を 50 で割って切り上げた値)。

data.messages 配列の各要素

フィールド 説明
id string YouTube が発行するスパチャメッセージ ID
video_id string 紐付く YouTube 動画 ID
user_name string スパチャ投稿者の表示名
message string | null スパチャ本文。本文無しのスパチャ (金額だけのもの) の場合は null
amount_display string 金額表記文字列 (例: ¥10,000)
amount_micros integer マイクロ単位金額 (例: 500 円 → 500000000)
currency string 通貨コード (JPY / USD 等)
tier integer YouTube API 仕様の重要度・色 Tier
created_at string スパチャ投稿日時 (YYYY-MM-DD HH:MM:SS 形式)
stream_title string | null 紐付く配信のタイトル。通常は非 null だが、紐付く配信データが見つからない場合は null になる可能性がある。
stream_date string | null 紐付く配信の配信日 (YYYY-MM-DD 形式)。同上。

エラーレスポンス

サーバー内部でエラーが発生した場合、HTTP 500 と共に以下の形式の JSON を返します。

JSON
{
  "status": "error",
  "message": "Internal Server Error"
}

レート制限超過時は HTTP 429 が返ります (こちらはボディなし)。

使用例

Bash (curl)
curl "https://bistan-tool.com/api/super_chat.php?user_name=Jane&page=1&sort=desc"
JavaScript (fetch)
const params = new URLSearchParams({
    user_name: "Jane",
    page: "1",
    sort: "desc",
});

const res = await fetch(`https://bistan-tool.com/api/super_chat.php?${params}`);
const json = await res.json();

if (json.status === "success") {
    console.log(`${json.data.totalCount} 件ヒット`);
    for (const msg of json.data.messages) {
        console.log(`[${msg.stream_date}] ${msg.user_name}: ${msg.message}`);
    }
}
Python (requests)
import requests

res = requests.get(
    "https://bistan-tool.com/api/super_chat.php",
    params={"user_name": "Jane", "page": 1, "sort": "desc"},
)
res.raise_for_status()
body = res.json()

if body["status"] == "success":
    print(f'{body["data"]["totalCount"]} 件ヒット')
    for msg in body["data"]["messages"]:
        print(f'[{msg["stream_date"]}] {msg["user_name"]}: {msg["message"]}')

注意事項

  • user_namemessage の両方が空の場合は、全件スキャン防止のため空結果が返ります。
  • 配信開始当初にメンバーシップ限定配信だった配信のスパチャは収集対象外のため、本 API からは取得できません。
  • 本 API は 30 リクエスト / 5 秒 / IP のレート制限が設定されています。超過時は HTTP 429 が返ります (運用状況に応じて値を変更する場合があります)。
  • stream_title / stream_date は通常は非 null ですが、紐付く配信データが見つからない場合は null になる可能性があります。
  • CORS について
    ブラウザ文脈において任意オリジンからのクロスオリジンアクセスを許可しています (Access-Control-Allow-Origin: *)。curl や Python スクリプト、サーバー間通信など非ブラウザクライアントは、そもそもブラウザの同一オリジンポリシーの対象外のため、CORS 設定の有無に関係なく利用可能です。