2004-06-26 [長年日記]
_ rubyデビュー
大量のmidiデータをダウンロードしたかったのでrubyでダウンロードするスクリプトを書いてみる。
標準入力から1行読み出してcurlでダウンロード。
#shスクリプトの方が早かったかもしれない。
#しかし、rubyの勉強なのだ。そうなのだ。きっと。
サンプルを入力して実行したことはあったけど、
問題解決につかったのは初めて。
まだおぼつかないのでなにげなく使える道具の1つにしたいところ。
ちょっとはまったのはosxのコンソールから実行するときの改行コード。
GUIのエディタで作ったらCRだったようで実行できなかった。
LFじゃないとダメなのね。
#!ruby -KS while line = gets #printf "curl http://hogehoge.co.jp/#{line.chomp} > #{line.chomp}" `curl http://hogehoge.co.jp/#{line.chomp} > #{line.chomp}` end
wget 使うとコマンド一発で再帰取得できるんだけど、<br>OS X には wget は標準では入ってないのよね、、、<br> wget -r -l -np --accept=mid http://hogehoge/<br><br>curl は再帰取得はできないみたいだけど<br>1 つのページを取得することに関しては wget より<br>多機能なので、状況に合わせて使い分け、という感じです。<br><br>sh なら、<br> for i in `cat url_list.txt`; do echo $i; curl -O $i; done<br>ってな感じ。<br><br>ruby での別解はこんな感じ。<br>(1) ワンライナー版<br> ruby -ne '`curl -O http://hogehoge/#{$_.chop}`' < file_list.txt<br><br>(2) Ruby の特徴を活かしてイテレータ使った版<br> STDIN.each {|l| `curl -O http://hogehoge/#{l.chop}`}
早速 $ fink install wget でインストール。お。wget便利かも。<br>今度使ってみます。<br>Rubyのワンライナー版ってのはコマンドラインから入力できるのですね。<br>イテレータは最初はよくわからなかったのですが、<br>for文よりも便利に使える場合が多いですよね。<br>#今回はみつけた例文がwhile文だったのでそのまま。<br>sh版は私も昨日書いた後調べてみました。<br>#やっぱりshを調べた方が早かった。(^^;)<br>while read LINE<br>do <br> curl -O $i;<br>done < url_list.txt<br>なんでdoneに<で読み取られるんだろう???
そうそう、表紙から日記のページにたどり着けない。<br>うーん
あ、いがぺトップからはリンク貼ってないかも。(^^;)<br>一番簡単なのはグーグルで「いがいが日記」か「igaiga diary」で検索すると出てくるはずです。<br>igaigaだけでもトップかも。