RUBYを始めてみる。ニコニコ動画取得できた!追記。さらに追記。ダウンロードまであと少し!!
近頃Ruby、Perl、PHPと書籍を手に入れつつ、いろいろ触ってみているのだが。
どうやらRubyがオブジェクトってて心地よいので、色々いじってみてる。
そんなわけで覚書。
SSLだろうが、細かいこと気にせずSubmitできるライブラリ
ファイルうpもできるとのこと。
http://mono.kmc.gr.jp/~yhara/rubyscraping/?Mechanize
ニコニコのランキングもあっという間に取得。
require 'mechanize' #aka mailaddress = '[email protected]' pass = 'hogehoge' agent = WWW::Mechanize.new page = agent.get('http://www.nicovideo.jp/') form_login = page.forms.with.name('login').first form_login.mail = mailaddress form_login.password = pass results = agent.submit(form_login) runking = agent.get('http://www.nicovideo.jp/ranking/mylist/daily/all') puts runking.body
素敵すてきステキ素敵ー♪
追記:Mechanize重すぎ
重すぎなので、もう少し低レイヤーのほうで書いてみる。
#!C:/ruby/bin/ruby require 'net/https' require 'net/http' #クラス定義 module Nico class Rank def get_rank(sid) http = Net::HTTP.new('www.nicovideo.jp',80) response = http.get('/ranking/mylist/daily/all' , "Cookie" => "user_session=user_session#{sid}") end end def self.get_sid (mail, password) 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}" response = w.post("/secure/login?site=niconico", data, "Content-Length" => "#{data.length}") sid = $1 if response["Set-Cookie"] =~ /user_session=user_session([0-9_]+)/ end sid end end #本番 sid = Nico::get_sid('[email protected]','hogehoge') rank = Nico::Rank.new response = rank.get_rank(sid) puts "Content-type: text/html\n\n" puts response.body
なんか、外部からニコニコに間接的にログインできちゃったよ?w
FFMPEGと連携したりして、ZERO3でニコニコ見れるかな?
さらに追記。動画ダウンロード試行してみる
user_session : _759517_1358603021528109367 nicohistory : sm1740920%3A1198414228%3A1198414228%3A394ea80b5c66ae7e%3A1 url : smile-clb33.nicovideo.jp id : smile?v=1740920.81346 Cookie : user_session=user_session_759517_1358603021528109367;nicohistory=sm1740920%3A1198414228%3A1198414228%3A394ea80b5c66ae7e%3A1
APIやら閲覧ページをいじる事で、色々と情報を得ることができてきました。
どうやら"ユーザーセッションID"と"動画視聴済み"のクッキーが必要らしいので、それらを得てから。
動画にアクセスしたのだが、なぜか跳ね返されます。。。orz
あとはなにが足りないんだろうね?
誰か優しい人教えて!!
#address=>http://smile-clb33.nicovideo.jp/smile?v=1740920.81346 def get_video(address) #正規でそれっぽくアドレス抽出♪ url = address.scan(/http:\/\/(\S+)\/smile?/) id = address.scan(/nicovideo.jp\/(\S+)/) #http接続ぅ http = Net::HTTP.new(url,80) #sid:セッションID nis:nicohistory response = http.get(id,"Cookie" => "user_session=user_session" << @sid << ";nicohistory=" << @nis ) end