awk で tinyurl.com の API を使う

以下のようなスクリプトを作ってみたのですが、うまく動作しません。

#! /usr/bin/gawk -f
# tinyurl.awk - get tiny url from tinyurl.com api.

BEGIN {
    ORS = RS = "\r\n\r\n";
    base_url  = "tinyurl.com";
    url       = "api-create.php?url=";
    input_url = ARGV[1];
    http_url  = "/inet/tcp/0/" base_url "/80";
    str = "GET http://" base_url "/" url input_url;
    print str;
    print str " HTTP/1.0" |& http_url;
    while ((http_url |& getline) > 0) {
        print $0;
    }
    close(http_url);
}

これはこれで原因を追求するべきなのですが、なんというか gawk でしか使えないとか、もの凄くダラダラ感があるので、ここは外部コマンドを使って getline で変数として格納してみます。

#! /usr/bin/gawk -f
# tinyurl.awk - get tiny url from tinyurl.com api.

BEGIN {
    tinyurli_api = "http://tinyurl.com/api-create.php?url=";
    get_cmd = "GET " tinyurli_api ARGV[1];
    get_cmd | getline tinyurl_url;
    print tinyurl_url;
}

実際に実行してみます。URL には念のためにシングルクォートしておいてください。

$ gawk -f tinyurl.awk 'http://gauc.no-ip.org/'
http://tinyurl.com/4mm82a

このスクリプトでも長いと感じてしまいますが、他の awk スクリプトでも使いやすいように変数格納しているため若干長くなっています。

tag_gawk.pngtag_gawk.png