Subscribed unsubscribe Subscribe Subscribe

httpでデータを受信して処理するワンライナー

Perl Linux Mac OneLiner

今までずっと

$ perl -MLWP::Simple -MJSON -e 'print decode_json(get "http://***.com/***.json")'

みたいなカンジで書いてたけど、わざわざモジュールでhttpのgetをしなくても他のコマンドを使う方法があることを知った。


たとえば、Macなら"curl"というコマンドが標準でついているらしく、

$ curl "http://***.com/***.json" 2> /dev/null | perl -MJSON -ne 'print decode_json($_)'

もしくはパイプを使わずに

$ perl -MJSON -e 'print decode_json(`curl "http://***.com/***.json"`)' 2> /dev/null
$ perl -MJSON -e 'print decode_json(`curl $ARGV[0]`)' "http://***.com/***json" 2> /dev/null

のように書くことができる。
でもコイツはダウンロードの進捗がエラー出力されるので"/dev/null"に捨てなきゃいけない…抑制できるオプションあるのかな? ><


あとはMacには標準ではないけどLinuxでは標準?"wget"というコマンド。これも同じような機能があるので

$ wget -qO- "http://***.com/***.json" | perl -MJSON -ne 'print decode_json $_'

とか

$ perl -MJSON -e 'print decode_json(`wget -qO- "http://***.com/***.json"`)'
$ perl -MJSON -e 'print decode_json(`wget -qO- $ARGV[0]`)' "http://***.com/***.json"

という具合に書ける。こちらはオプションでエラー出力を抑制できるのでイイカンジ! LWP::Simpleを使うよりも短く書けるようになるかもしれない。

追記

ftpコマンドでも同じようなことできた。知らなかった…

$ ftp -Vo- "http://***.com/***.json" | perl -MJSON -ne 'print decode_json($_)'

コマンドの文字数的にこれが最強かもw