ニコニコ動画について調べたこと。 ...のドット三連打は何らかの文字列(数値を含む) まず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 コメント時の挙動を調査。余裕があればマイリスト登録も。