【NicoLivePeeper】 ただの立ち見ツールではありません

2011年7月9日より使用不可になり、現在はダウンロード出来ません。

一般的には立ち見ツールとして有名な NicoLivePeeper だが、NCVnwhois よりも優れた機能がある。

はるさんの制作ツールはここを参照
アクセス不可:http://groups.google.co.jp/group/nwhois/web/

【ニコニコミュニティ】はるxxxxの開発室

立ち見のコメントをツールで見るには、2010年10月現在NCVかアンコちゃんが便利。

NCVを配布しているコミュニティー
【ニコニコミュニティ】プログラムの勉強をする
アンコちゃんを配布しているコミュニティー
【ニコニコミュニティ】カラオケ居酒屋「めがね」

ブラウザで立ち見コメントが見られる:ニコ生コメントビューワ(仮)

特徴


  1. アリーナ、立ち見コメント双方に切り替え可能
    (但し公式放送で1F、2Fがある放送は切り替えられない)
    チャンネル生放送と公式生放送は 【ニコ生】 チャンネル生放送のコメントサーバーの仕様について を参照
  2. コメントサーバーのみに接続しているので追い出されない
  3. コメントは出来ないROM専ツール
  4. 一度に全コメント取得(公式生放送は除く)
  5. 共有ブラウザはIE Chrome Firefox Opera
  6. アカウント指定でのログインは出来ない
  7. コメントxmlとチケットxmlで保存可能
  8. チケットxml保存は容量を抑えられる
  9. 参加してないコミュ限放送でもコメントを取得
  10. 放送が運営削除されてなければチケットxmlで全放送の過去コメント取得
  11. 過去コメント取得は以下にあるAddress、Port、Threadを書き換える
  12. 満席になって放送に入れなくてもAddress、Port、Threadからコメント取得

チケットxmlとは放送の基本情報のみのデータ
以下はユーザー生放送やチャンネル放送のチケットxmlの例
<?xml version="1.0"?>
<LiveTicket xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
 <LiveId>lv***</LiveId>
 <CommunityId>co***</CommunityId>
 <StartTime>2010-04-01T00:00:00</StartTime>
 <LocalStartTime>2010-04-01T00:00:00.0000000</LocalStartTime>
 <RoomLabel>co***</RoomLabel>
 <Address>msg10*.live.nicovideo.jp</Address>
 <Port>28**</Port>
 <Thread>***</Thread>
 <LiveName>放送タイトル</LiveName>
 <CommunityName>放送コミュニティー名</CommunityName>
 <Caster>放送者名</Caster>
</LiveTicket>


プレミアム会員だとタイムシフトで過去の放送を見ることが出来るが、全ての放送を見るのは時間的に無理なので全てのコメントを取得して放送内容を知ることが出来、タイムシフトを見るか見ないかの判断に使える。

過去ログ管理をチケットxmlで管理するか、nwhois のデータ管理でするかはどちらでもいいが、容量を小さく共有等を考えてるならチケットxmlの方が汎用性がある。

タイムシフト不可にしてある放送はそのままではコメントを取得できないので、前後の放送からapiを叩く若しくはコメントを取得してAddress、Port、Threadを類推する。

以下lvから類推方法。
この方法でタイムシフト視聴可能な期間プレミアム会員は過去コメントを拾うことが出来る。(チャンネルと公式生放送は除く)

チャンネルと公式はこちらを参照:【ニコ生】 チャンネル生放送のコメントサーバーの仕様について

2015年4月9日以降の仕様


アドレスについて


以前と同様に 10放送ごとにアドレス番号が増えるが、105 が追加されたことにより計算しやすくなった。105 の次は 101 でループする。
十の位が 0 と 5 のとき:msg101.live.nicovideo.jp
十の位が 1 と 6 のとき:msg102.live.nicovideo.jp
十の位が 2 と 7 のとき:msg103.live.nicovideo.jp
十の位が 3 と 8 のとき:msg104.live.nicovideo.jp
十の位が 4 と 9 のとき:msg105.live.nicovideo.jp

ポート番号について


以前と同様に一の位の放送番号 0 を基準に 1放送増えるごとに 2805 から 2814 まで 1 づつ増えるが、今回の仕様変更である msg105 だけこの法則から外れて 2845 から 2854 までに変更された。

スレッドについて


座席位置が 1 つずれるごとに 1 増える。さらにコミュニティレベルによって立ち見席の数が異なるのでそれも考慮して前後の放送からスレッドを計算することも出来る。

立ち見席の発生コミュニティレベル
アリーナ 1~
立ち見A 1~
立ち見B 50~
立ち見C 70~
立ち見D 105~
立ち見E 150~
立ち見F 190~
立ち見G 220~
立ち見H 256~
立ち見I 256~

例外


以前と同じようにこれらの法則はアリーナ席限定でそれ以外の立ち見席の場合で例外が発生する。アリーナから立ち見や、立ち見席から別の立ち見席に移動するにはポート番号とスレッドが移動した分 *1 増える。さらに、ポート番号が 2814 から 2845 に上がるときと、2854 から 2805 に戻るときもアドレスが 1 増える

ポート番号が 2814 から 2845 に上がるのは msg104 限定で、ポート番号が 2845 から 2854 の間になるのはmsg105 限定である。

アリーナ席のコメントサーバ情報の一覧はこちらを参照。
4月9日コメントサーバー仕様変更画像:mankitsuのブロマガ - ブロマガ


2015年4月9日以前の仕様


  • Addressはユーザー生放送は msg10*.live.nicovideo.jp、チャンネル放送と公式生放送は omsg10*.live.nicovideo.jpとなっていて、ユーザー生放送は下1桁を消して4で割って余りを求める。つまりlvが10増えるごとに1増えて101から104までをループする
    • 余り0で 101
    • 余り1で 102
    • 余り2で 103
    • 余り3で 104

    例えば暗黒放送Rのlv12843283で確認してみると
    1284328/4=321082 余り0 つまり101になる

  • Portは下1桁が0の場合は 2805 になり、lvが1増えるごとに Port が1増えて 2805 から 2814 までをループする。つまりlv下1桁にプラス5がPortの下二桁になる

    例えば暗黒放送Rのlv12843283で確認してみると
    3+5=8 つまり2808になる

    しかしここで例外があり、立ち見がでるとアリーナの Port に1を足した数字が立ち見の Port になる。つまり次の番組の Port とこの番組の立ち見の Port が一致する。さらに2814から2805になると Address が1増える

  • Thread はコミュレベル17と18を境にプラス値が変わる 2010/3/27以降仕様が変わってので注意
    コミュレベル18以上は同時視聴可能人数500人を超えて立ち見可能な視聴者数になるので Thread が2増え、17以下はThread が1増える。そして立ち見が増える度に Thread が1増える。

    http://dic.nicovideo.jp/a/ユーザー生放送から

    座席・同時視聴可能人数

    最大同時視聴可人数(放送コミュのレベル-1)×29人+25人

    例:コミュニティレベル15の場合、 (15-1)×29+25431人

     


    計算してみると
    (17-1)x29+25=489<500<(18-1)x29+25=518
    となり17と18で500の境になる

    ここでもPortの時と同様に立ち見が生じると立ち見コメントはアリーナのThreadにプラス1が加算される

    Threadはlvからの逆算は難しいと思う。出来たとしても全番組のコミュレベルと公式生放送、ユーザー生放送、チャンネル放送を拾いながら、且つ削除された放送も加味して計算することになる。ただしパソコンを常時起動(レンタル鯖を借りるなりして)してニコ生を監視しているなら不可能ではない


追記 2010/3/27
【ニコニコ生放送】Twitter対応と全番組1000人対応
コミュレベルに関係なく65レベル以下は1000席、つまり全ての65レベル未満のユーザー生放送で1000人が同時視聴できるようになったので放送ごとにThreadがプラス2になる。
【ニコ動】 コミュニティ特権追加&レベル上限引き上げ

追記 2010/06/26
木曜日のメンテナンスでコメントサーバーの仕様が変わり公式生放送以外でコメントが取得できなくなり、チケットも公式生放送しか読み込まなくなる。

http://twitter.com/kawango/status/16926717734

今日のニコ生のアップデート地味だけど、超重要で、NG処理がクライアント側からサーバ側になった。これでクライアント動作はとても軽くなるし、要望の多いNG数も増やせるし、ユーザ間のNG共有も将来的には可能になる。via web



追記 2010/08/08
NicoLivePeeperが使えなくなったけど、その前身であるOpenCommentViewer(OCV)が使えたので追記。ソースコードも公開されている。
http://code.google.com/p/niconama-ocv/

私の環境だとocv ver1.0.1がコメント取得、過去コメント取得、チケットから過去コメント取得、コメント、チケット保存ができるのでそれを使用している。ただし立見席とアリーナの切り替えは手動で書き換える。さらにログインにOperaが使えない。
http://code.google.com/p/niconama-ocv/downloads/list

ユーザー生放送が最大で2000席になり立ち見のコメント取得には、それぞれアリーナからPortとThreadに1を加えることで取得できる。Threadはユニークなので他の番組と数値が被ることはない。

持っている過去のチケットは2010/04/24(土)のlv15643989_暗黒放送R 渋谷生うた会場潜入放送 立ち見(Thread1021938792)以前は読み込めず、2010/04/25(日) のlv15725254_【ニコニコ大百科開発・生主記事の分離】グニャラくんのグニャグニャ生放送(自宅) Part.459(Thread1022101348)以降のユーザー生放送は読み込める。24日と25日かThread102200000が分岐点かも。

追記 2010/08/22
Threadは立ち見Cまであるような放送だと連番にならない可能性がある。コメントが発生した順にThreadを割り振っているから?
勘違いだった。ちゃんと連番になっている。

追記 2010/08/31
無料の公式生放送のAddress、Port、Threadは規則性があった。以前の公式生放送のThreadは座席によって飛び飛びだったのに確認してみるとそうでなくなっていた。この仕様だとビューワ作る人には朗報だ。

追記 2010/09/03
【ニコ生】 出遅れても大丈夫 公式放送のアリーナのコメントを見る方法

追記 2010/09/26
【ニコ生】 エア放送バンを見抜く方法

追記 2010/10/05
ニコニココメントサーバーにおけるメモリ使用量増大問題の調査と対策
http://info.dwango.co.jp/rd/2010/10/post-3.html

追記 2010/10/30
ニコニコ動画(原宿)を使用するとOpenCommentViewerでログイン出来ない。(9)を使用するとログイン出来る。必要と思えるコメントは一度チケットからコメントを取得しておいたほうがよい。

原宿、9の切り替え
https://secure.nicovideo.jp/secure/change_classic

追記 2010/11/25
公式生放送の過去ログはライブなら取得時点から過去1000コメントから、チケットの場合は最後のコメントから1000コメントしか取得できなくなった。
【ニコ動】 今日のメンテ 公式コメント鯖に仕様変更あり

追記 2011/01/15 IPも明記した
msg101202.248.110.150
msg102202.248.110.151
msg103202.248.110.152
msg104202.248.110.153
omsg101202.248.110.184
omsg102202.248.110.185
omsg103202.248.110.186
omsg104202.248.110.187


追記 2011/01/23
【nxml2merge】 ニコニコ動画のコメントを連結する
こちらの方が便利:NicomentXenoglossia

追記 2011/02/01
放送順にThreadが振られていない例外を発見。推測だが予約枠で放送開始時点で混んでいるとThreadの順番がずれるのかもしれない。順番がおかしいのは予約枠のlv38997557とlv38997558。Threadがlv38997558が前でlv38997557が後になっている。

追記 2011/07/09
さよなら(9)バージョン(原宿)に統合され書き換えないと使用不可になった。

追記 2011/09/03
【ニコ生】 チャンネル生放送のコメントサーバーの仕様について

追記 2014/06/20
2014年6月19日のメンテナンスで高レベルのコミュニティに非公式に座席数が増えたが詳細は不明。

追記 2015/04/10
2015年4月9日のメンテナンスにより、仕様が一部変更になったので追記した。
関連記事

コメント

-

No title
立ち見ツールを作ってみようと思っていたので、とても参考になりました。

>ニコニコ動画(原宿)を使用するとOpenCommentViewerでログイン出来ない。
とのことで、ocvのソースを見たのですが、xmlファイルを編集することで仕様変更に対応できるようとても丁寧に設計されてます。
ApiSettings.xmlを下記のように変更することで原宿でもログインすることが出来ます。(1.0.6で試しました)

<MyAccountPremiumRegPattern>vars+Users+=s+{s+id:s+d+,s+isPremium:s+true</MyAccountPremiumRegPattern>
<MyAccountNameRegPattern><strong style="font-size:16px; line-height:1;">([^<>]+)</strong> さん</MyAccountNameRegPattern>

<MyAccountPremiumRegPattern>vars+Users+=s+{s+id:s+d+,s+age:s+d+,s+isPremium:s+true</MyAccountPremiumRegPattern>
<MyAccountNameRegPattern>vars+nicknames+=s+"(.+)";</MyAccountNameRegPattern>

これでコメントを取得できるようになるのですが、ocvは運営NGコメントがありコメ番が飛んでいる状況に対応しておらず、運営NGコメがあるとエラーを吐いてしまい、修正するにはソースを書き換えてビルドする必要があります。
具体的にはNicoApiSharpStreamingChatReceiver.csを下記のように修正してビルドするとうまくいきました。
ついでにNicoApiSharpApiSettings.csの上記該当部分をソースから書き換えてしまえばわざわざApiSettings.xmlを編集しなくて済みます。
参考までにどうぞ。

public static Chat[] ReceiveAllLog(IMessageServerStatus data, System.Net.CookieContainer cookies, int userId)
{
Chat[] results = null;
DateTime when = DateTime.Now;

while (true) {
Chat[] chats = ReceiveLog(data, cookies, userId, when, -1000);
if (0 < chats.Length && results == null) {
results = new Chat[chats[chats.Length - 1].No];
}

for (int i = 0; i < chats.Length; i++) {
results[chats[0].No + i - 1] = chats[i];
}

if (chats.Length != 0) {
if (1 < chats[0].No) {
when = chats[0].Date;
} else {
break;
}
} else {
break;
}

}

return results;
}



public static Chat[] ReceiveAllLog(IMessageServerStatus data, System.Net.CookieContainer cookies, int userId)
{
List<Chat> results = null;
DateTime when = DateTime.Now;

while (true) {
Chat[] chats = ReceiveLog(data, cookies, userId, when, -1000);
if (0 < chats.Length && results == null) {
results = new List<Chat>(chats[chats.Length - 1].No);
}

for (int i = 0; i < chats.Length; i++) {
results.Insert(i, chats[i]);
}

if (chats.Length != 0) {
if (1 < chats[0].No) {
when = chats[0].Date;
}
else {
break;
}
}
else {
break;
}

}

return results == null ? null : results.ToArray();
}

ロベルト

Re: No title
コメントありがとうございます。

今は自分のPCでビルドできる環境にないのですが情報ありがとうございました。

-

No title
ロベルトさん

最近パソコンやAndroidのアプリを作ってます!
よかったら、覗いて見てください☆

http://reves-phantasm.com
非公開コメント

プロフィール

ロベルト

お問い合わせはこちらまで
robelt2525[at]gmail.com

中の人 @nico_lab

広告リンク
Amazon
楽天市場

ブログ更新用 @blo_nico_lab

詳しいプロフィールはこちら

当ブログは、Amazonアソシエイトに参加しています。