実験放送の構成 - コメントサーバー編
本ドキュメントの内容はすでに廃止されています。
2019年4月11日をもちまして、実験放送は終了いたしました。 ご意見・ご協力いただき、ありがとうございました。
本ドキュメントは参考のために残しておりますが、解説されているコメントサーバーはすでに使用終了しております。
本ページの内容
本ページでは、実験放送のコメントサーバの対応プロトコルについて解説します。
主に、以下のような方を対象としています。
- ニコニコ生放送で利用されるコメビュ等のツール制作者の方々
注意点
本ページの情報は、様々な理由により、変更される可能性があります。
実験放送のコメントサーバーの特徴
-
実験放送のコメントサーバーは一つのスレッドにアクセスが集中しても、コメントの配信を行えるように構成されています。
-
内部の処理順が前後することで、配信順序が不定になることがあります。コメント投稿時刻やコメント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で包む |