なんかばんざい

会社や家で感じたもんのとある備忘録!!

Rubyからニコニコ動画をいろいろするNicokitつくった

githubに置いてみた。

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とその他いろいろが初物なので出来が微妙かと思いますが、リポジトリはオープンになっているので誰か添削してくれるとうれしいです。

メール

フォクすけ

Mozilla Firefox ブラウザ無料ダウンロード

track feed