id:emergentさんのnicovideoライブラリをいつか試してみようと思っていたので実際に試してみた。
表題の通り、やることは「デブサミ2008のニコニコ動画をダウンロードする」ね。
準備
nicovideoとhpricotをgemでインストール
# gem install nicovideo # gem install hpricot
実行するrubyはこちら
require 'rubygems' require 'nicovideo' require 'net/https' require 'hpricot' MAIL = '___your_mail@gmail.com' PASSWORD = '___your_password' # hpricotでデブサミ2008のニコニコ動画idを取得 sid = nil https = Net::HTTP.new("secure.nicovideo.jp", 443) https.use_ssl = true https.start do |w| data = "next_url=&mail=#{MAIL}&password=#{PASSWORD}" res = w.post("/secure/login?site=niconico", data, "Content-Length" => "#{data.length}") sid = $1 if res["Set-Cookie"] =~ /user_session=user_session([\d_]+)/ end video_ids = [] #TARGET = "/tag/TechTalk?sort=f" TARGET = "/mylist/5057457" Net::HTTP.start("www.nicovideo.jp", 80) do |w| res = w.get(TARGET, "Cookie" => "user_session=user_session#{sid}") doc = Hpricot.parse(res.body.tosjis) (doc/'a.video').each do |link| if link[:href] video_ids << link[:href].sub("watch/", "") end end end # Nicovideoライブラリでデブサミ動画のidから動画をダウンロード nv = Nicovideo.new(MAIL, PASSWORD).login video_ids.each {|video_id| nv.watch(video_id) {|v| file_name = "#{v.id}_#{v.title}.flv" puts file_name File.open(file_name, "wb") {|f| f.write v.flv } } sleep 3 }
仕組み
- 「coji さんの 公開マイリスト:デブサミ2008 竹迫アワー」をHpricotでスクレイピングしてニコニコ動画のidを取得する。
- Nicovideoクラスで上記1で取得したidの動画をダウンロード
これだけ。
余談
Plaggerでやったらもっと簡単にできるのかな。
ログインを2回してしまっているけど、Nicovideoで本当はスクレイピングも出来るのかな??
ダウンロードしたflvをiSquintでmp4に変換してipodで見るっす。
追記:作ったあとに気づいた。
ニコニコ動画ダウンロードAPI:マイリスト取得機能ってあったのね。
http://d.hatena.ne.jp/emergent/20080216
こっちの方がすごい簡単じゃん。
require 'rubygems' require 'nicovideo' MAIL = '___your_mail@gmail.com' PASSWORD = '___your_password' nv = Nicovideo.new(MAIL, PASSWORD).login nv.mylist('5057457').videos.each {|v| file_name = "#{v.id}_#{v.title}.flv" puts file_name File.open(file_name, "wb") {|f| f.write v.flv } sleep 3 }
じゃさっきのはTARGET定数を"/tag/TechTalk"とかして
好きなタグのをDLしたい時にでも使おう。
その機能もあったりして・・