- ニコニコ動画から動画をダウンロードする
- ニコニコ動画にアクセスするためのセッションIDを取得する
- IEからセッションIDを取得する
- FirefoxからセッションIDを取得する
- 独自にログインしてセッションIDを取得する
- セッションIDの有効性を確認する
- 目的の動画のurlを突き止める
- 動画をダウンロードする
- ニコニコ動画にアクセスするためのセッションIDを取得する
- ダウンロードした動画を再生する
Internet ExplorerではセッションIDはCookieとして、あなたのハードディスク内に保存されている。その具体的な場所は、Windows XPの場合にはC:\Documents and Settings\username\Cookiesである(一般的な場合)。WindowsのAPI、SHGetSpecialFolderLocationを使えばどのバージョンのWindowsでもクッキーのフォルダを取得することが出来る。
Cookiesフォルダの中にはIEが使用したCookieがサイト(ドメイン)毎に保存されているが、その中にニコニコ動画のクッキーファイルも記録される。そのファイル名は次のようなものである。
username@nicovideo[1].jp
username@nicovideo[2].jp
username@nicovideo[3].jp
...
username@nicovideo[n].jp
このパターンに当てはまるファイルをWindowsのAPI・FindFirstFile等を使って探し出そう。上記のパターンに当てはまるファイルがない場合にはIEはニコニコ動画のセッションIDを保持していない。
ファイルは複数存在する場合がある。複数回ログインしたとかブラウザの都合とかによってその数は異なる。ただし、有効なセッションIDを持つファイルはその中で唯一つである。それを判別するには2つの方法がある
- ファイルの最終更新時刻を調べる
- 全部のファイルについてセッションIDを取得して実際にニコニコ動画にアクセスして通るか確かめる
前者はなかなかスマートで、基本的に最後に更新されたものが有効なセッションを記憶しているはずなので、ファイルのタイムスタンプを見て、どのファイルを使うかを判別する。もしかすると上手く行かない場合もあるかもしれないが、実際試したところ上手く行っているようである。注意しておきたいのが、ファイル末尾に[2]や[3]と番号がついていても、[3]の方が新しいファイルというわけではない、ということだ。
後者はニコニコ動画に対する負荷を考えればオススメできないが、前者の方法がうまくいかない場合には試す価値がありそうである。
さて、ここまででセッションIDが含まれていると思わしきクッキーファイルを特定することが出来た。次には実際にファイルを開いて中からセッションIDを取り出す。クッキーファイルの内容は次のような感じである。
__utma
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
nicovideo.jp/
1088
2350186496
32111674
3743718656
29892089
*
__utmz
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
nicovideo.jp/
1088
379625216
29927979
1520693264
29891266
*
nicohistory
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
nicovideo.jp/
1024
2378705152
29898138
3046836512
29892103
*
user_session
user_session_xxxxxx_xxxxxxxxxxxxxxxxxxxxxx
nicovideo.jp/
1024
4016931712
29897778
333855776
29891744
*
このクッキーファイルには、__utma・__utmz・nicohistory・user_sessionという名前のデータが記録されている。この名前に対してそれぞれ1行下のxxxxxxxで表されているのがそのデータであり、user_sessionの下の行にあるのが捜し求めているセッションIDである。赤字で示した特徴を使ってクッキーファイルを丁寧にパースして取り出すもよし、user_sessionと書いてある場所だけを探してもよし、いずれにしても難しい処理ではない。
以上でIEからセッションIDを取り出すことが出来た。ただし、このセッションIDが正しいかどうかはまだ分からない。確認するためにはセッションIDの有効性を確認するを参照のこと。