ビスたん配信一覧API リファレンス

スパチャデータが保存されている配信の一覧をページネーション付きで取得する公開 API です。 配信日 (stream_date) 順にソートされます。

配信開始当初にメンバーシップ限定配信だった配信は本 API のレスポンスから除外されます。

エンドポイント概要

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

クエリパラメータ

名前 既定値 必須 説明
page integer 1 No ページ番号 (1 始まり)。1 ページあたり 20 件固定。
1 未満の値 (0, -1 等) や非数値文字列 (abc 等) は自動的に 1 に丸められる。 totalPages を超える値を指定した場合は空配列が返る。
sort string "desc" No asc (古い順) または desc (新しい順)。配信日 (stream_date) でソート。
大文字・小文字を問わない (ASC / DESC / Desc 等も有効)。 上記以外の不正値はすべて desc 扱いになる。

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

JSON
{
  "status": "success",
  "data": {
    "streams": [
      {
        "video_id": "dQw4w9WgXcQ",
        "nth_time": "\u7b2c42\u56de",
        "title": "Morning broadcast #42",
        "scheduled_start_time": "2026-04-10 12:00:00",
        "is_members_only": 0,
        "stream_date": "2026-04-10"
      }
    ],
    "totalCount": 247,
    "totalPages": 13
  }
}

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

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

data オブジェクト

フィールド 説明
streams array スパチャ保存済み配信の配列。各要素のフィールドは下記「data.streams 配列の各要素」参照。
totalCount integer メンバーシップ限定配信を除いた総件数 (全ページ合計)。
totalPages integer 総ページ数 (totalCount を 20 で割って切り上げた値)。

data.streams 配列の各要素

フィールド 説明
video_id string YouTube 動画 ID
nth_time string | null 「第 n 回」等の便宜的な回数表記 (ソート非依存)。タイトルから自動抽出、該当なしの場合は null
title string | null 配信タイトル
scheduled_start_time string | null 配信予定時刻 (YYYY-MM-DD HH:MM:SS 形式)。2026/02/27 以前に登録された過去配信では null の場合あり。
is_members_only integer 常に 0。本公開 API は、配信開始当初に非メンバー限定配信だった配信のみを対象とするため、この値が 1 になることはない。
stream_date string 配信日 (YYYY-MM-DD 形式)

エラーレスポンス

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

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

使用例

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

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

if (json.status === "success") {
    console.log(`全 ${json.data.totalCount} 配信 / ${json.data.totalPages} ページ`);
    for (const stream of json.data.streams) {
        console.log(`[${stream.stream_date}] ${stream.title} (${stream.video_id})`);
    }
}
Python (requests)
import requests

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

if body["status"] == "success":
    print(f'全 {body["data"]["totalCount"]} 配信 / {body["data"]["totalPages"]} ページ')
    for stream in body["data"]["streams"]:
        print(f'[{stream["stream_date"]}] {stream["title"]} ({stream["video_id"]})')

注意事項

  • 配信開始当初にメンバーシップ限定配信だった配信はレスポンスにも totalCount にも含まれません。
  • 配信開始当初にメンバーシップ限定配信だった配信のスパチャは収集対象外のため、ビスたん配信スパチャ検索API からも取得できません。
  • nth_time / title / scheduled_start_time は過去に登録された配信では null の場合があります。
  • 本 API にはレート制限は設定されていません (運用状況に応じて将来追加する場合があります)。
  • CORS について
    ブラウザ文脈において任意オリジンからのクロスオリジンアクセスを許可しています (Access-Control-Allow-Origin: *)。curl や Python スクリプト、サーバー間通信など非ブラウザクライアントは、そもそもブラウザの同一オリジンポリシーの対象外のため、CORS 設定の有無に関係なく利用可能です。