2013/06/01

超絶便利な 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 したい!とかいうのにも対応できるようになりました。

誰か試してほちい。

サイト内検索