ニコ厨の「足あと」を捕捉する方法(IE限定)

Sleipnirでニコ動の動画をダウンロードするためのuserActionスクリプトを書いていたところ、ニコ動のflvプレーヤーを利用して、勝手にニコ動のアカウントで、訪問者の足あと(ニックネーム、ユーザーID、プレミアム会員か否か)を取ることが出来るのを発見。
但し訪問者がIE系ブラウザを使用していて、スクリプトONで、ニコ動にログイン状態である場合限定。(制約多いな)
手順としては、自分のサイトにニコ動のflvプレーヤーを埋め込み、その内部変数に格納されているニックネーム名やユーザーIDをGetVariable()メソッドで取得し、サーバーに流す、という流れ。ニコ動のプレーヤーの内部変数をGetVariable()で取得する方法については、ニコニコ動画をHackするときに使えそうな変数まとめ - We Ain't Seen Nothin' Yet.と、ニコニコ動画でプレイリストが使える Greasemonkey スクリプト - こたにき(こちらはニコ動の中の人のBlog)に詳しいので、そちらを参照すると良いかと。

ではもう少し詳しく説明。
まず、ニコ動のflvプレーヤーを埋め込むわけだが、埋め込む動画は削除されていなければなんでも良い。しかし埋め込む際には、外部プレーヤーでなく、ニコ動内部で使われている、フルサイズのプレーヤーを使用する。まぁ、内部プレーヤーと呼ぶことにしようか。外部プレーヤーではなく内部プレーヤーを使うのは、内部プレーヤーは読み込みと同時にサーバーからニックネーム名やユーザーIDなどの情報のダウンロードを開始してくれるため。外部プレーヤーはユーザーの手によって再生ボタンが押されるまで開始してくれないので使えない。

(まぁ外部プレーヤーも内部プレーヤーも、実は同一のものをthumbWatch?とかいう引数による指定でモードを変化させているだけのようなんだけれども。そのせいでやたらと外部プレーヤーが張り付けられたページは重い。)

埋め込み方の例:


<embed type="application/x-shockwave-flash" src="http://www.nicovideo.jp/swf/nicoplayer.swf?ts=1204834895" id="flvplayer" bgcolor="#FFFFFF" quality="high" allowscriptaccess="always" flashvars="v=sm2586636&deleted=0&mylist_counter=7&movie_type=flv&has_owner_thread=1&us=0&ad=web_pc_player_marquee&wv_id=sm2586636&wv_title=%E3%80%90%E9%9D%92%E7%89%88%E3%83%BB%E8%BB%BD%E9%87%8F%E3%80%91%E3%82%B3%E3%83%A1%E3%83%B3%E3%83%88%E7%B7%B4%E7%BF%92%EF%BC%86%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%83%86%E3%82%B9%E3%83%88%EF%BC%88SP1%EF%BC%89%E3%80%90120%E5%88%86%E3%80%91&wv_code=a5d853f4&wv_time=1205326654" height="1" width="1" />
で、内部プレーヤーがダウンロードしてきたた情報を、頃合いを見計らってGetVariable()メソッドで取得する。
簡単な例では、こんな感じか。


<script>
if(document.all){
window.onload = function(){
var timer = setInterval(function(){
try{
var userID = document.getElementById("flvplayer").GetVariable("UserID");
if(userID != "undefined" && userID != null){
clearInterval(timer);
var innerHTML = "userID:"+userID+"<br />";
innerHTML += "nickName:"+document.getElementById("flvplayer").GetVariable("o.nickname")+"<br />";
innerHTML += "isPremium:"+(document.getElementById("flvplayer").GetVariable("o.is_premium")==1).toString();
document.getElementById("label").innerHTML = innerHTML;
}
}
catch(e){}
},500);
}
}

</script>

まとめてみた例:http://adfrontica.sakura.ne.jp/lab/test.htm
ユーザーIDとニックネーム、プレミアム会員か否かを表示。
IEでしか動かない。ニコ動にログインしていなければ、ずっと「Now Loading..」の状態のままなので待ちぼうけに注意。

こいつにニックネームなどの情報をサーバーに送るscriptをつけ足せば、足あと機能が完成するだろう。

まーニコ動でニックネームを使う機会なんてほとんど無いから、足あととったところで役に立つこともないだろうけど(ぇ