ニコ生のコメントサーバーに接続したりするためのライブラリ作った

ニコ生のコメントサーバに接続したりするためのライブラリをJavaScriptで書きました.npmで利用できます.

github.com

ニコ生デスクトップクライアント(GitHub - tsuwatch/nicomentron: Desktop client for ニコニコ生放送(live.nicovideo.jp) made of Electron)を作っていて、その副産物です。とにかくニコ生デスクトップクライアントを作るために作ってるので、ガッと実装していて色々怪しいところもあったり、ドキュメントもまだ書いてないんですが、そのうちちゃんとやります。

現状こんな感じで使える。

import nicolive from 'nicolive-api'

nicolive.login('foo@bar.com', 'xxx').then(client => {
  client.connectLive('lvxxxx').then(manager => {
    manager.viewer.connection.on('comment', (comment => {
      console.log(comment.text);
    }));
    manager.viewer.connection.on('ejected', () => {
      console.log('追い出されました');
      manager.disconnect();
    });
  });

  client.connectAlert().then(viewer => {
    viewer.connection.on('handshaked', () => {
      console.log('handshaked');
    });
    viewer.connection.on('notify', (info => {
      console.log(info.contentId);
    }));
  });
});

使えるAPI

  • 生放送情報取得
  • コミュニティ、チャンネル情報取得
  • ユーザー情報取得
  • ニコ生アラート

コメントサーバーの仕様について

全部屋に接続して、全部屋のコメントを取得します。

ウェブ上にある情報やOSSなどを見てコメントサーバについて少し解説すると(もちろんあってるかかどうかはわからない)、まず、メッセージサーバ群が存在します( https://github.com/tsuwatch/nicolive-api/blob/56d8e36b2800d909dcb5e71cd107b2e0aac5e692/src/MessageServer.js#L2-L23

) こんな感じで、ドメイン名とポート群があり、ここから対象の放送のメッセージサーバを探索します。

getplayerstatus というAPIが存在するので、そこから自分が接続しているサーバを確認します。メッセージサーバは順番を持っていて、他の部屋のメッセージサーバは、自分が接続したメッセージサーバの前後に存在している。例えば立ち見Aに接続した場合、アリーナサーバは1つ前のドメイン名とポート番号に存在している。接続するにはスレッド番号も必要なので、自分が今接続しているスレッド番号に-1すれば良い。こういう感じで前後のメッセージサーバを探索していける。

スレッド番号は、放送が開始された段階でまとめて部屋分確保されるので、単純にプラスマイナスすれば良い。コミュニティレベルに応じて、そのコミュニティが可能な部屋数の最大までスレッドが確保されている。チャンネルも固定で500人×6部屋の3000人分確保されている。しかし問題なのが、自動増席システムです。チャンネルは、満員になると自動的に席が追加されます(立ち見席と表記される)。この席はもちろん、一番うしろのメッセージサーバの次のメッセージサーバであることはわかるんですが、スレッド番号が特定できません。なぜなら一気に確保していませんし、裏では常に他の放送のスレッドを確保しているからです(おそらく)。

なので、立ち見席には対応できていません。立ち見席に接続した場合は、立ち見席しか取得できないようになっています。世のコメビュはなぜか対応できているやつもあるっぽいんですが、謎です。教えてください。

そういえば、ニコニコ生放送は新配信に移行するようです。新配信では満員という概念がなくなるようで、自動増席がバンバンされるということですね。現状確認したところ、コミュニティレベルに応じてスレッドを一気に確保するというシステムは現状変わっていないようなので、それ以降に自動増席がされるようです。

こんな感じです。みなさん、これで最強のコメントビューアが作れますね。

参考

【7/13更新】新配信番組のタイムシフト画質を改善|ニコニコインフォ

ニコ生の公式とチャンネルのコメントサーバの仕様について | ニコラボ

GitHub - honishi/Hakumai: niconama comment viewer alternative for mac os x.