それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

ニコニコ動画の検索結果一覧からビデオIDをまとめて取り出す。

ニコニコ動画で、検索結果一覧をたどって、動画IDを保存する。動画のIDをちまちま取り出すのがめんどくさくなった。かっとなってやった。

require 'rubygems'
require 'mechanize'

def search( *tags )
    tags = tags.map{|e| e.split }.flatten
    video_ids = []
    m = Mechanize.new
    m.max_history = 2 # mechanize で1M超すファイルをDLし続けると履歴がメモリオーバーになる。
    link = "http://www.nicovideo.jp/search/#{tags.join('+')}?sort=f"
    begin
        m.get link
        list = m.page.links.map{|e| e.href}.map{|e| e =~/watch\/(sm[0-9]+)/ ; $1}.select{|e| e} 
        link =  m.page.search("/html/head/link[@title='次のページ']/@href") 
        video_ids.push list
    end while m.page.search("/html/head/link[@title='次のページ']").size>0 
    video_ids.flatten
end

やってみる

search( "JOYSOUND配信中", " VOCALOID 殿堂入り" ).size
#=> 758
search( "JOYSOUND配信中", " VOCALOID 殿堂入り" )[0..10]
#=>["sm16133185", "sm16133185", "sm16110005", "sm16110005", "sm16104322", "sm16104322", "sm15977003", "sm15977003", "sm15679694", "sm15679694", "sm15622476"]

できた。