ニコニコ動画について調べたこと。
...のドット三連打は何らかの文字列(数値を含む)
まずHTMLを取得
GET /watch/sm... HTTP/1.1
恐らく http://res.nicovideo.jp/js/swfobject.js?4 の中で
SWFObjectを生成、それに変数をセットして、Flashを描画する。
これについてはHTML参照。一発で分かるかと。
パラメータ4を渡す意味はあるのだろうか・・・
diffを取ったらわかるんだろうけど、面倒だから取ってない。
Flashは GET /api/getflv?sm... HTTP/1.1 して、種種の情報を取得する。
実験的な結果では
・動画のURL (urlパラメータ)
・秒単位の動画の長さ (lパラメータ)
・通報用URL (linkパラメータ)
・コメントの取得URL (msパラメータ)
・コメントのスレッドID (thread_idパラメータ)
・ユーザID (user_idパラメータ)
・プレミアムか否か (is_premiumパラメータ)
・ユーザのニックネーム (nicknameパラメータ)
・日付? (timeパラメータ)
・処理完了通知? (doneパラメータ)
・不明 (ng_rvパラメータ)
を取得している。
この情報はなぜか text/plain で送られてくるので分かり易い
コメントの取得
コメント取得URLにパラメータ用のXMLを渡すためか POST メソッドを使って取り出す。
リクエストボディは text/xml で、次の形をしている。
user_id : ユーザID
res_from : 既にダウンロード済みのコメント数。コメントの更新時にこれを使って、差分のみ取得する。
version : よく分からんが、Flvplayerのバージョン?
thread : コメントのスレッドID
すると、レスポンスでやはり text/xml が返ってくる。
てか、Serverフィールドは Nico Nico Douga/1.0 だった
...
...
threadエレメントについて、
last_res : 総コメント数。
resultcode : 処理結果?恐らく0以外ならエラー
revision : リビジョン?
server_time : サーバ時間?
thread : スレッドID
ticket : 謎。
viewエレメントについて
id : 動画のID
video : 動画の再生数。
charエレメントについて
anonymity : 辞書で調べると匿名性、つまり匿名コメント?昔の名残?
date : コメントした日時
mail : メールアドレス?184=イヤヨだと思われる
no : 米番
thread : スレッドID
user_id : 米主のユーザIDがエンコードされたもの
vpos : コメントした時間
テキストノード : コメント内容。当然だがUTF-8エンコード。
動画の取得
動画のURLを GET で取得。
普通に video/flv で返って来る
あと、Serverフィールドは lighttpd となってる。
関連動画の取得
関連動画の取得に使われるIDはスレッドIDと同じ番号で、
取得URLはFlashに直接URLが埋め込まれている?(後から追加された機能のため?)
e.g.) http://www.nicovideo.jp/api/getrelation?page=1&sort=p&order=d&video=(スレッドID)
戻り値はやはり text/xml で、次の形式。
...
...
...
total_count : 関連動画の総数。
page_count : ページ数。次の関数で求まる? 切り上げ(total_count / data_count)
data_count : 一度に表示する関連動画の数。
video/url : 動画のURL
video/thumnail : 動画のサムネ
video/title : タイトル
video/view : 再生数
video/comment : 米数
video/mylist : マイリスト登録数
video/length : 動画の長さ。秒単位
video/time : 投稿日時
疑問点
マイリスト登録数はどこで取得しているのか?
ToDo
コメント時の挙動を調査。余裕があればマイリスト登録も。