RUBYを始めてみる。ニコニコ動画取得できた!追記。さらに追記。ダウンロードまであと少し!!

近頃RubyPerlPHPと書籍を手に入れつつ、いろいろ触ってみているのだが。
どうやらRubyがオブジェクトってて心地よいので、色々いじってみてる。
そんなわけで覚書。


SSLだろうが、細かいこと気にせずSubmitできるライブラリ
ファイルうpもできるとのこと。

http://mono.kmc.gr.jp/~yhara/rubyscraping/?Mechanize


ニコニコのランキングもあっという間に取得。

require 'mechanize'

#aka
mailaddress = 'foo@bar.co.jp'
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('foo@bar.co.jp','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