実用! awk でコマンドラインから Twitter 投稿

実用! PerlでコマンドラインからTwitter投稿という Perl の記事がありますが、条件さえ合えば awk だってできます。 その条件とは「UTF-8 環境である」または「スクリプト内で投稿メッセージを UTF-8 にする」ことです。 最近の Linux 環境では UTF-8 で運用するケースも増えてきていますので、ここでは前者を用いて簡単なスクリプトを作成します。

#! /usr/bin/gawk -f
# twitter_send.awk

BEGIN {

    # 自分の情報で置き換えてください
    twitter_id = "******";
    twitter_pass = "******";

    status = ARGV[1];

    update_url = "http://twitter.com/statuses/update.xml";
    http_url = "/inet/tcp/0/twitter.com/80";

    # ID とパスワードは BASE64 で送る必要がある
    # base64 コマンドでも nkf -MB でも同じ結果です
    #base64_command = "echo -n " twitter_id ":" twitter_pass "| nkf -MB";
    base64_command = "echo -n " twitter_id ":" twitter_pass "| base64";
    base64_command | getline mail_pass;

    ORS = "\r\n";

    # 実際の awk での TCP 通信部
    update_status_url = update_url "?status=" status;
    print "POST " update_status_url " HTTP/1.0" |& http_url;
    print "Authorization: Basic " mail_pass |& http_url;
    print "" |& http_url;   # ←これ、必要です
    close(http_url);
}

Perl と比べると冗長なところはありますが、基本認証でのやりとりの様子が良く理解できると思います。 使うときには以下のようにします。

$ gawk -f twitter_send.awk 'てすてす'

awk のようなシンプルな言語で Twitter 投稿できるようになると幅が広がります。 何かアラートを立てたいものを Twitter で飛ばしたりすることもできます。 また、URL に対しては TinyURL.com の API を使って変換して送付するなどもできるでしょう。

別に Perl や他の言語の真似をすることが目的ではなく、awk で作るからこそ見えてくる仕組みなどを理解していただけると幸いです。