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