ニコニコ動画のランキングから動画を落とす&mp3にするスクリプト作った

作りました。

https://github.com/gong023/nicoaudio

 

もちろん全部の動画落としてくるわけじゃなくて「歌ってみた」とかそのへんのmp3にする価値があるやつを狙って変換します。あと、処理が終わったらtwitterのDMで処理にかかった時間と成功or失敗をお知らせしてくれます。

2,3ヶ月前からcronで毎日回して運用していますがそこそこ動作が安定してきた。これのおかげでだいぶ楽になりました。新しい曲を何もしなくても毎日聞けるのはいい。

READMEに簡単な使い方書いてあります。もし使いたい場合はどうぞ。(といってもcloneするだけじゃ動きません。READMEもいつかはちゃんと最後まで書きます)

 

作っていて気になっていたことを書きます

rubyのマルチスレッド

このスクリプトはruby1.9.3のマルチスレッドを使って動画のDLを行なっています。ベンチマークを取ってみたら処理速度が5倍になっていてビビりました。

マルチスレッドなし --  

D, [2012-08-23T04:39:06.525075 #16552] DEBUG -- : get / all /  3.560000   5.090000   8.650000 (1638.229236)

 マルチスレッドあり --

D, [2012-08-23T04:08:10.576479 #16269] DEBUG -- : get / all /  4.200000   6.380000  10.580000 (319.074013)

rubyは1.9.1からカーネルスレッドになったらしいのですが、特別な事情がない限りスレッドセーフになっていて、なんちゃってマルチスレッドみたいになっています。ただIOが絡む場合は別で、今回はそのケースに当てはまるのでちゃんと効果が出たみたいです。

その辺りを検証してくれているブログもありました

http://www.kaeruspoon.net/articles/726

MySQL

無駄にmysql使ってます。videoのidが一意であることを保証するためです。それだけです。ええ。

完全に大げさ。

yamlでいいじゃんといえばそれまでなんですが

insert ignore楽じゃん。indexもあるしさ

その他

  • もっとrubyの黒魔術使いたかった
  • なんか書こうかと思ったけど忘れた

 

せっかくmp3がとれたので今はブラウザでプレイヤー作ってます

iPhoneSafariだとバックグラウンドいってもスリープモードでもaudioタグ効くんだよ。助かる。