URL一覧に全部アクセスしてHTTPステータスコードを付けるやつ作った
名前はballad。厨二ネームだ。
READMEにあるように、こんな感じのことができる。
$ cat data.txt https://www.google.co.jp/ https://www.google.co.jp/a https://www.google.co.jp/b $ cat data.txt | ballad 200 https://www.google.co.jp/ 301 https://www.google.co.jp/a 404 https://www.google.co.jp/b $ cat data.txt | ballad | grep 200 | awk '{print $2}' https://www.google.co.jp/
URL一覧を標準入力に与えると、全部にアクセスして、レスポンスコードをくっつけて標準出力に返してくれる。
平行でリクエストしてくれるので、上からひとつひとつアクセスするより速い。
これでS3にファイルがあるのかどうか調べたりできる。
元々は仕事上でスクリプトを書いていただけだったけど、直前に読んだ「UNIXという考え方」を思いだした。
- 作者: Mike Gancarz,芳尾桂
- 出版社/メーカー: オーム社
- 発売日: 2001/02
- メディア: 単行本
- 購入: 40人 クリック: 498回
- この商品を含むブログ (140件) を見る
S3オブジェクトにアクセスして、もし無かったらDBからデータを引いて、このWebAPIを叩いて……。 とスクリプトを書こうとしたけど、
『UNIXという考え方にのっとって、小さなプログラムに分けたらどうだろう?』
『インターネットのgrep……、というか、URL一覧を食わせたらアクセスが成功したやつだけ返すプログラムがあったら?』
『オプションでアクセスが失敗したやつにスイッチできるとしたら?ちょうどgrepの-vのように。』
『UNIXの考え方にそうなら、grepのことはgrepにまかせて、いっそ全てのURLにレスポンスコードをくっつけてあとでパイプからgrepすればいいのでは?』
と考えてひらめいたのがこのツール。
僕はこれで10万件ぐらいのS3オブジェクトのURLを生成する簡単なスクリプトを書いて、パイプでballadに渡して、grepして、整形して、でS3オブジェクトがないurl一覧を作った。
ruby gen_url.rb | ballad | egrep -v "^200" | awk '{print $2}' | tee missing_objects.txt
あんまりこんな使い方をすることはないと思うけど、いざというときのお供に便利。
ついでにgolangに挑戦してみたけどかなりコードが汚いのが分かる。。。
go installがよくわからないし、いい感じに書く環境用に配布する方法もわからない。
その辺りを今後の課題としつつメンテナンスしていきたい。
golangだとバイナリを作れるので、Rubyの環境なんか無い!rubygems入れたりとか面倒!という場合でも使える。
実は最初にRubyでつくってからgolang版を開発しだしたので、
その名残でRuby版もある。 ( https://github.com/ksss/ballad-ruby )
gemにしておいたのでRuby派のかたはgem install ballad
でどうぞ。ballad
コマンドが使えるようになる。
balladは最近聞いているtoeの新譜から命名した ;)