コメントビューア用。
OAuthが要るようなAPIは使わず、未登録で取得できるコメントを取得。
あくまで執筆時点の情報です。仕様が変わる可能性もあるのであしからず。
ユーザのチャンネルURL
-
https://www.openrec.tv/live/{ユーザID}
- 例:
https://www.openrec.tv/live/pasta04
- 例:
手順
- ユーザIDを元に、動画IDを取得
-
GET
https://public.openrec.tv/external/api/v5/movies?channel_ids={ユーザID}&sort=onair_status&is_upload=false
-
レスポンス
{ /** 動画ID(文字列) */ "id": string, /** 動画ID(数値) */ "movie_id": number, /** 配信タイトル */ "title": string, /** 配信詳細 */ "introduction": string, /** 配信中ならtrue */ "is_live": boolean, // 残りは省略 }[]
新しいものが配列の先頭に来るので、先頭の要素をチェックし、is_liveをチェック。
- 動画IDを元に、コメント受信
-
以下で受信
wss://chat.openrec.tv/socket.io/?movieId={動画ID(数値)}&EIO=3&transport=websocket
EIOの意味は不明。
メッセージは、以下の形式で送られてくる。[数値][JSON]
-
例
0{"sid":"hogehogehoge","upgrades":[],"pingInterval":25000,"pingTimeout":60000}
数値の正確な意味は不明だが、以下のように思われる。
数値 意味 0 サーバから送られてくる初期データ。 2 クライアントからのping 3 サーバからのpong 40 0の直後に送られてくる。
この時はJSON部分が無いので切れ目の意図だろうか。42 コメント -
-
0
{ "sid": string, "upgrades": [], /** クライアントから投げるpingの間隔のミリ秒表記。25秒とか。 */ "pingInterval": number, /** タイムアウト判定される時間のミリ秒表記。60秒とか。 */ "pingTimeout": number }
-
42
["message", 以下のJSONを文字列化したもの]
{ /** * メッセージタイプ * - 0: コメント * - 1: 現在の視聴者数 * - 10: refreshが必要かとか */ "type": 0 | 1 | 10, /** 動画ID(数値)と同じ */ "room": string, /** 以下はtype0の時のもの */ "data": { /** 動画ID(数値)と同じ */ "movie_id": number, "live_type": number, "onair_status": number, "user_id": number, "openrec_user_id": number, /** ユーザ表示名 */ "user_name": string, /** コメント */ "message": string, /** アイコン画像のURL */ "user_icon": string, // 省略 } }
コメント受信をざっくり書くと以下になる。
- WebSocketで受信
- メッセージの数値部分が42なら処理続行
- JSON部分をパースして、typeを確認し、0なら処理続行
- dataから、コメントメッセージ、ユーザ名、アイコンURLを抽出
また、定期的にpingメッセージを送信する必要がある。
初期コメント
-
GET
https://public.openrec.tv/external/api/v5/movies/{動画ID(文字列)}/chats?to_created_at={時刻 ISO 8601}&is_including_system_message=false
-
レスポンス
{ "id": number, "chat_type": number, /** コメント */ "message": string, /** 配信者は2。一般ユーザが0? */ "quality_type": 0 | 2, /** 投稿時刻。ISO 8601 */ "posted_at": string, /** 表示時刻?ISO 8601 */ "messaged_at": string, /** ユーザ情報 */ "user": { /** ユーザID */ "id": string, /** OpenREC内部でのユーザID */ "openrec_user_id": number, /** 表示名 */ "nickname": string, /** アイコン画像のURL */ "icon_image_url": string, /** アイコン画像のURL。Lサイズ */ "l_icon_image_url": string, // 省略 }, // 省略 }[]