まめ畑

ゆるゆると書いていきます

ニコニコ動画が機能拡張したみたい

昨日のメンテ時にプレイヤーのバージョンアップがあり、@ボタンが実装されたようです。また、@ボタンと@ピザ以外の@付きコメントは除去されるようになりました。
@ボタンが使えるのは再生数が3000以上で、@ボタン可と表示されているものです。
また、ニコスクリプト関係でコメントが流れてしまっていたので通常コメントとニコスク関係を別にしたそうです。
そこで、@ボタンはどのようになっているかを見てみました。
あと、この昨日は今日以降改良されていくそうです。
とりあえず、プレミアムだけになります。

先ずは@ボタンについて

これを見れば一発解決ですね。
D

では、メッセージはどうなってるか

今までもニコニコと会話をする方法は書いてきましたので、変更点だけ。
このボタン押された回数が描画され、自分でクリックするとカウントアップされます。
これはメッセージサーバに問合せてプレイヤーで処理をしています。

送られるメッセージは

<packet><thread click_revision="0" user_id="ID" res_from="-250" version="20061206" thread="APIでゲットしたNo" /><thread click_revision="0" user_id="ID" res_from="-125" version="20061206" thread="ここは解説します" /></packet>

こうなりました。
このメッセージはコメント取得メッセージの後に同じメッセージサーバに送られています。
getapiのレスポンスも変更されていて、@ボタンが使える動画にはthread_id以外にnicos_isといパラメータが追加されています。
この番号を2つ目のthreadのところに入れます。

そうすると

<?xml version="1.0" encoding="UTF-8"?><packet><thread resultcode="2" server_time="1213884265" thread="0"/></packet>

こんなんが返ってきます。
んー、これは関係なさそうですね。

さて、ボタンはどこで制御されてるかというと、普通にコメントを取得するメッセージのレスポンスに入っています。
抜粋します。

<packet>
<thread click_revision="138303" last_res="19339" resultcode="0" revision="24" server_time="1213883882" thread="1213771340" ticket="No"/>
<view_counter id="sm3692524" mylist="161" video="53811"/>
<chat anonymity="1" date="1213883770" mail="184" no="19240" thread="1213771340" user_id="ID" vpos="8119">kooo</chat>
<chat anonymity="1" date="1213883771" mail="184 is_button" no="19241" thread="1213771340" user_id="ID" vpos="9473">とりあえず押してみるお
<num_click count="9" no="19241" thread="1213771340"/>
</packet>

簡単ですね。
mailにis_buttonがある動画に関してはchatのブロックが終了した後に、クリック数のブロックが続くという仕様です。
コメントとクリック数はnum要素で関連付けされています。
@ボタンなんてしなくても、mail欄にis_butttonと書けばボタンになります。

ただ、ボタン弾幕が張られると重くなります。
描画に加えて、クリック数の処理が走ります。
コメントから一個ずつ検索をしている実装でした。

おまけ1

ニコニコと会話をしてこんな事を話してくれました。

<thread click_revision="0" user_id="ID" res_from="-125" version="20061206" thread="nicos_id" />

を送ったら。

<packet>
<thread last_res="230" resultcode="0" revision="5" server_time="1213883600" thread="1213847083" ticket="No"/>
<view_counter id="sm3692524" mylist="160" video="53271"/>
<chat anonymity="1" date="1213855452" deleted="1" mail="184" no="111" thread="1213847083" user_id="ID" vpos="9702">@ピザ</chat>
<chat anonymity="1" date="1213855457" deleted="1" mail="184" no="112" thread="1213847083" user_id="ID" vpos="8732">@ピザ</chat>
<chat anonymity="1" date="1213855463" deleted="1" mail="184" no="113" thread="1213847083" user_id="ID" vpos="7999">@ピザ</chat>

永遠と@ピザ祭り。
でも。deleteが1って事は削除されてるのか?
もしかして、@ピザだけ隔離して保存してるって事か?
これでニコスクとコメントの分離をしているのかな?

ちなみに@ボタンはコメント欄では[]がついています。
でも、一気に2つのメッセージ送るのと違うメッセージって、送り方悪かったかな?

おまけ2

カウント数の送り方
こんな感じでボタンを押した回数を送っていました。
http://www.nicovideo.jp/api/getclickkey?thread=スレッドNo&num_res=コメント数&click_revision=数字列(多分取得出来る)
ここにアクセスするとカウントするための鍵が表示されます。

これを使って、メッセージサーバにアクセスします。
こちらはPOST。
bodyは

<packet>
<click clickkey="鍵" user_id="ID" no="押したボタンのコメント番号" thread="1213771340" />
<thread click_revision="160588" user_id="ID" res_from="押したボタンのコメント番号" version="20061206" thread="1213771340" />
<thread click_revision="0" user_id="ID" res_from="不明" version="20061206" thread="1213847083" />
</packet>

です。
ただ、1回押すと。
Key取得→上記のメッセージ発行→Key取得→メッセージ発行
な事をやっています。
もしくは、
上記のメッセージ発行→Key取得→メッセージ発行

click_revisionが変わっていますが。
これって、前回のKeyが残っていて再度発行している感じでしょうか。

まとめ

こんな感じで機能拡張されています。
基本的にはサーバでやっている感じですね。
プレイヤーは指示に従うだけ。