Rubyからニコニコ動画をいろいろするNicokitつくった
RDocでマニュアルつくってみたけど、instance_evalで独自getter定義とか気持ち悪いことしてるのであんまり役に立たない気が……。
ログイン
最初にログインしておかないと他の機能が動きません(raiseが発生します)。
mail="xxx@xxx.com" password="xxxxxxxx" Nicokit.login(mail,password)
マイページ
いまんとこ自分のマイリスト一覧を取ってくるだけ。
「自分のマイリスト一覧」を正しい日本語でどういえばいいのかわからない。
my=Nicokit::My.new
# 自分のマイリスト一覧
my.list.each{|l|
puts l.title # マイリストのタイトル
puts l.description # マイリストの説明
}
誰かのマイリスト
l=Nicokit::VideoList.new("1626019")
# マイリストのタイトルと説明
puts "#{l.title} - #{l.description}"
l.videos.each{|v|
# マイリストに登録されてる動画一覧
puts "#{v.url} - #{v.title}"
}
動画
v=Nicokit::Video("sm2637528")
# タグ
puts v.tags.join(", ")
# この動画を見た人は他にこんなのも見てます
v.recommend.each{|r|
puts "#{r.url} - #{r.title}"
}
# ローカルへ保存
v.flv.save("#{v.title}.flv")
検索
タグとキーワードからそれぞれ検索できます。
s=Nicokit::Search.new("test") # デフォルトはキーワード検索
puts s.count # 「test」でキーワード検索したときのヒット数
s.switch(:tag) # タグ検索に切り替え
puts s.count # 「test」でタグ検索したときのヒット数
puts s.switch(:search).count # キーワード検索に切り替えてヒット数表示
# 「才能の無駄遣い」タグ、再生が多い順
s2=Nicokit::Search.new("才能の無駄使い",:tag,{:sort => :pv,:order => :desc)
# 動画を10件取得
# (デフォルト30。50とかページをまたぐような件数を指定してもよしなにやってくれるけど、そのぶんリスキー)
s2.video(10).each{|v|
puts v.id
}
# 該当する動画を全部取得 *危険
# (下記の「使用上の注意」参照のこと)
s2.video_all
使用上の注意
必要な情報があればその都度nicovideo.jpへ接続して取ってきてるので、たとえば
my=Nicokit::My.new # ここではまだ何もしない
my.list{|l| # 接続(マイリスト一覧取得)
puts "#{l.title}" # 接続(リストタイトル取得)
l.videos.each{|v| # l.title取得時に取得済みなので接続しない
puts "#{v.title}(#{v.url})" # 接続(動画タイトル)
}
puts "#{l.title}おわり" # l.titleは取得済みなので接続しない
}
というようにコネクションを張りまくることになります。この例でいえば、l.videosが100個あるならv.titleのために100回アクセスします。
短時間に大量のアクセスをすると、ニコニコ動画に「やめてくださいエラー」を出されますのでご注意を。Nicokit側では一切ウェイトを入れてないのでeachに適宜sleepを仕込むなどしてください。今のところキャッシュなども未実装です。
データ的にはl.videosやl.titleの取得時に動画のタイトルも既知になるわけですが、現在のところそういうエコロジーな機構は用意されていません。
言い訳的なあれ
RDocとgitとその他いろいろが初物なので出来が微妙かと思いますが、リポジトリはオープンになっているので誰か添削してくれるとうれしいです。

'a b c d'.split(/\s+/) == %w(a b c d)
さっそく変更しました。ありがとうございます。