ニコニコ動画の新着投稿動画をチェックし続けるRubyスクリプトVer2

こちらはログイン不要!
おととい書いた日記でsanadanさんから

非公式ですけど、
http://www.nicovideo.jp/newarrival?rss=atom
ならログインしなくても新着情報がとれるので、そっちを使った方がすっきりしますし、ニコニコ動画のサーバー負荷も少ないんじゃないかと思いますけどどうでしょう?

というコメントを頂いたので、そっちで書き直してみました。ログインが不要なのでニコニコ動画アカウントを持ってなくても利用できます!

nico_newarrival2.rb

require 'rubygems'
require 'hpricot'
require 'open-uri'
require 'date'
require 'kconv'

str = []
f = open(ARGV[0], "r")
while l = f.gets do
  str << l.chomp.toutf8
end
while true do
  targets = []
  newarrivals = Hpricot(open('http://www.nicovideo.jp/newarrival?rss=atom'))
  (newarrivals/:entry).each do |d|
    title = (d/:title).inner_text
    link = (d/:link)[0].attributes['href']
    str.each do |s|
      if Regexp.new(s) =~ title
        detail = Hpricot(open("http://www.nicovideo.jp/api/getthumbinfo/sm#{link.match(/\d+/).to_s}"))
        if (detail/:nicovideo_thumb_response)[0].attributes['status'] == "ok"
          status = "ok"
          first_retrieve = DateTime.strptime((detail/:first_retrieve).inner_text)
          length = (detail/:length).inner_text
          view_counter = (detail/:view_counter).inner_text
          comment_num = (detail/:comment_num).inner_text
        else
          status = "fail"
          first_retrieve = nil
          length = nil
          view_counter = nil
          comment_num = nil
        end
        targets << [link, status, title, first_retrieve, length, view_counter, comment_num]
      end
    end
  end
  if !targets.empty?
    targets.each do |t|
      if t[1] == "ok"
        puts("#{t[2]}\n
             #{t[3].strftime("%m/%d %H:%M:%S")}  length: #{t[4]}   view: #{t[5]}   comment: #{t[6]}\n
             #{t[0]}")
      else
        puts("#{t[2]} deleted!")
      end
      puts "\n"
    end
    puts "**************************************************************************"
  end
  sleep 30 #下の追記に書いた通り頻繁にアクセスする必要はありませんでした
end

3/5 2:00追記: 新着投稿動画一覧は10分ごとの更新のようなので、たまたま自分が見た30秒後に更新されることはありますが、頻繁にチェックする必要がまったくないようです。そのあたりは適当に調整してください。
koizukaさん、ご指摘ありがとうございました。


やはりログイン不要な分こちらの方がいいですね。link変数や30秒ごとにアクセスするなど、中身も微妙に変えてあります。Hpricotを入れてない人は gem install hpricot で。mechanizeを入れてあれば自動的に入っています。


実行方法などは前回と同様に、

ruby nico_newarrival2.rb hogelog.txt

でOKです。
クラスとか作らずにどぱーと書いてしまいました。相変わらずコードは汚いですね。。。


調べてみると、今回利用したような新着投稿動画情報をRSSフィードからとって来られるようなことは開発者の方のブログに書いてありました。知らなかったです。
新着動画のRSSを出してみた - こたにき
最近知りましたが、ニコニコ動画まとめwikiというのもあります。
http://nicowiki.com/
バグっているところや変なところがあれば教えてください。