実験放送の構成 - コメントサーバー編

本ページの内容

本ページでは、実験放送のコメントサーバの対応プロトコルについて解説します。

主に、以下のような方を対象としています。

  • ニコニコ生放送で利用されるコメビュ等のツール制作者の方々

注意点

本ページの情報は、様々な理由により、変更される可能性があります。

実験放送のコメントサーバーの特徴

  • 実験放送のコメントサーバーは一つのスレッドにアクセスが集中しても、コメントの配信を行えるように構成されています。

  • 内部の処理順が前後することで、配信順序が不定になることがあります。コメント投稿時刻やコメントID等の情報を利用して、クライアント側で処理をする必要があります。

  • ソフトウェア更新などの理由により、サーバーから切断されることもありますが、通常の状況では再接続で復帰が可能です。

  • ニコニコ動画のコメントサーバーは2015年8月から移行を開始し、2016年10月以降は本コメントサーバーのみで運用されています。

プロトコル

コメントサーバーでは下表のプロトコルをサポートしています。

XMLSocketでは圧縮や経路暗号がサポートされておらず、WebSocketでの接続を推奨しております。

複数命令については、後程例を交えて解説します。

プロトコル メソッド リクエストフォーマット レスポンスフォーマット 圧縮 経路暗号 複数命令
HTTP, HTTPS GET クエリーパラメーター XML又はJSON 対応 対応 非対応
HTTP, HTTPS POST XML又はJSON XML又はJSON 対応 対応 対応
WebSocket - JSON JSON 対応 対応 対応
XMLSocket - XML XML 非対応 非対応 対応

アクセス例

HTTP, HTTPS GETでのアクセス例

ニコニコ動画のコメントをHTTP GETにより、XML、JSON形式でそれぞれ取得する例です。

URLのパスの1つ目により、応答フォーマットを指定します。

$ curl "http://nmsg.nicovideo.jp/api/thread?version=20061206&thread=1204908901"
$ curl "http://nmsg.nicovideo.jp/api.json/thread?version=20061206&thread=1204908901"

HTTP, HTTPS POSTでのアクセス例

ニコニコ動画のコメントをHTTP POSTにより、XML、JSON形式でそれぞれ取得する例です。

$ curl --data "<thread version='20061206' thread='1204908901'/>" -H "Content-Type: application/xml" "http://nmsg.nicovideo.jp/api/"
$ curl --data '{"thread":{"version":20061206,"thread":"1204908901"}}' -H "Content-Type: application/json" "http://nmsg.nicovideo.jp/api.json/"

WebSocketでのアクセス例

実験放送のコメントをWebSocketにより、取得する例です。

最初の応答のthreadにより購読の成功を確認できます。

接続は維持されており、新規コメントが投稿されるとサーバーから送信されてきます。

途中の経路で無通信による切断が行われる可能性があるため、定期的にPINGフレームや空のテキストフレームを送信したりすることで、スレッド購読中であれば接続を維持することが可能です。

$ wsdump -s "msg.nicovideo.jp#json" -t  '{"thread":{"version":20061206,"thread":"NXlv315303232","service":"LIVE"}}' "ws://nmsg.nicovideo.jp:2580/websocket"
Press Ctrl+C to quit

< {"thread": {"resultcode": 0, "thread": "NXlv315303232", "service": "LIVE", "server_time": 1535627056, "last_res": 711, "ticket": "0x1b93b447", "revision": 1}}
< {"chat": {"thread": "NXlv315303232", "no": 712, "vpos": 385700, "date": 1535627057, "date_usec": 974542, "premium": 2, "anonymity": 1, "user_id": "sy5SJPxX5uj_hLNJgBtIMDxr9hw", "mail": "184", "service": "LIVE", "content": "\/disconnect"}}

XMLSocketでのアクセス例

実験放送のコメントをXMLSocketにより、取得する例です。

接続は維持されており、新規コメントが投稿されるとサーバーから送信されてきます。

$ (echo -en "<thread version='20061206' thread='NXlv315303232'/>\x00" ; sleep 100) | nc nmsg.nicovideo.jp 2805

複数命令の利用例

JSON, XMLのフォーマットでは、それぞれarrayとpacket要素で包むことにより、APIを一度にアクセスすることが可能です。

$ wsdump -s "msg.nicovideo.jp#json" -t  '[{"thread":{"version":20061206,"thread":"NXlv315303232","service":"LIVE"}},{"thread":{"version":20061206,"thread":"NXlv315303232x","service":"LIVE"}}]' "ws://nmsg.nicovideo.jp:2580/websocket"
$ (echo -en "<packet><thread version='20061206' thread='NXlv315303232'/><thread version='20061206' thread='NXlv315303232x'/></packet>\x00" ; sleep 100) | nc nmsg.nicovideo.jp 2805

実験放送のコメントサーバーのポート説明

実験放送コメントサーバの接続先は下表のようになっております。

汎用ポートとは、serviceを指定する必要のあるもので、WebSocketのアクセス例を参考にしてください。

ポート 用途
80 ニコニコ動画向け HTTP, WebSocket
443 ニコニコ動画向け HTTPS, WebSocket with SSL
2580 汎用 HTTP, WebSocket
2543 汎用 HTTPS, WebSocket with SSL
2580 実験放送向け XMLSocket

フォーマット対応

コメントサーバーはクエリーパラメーター、XML、JSONをサポートしていますが、フォーマットを変更する場合の対応については下表のようになっております。

無名パラメーターとは、コメント内容等で利用されている値です

名称 クエリーパラメーター XML JSON
API名称 URLのpathの2つ目 XML要素名 objectのname
通常パラメーター クエリーパラメーター XML属性 内部のobject
無名パラメーター bodyパラメーターとして取り扱う TEXT要素 contentパラメーターとして取り扱う
複数API 非対応 packet要素で包む arrayで包む