ニコニコ動画のコメントを取得するクラス

以下のサイトの参考にして、クラス化してみたけれども、

にたまごほうれん草 - ニコニコ動画のコメント最新500件を取得するCommentsAdd Star


すでに gem 用のパッケージにまでなっていた。
まぁ、先を見ずして先走って作ってしまった。

にたまごほうれん草 - ニコニコ動画をダウンロードしたりするgemを作ってみた


でも足跡としてソースコードは載せておく。
comment_host, path の値の取得の仕方が変わったのか、
掲載されていたものでは使えなかったので、その部分だけは処理を変更している。

#!/usr/bin/env ruby -Ku

require 'yaml'
require 'rubygems'
require 'mechanize'
require 'cgi'
$KCODE = 'u'

class Nicovideo
  LOGIN_URL = 'https://secure.nicovideo.jp/secure/login?site=niconico'
  WATCH_URL = 'http://www.nicovideo.jp/watch/'
  FLV_URL   = 'http://www.nicovideo.jp/api/getflv?v='

  def initialize(url)
    @video_id = url.scan(/sm\d+$/).first
    @agent = WWW::Mechanize.new
  end

  def login(mail, passwd)
    @agent.post(LOGIN_URL, {'mail' => mail, 'password' => passwd})
  end

  def save_comment(filename)
    @agent.get_file(WATCH_URL + @video_id)
    content = @agent.get_file(FLV_URL + @video_id)
    params = content.scan(/([^&]+)=([^&]*)/).inject({}){|h, v| h[v[0]] = v[1]; h}

    puts "#{@video_id} saving comments as #{filename}\n"

    comment_host, path = %r{http://([\w\.]+)(.*)}.match(CGI.unescape(params['ms'])).to_a.values_at(1,2)

    thread_id = params['thread_id']
    body = %!<thread res_from="-500" version="20061206" thread="#{thread_id}" />!

    comments = Net::HTTP.start(comment_host, 80) {|http|
      response = http.post(path, body)
      response.body
    }

    File.open("#{filename}", "wb") {|f| f.write comments }
  end
end

if $0 == __FILE__
  nico = Nicovideo.new('http://www.nicovideo.jp/watch/smXXXXXXX')

  nico.login('mailaddress','password')

  nico.save_comment('./smXXXXXXXX.xml')
end