超絶便利な aki っていうコマンドラインツール書いた
jq っていう便利なツールがありまして、標準入力から受け取った json をヒューマンリーダブルな感じに加工してくれたり、小粋なフィルタが搭載されていたりします。
これは便利だなあと感動したのですが、どうせなら JSON だけじゃなくて、XML とか YAML とか MessagePack とかもろもろよしなにやってくれると俺的に超絶便利になりそうなんだけどな、と思いだしたので再開発はじめました。JSON::Pointer つかって同じような便利フィルタ機能もありまする。
例えばこんな感じ
App::aki に同梱される aki に URL を渡して実行します。
$ aki 'http://search.twitter.com/search.json?q=YAPC+NA' -p '/results/0'
---
created_at "Fri, 31 May 2013 22:59:18 +0000",
from_user "vdebolt",
from_user_id 13697792,
from_user_id_str 13697792,
from_user_name "Virginia DeBolt",
geo undef,
id 340603421306523650,
id_str 340603421306523650,
iso_language_code "en",
metadata {
result_type "recent"
},
profile_image_url "http://a0.twimg.com/profile_images/2918598537/767c2ddc4111831c5997d77be95df076_normal.jpeg",
profile_image_url_https "https://si0.twimg.com/profile_images/2918598537/767c2ddc4111831c5997d77be95df076_normal.jpeg",
source "<a href="http://www.tweetdeck.com">TweetDeck</a>",
text "YAPC::NA 2012 - This Has All Happened Before and Will Happen Again http://t.co/56EUCPQWp2"
---
レスポンスのパースは content-type を見るとかして勝手に判断つけて処理してくれます。もし自分で指定したい場合は --decoder
に xml とか渡せば OK。--raw
とかつければ(パースできないコンテンツ(例えばHTMLとか)でも)生データが拝めて、--verbose
するとヘッダとかいろいろ情報盛ってくれるようになってるので確認したい場合はそんなんで。
ちょっとまだ書きたてほやほやなのでマルチバイトの扱いとか細かいとこおかしかったりしますがまあなんか枠組みはできたぞってことで CPAN にもあげてみましたのでよろしければお試しください。
[追記] マルチバイトおおむね対応しました。入出力の文字コードも指定できるようになりました。
$ aki -h
Usage:
$ aki [options] URL
Options:
-d --decoder specify deoder(default: auto detect)
--agent user agent
--timeout connection timeout
-m, --method HTTP method(default: GET)
--cookie cookie file path for request
-p, --pointer JSON pointer string(See: JSON::Pointer)
-ie, --in-enc input encoding(default: utf8)
-oe, --out-enc output encoding(default: utf8)
--color colorize the result
--raw show raw content
--verbose show verbose information
-h, --help show this help
-v, --version show the version
[追記] cookie も送れるようになったのと、.akirc で設定書けるようになったので、常時色つけたい!とか、俺はいつも POST したい!とかいうのにも対応できるようになりました。
誰か試してほちい。