5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

OPENRECのチャット取得

Posted at

コメントビューア用。
OAuthが要るようなAPIは使わず、未登録で取得できるコメントを取得。
あくまで執筆時点の情報です。仕様が変わる可能性もあるのであしからず。

ユーザのチャンネルURL

  • https://www.openrec.tv/live/{ユーザID}
    • 例: https://www.openrec.tv/live/pasta04

手順

  1. ユーザ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をチェック。

  1. 動画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,
            // 省略
        },
        // 省略
    }[]
    
5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?