awk で BASIC 認証

PythonでBASIC認証 - みずぴー日記からですが、awk で BASIC 認証を行ってみます。 実は既にAWK Users JP :: 実用! awk でコマンドラインで Twitter 受信で使っているのですが、紹介しているスクリプトが複雑なので、BASIC 認証のみを抜き出しておきます。

さて、awk での BASIC 認証は他の LL と比較すると複雑と感じる方もいるかもしれませんが、BASIC 認証のやりとりのとおりに記述すれば良いだけです。

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

BEGIN {
    atom_url        = "http://twitter.com/statuses/friends_timeline.atom";
    twitter_id      = "*****";
    twitter_pass    = "*****";

    # base64 形式に変換する
    http_url        = "/inet/tcp/0/twitter.com/80";
    base64_exec     = "echo -n " twitter_id ":" twitter_pass "| base64";

    base64_exec | getline mail_pass;

    # BASIC 認証部分
    ORS = "\r\n";
    print "GET " atom_url " HTTP/1.0"       |& http_url;
    print "Authorization: Basic " mail_pass |& http_url;
    print ""                                |& http_url;

    while ((http_url |& getline) > 0) {
        print $0;
    }
    close(http_url);
}

実行してみると読めるか読めないかは別として Twitter の atom が出力されます。 もちろん、上の twitter_id と twitter_pass は自分のものに変更してください。

$ gawk -f basic_auth.awk
<?xml version="1.0" encoding="UTF-8"?>
<feed xml:lang="en-US" xmlns="http://www.w3.org/2005/Atom">
  <title>Twitter / hi_saito with friends</title>
  <id>tag:twitter.com,2007:Status</id>
  <link type="text/html" rel="alternate" href="http://twitter.com/hi_saito/with_friends"/>
  <link type="application/atom+xml" rel="self" href="http://web077.twitter.com/statuses/friends_timeline.atom"/>
  <updated>2009-04-29T14:06:24+00:00</updated>
  <subtitle>Twitter updates from Hirofumi Saito / hi_saito and folks.</subtitle>
    <entry>
      <title>saiha_kiryu: @osada snow goose&#12394;&#12358;&#12435;&#12383;&#12435;&#65281;</title>
      <content type="html">saiha_kiryu: @osada snow goose&#12394;&#12358;&#12435;&#12383;&#12435;&#65281;</content>
      <id>tag:twitter.com,2007:http://twitter.com/saiha_kiryu/statuses/1649010335</id>
<snip>

gawk で簡単に BASIC 認証を使った通信ができるのは便利なのですが、awk らしくないという意見も少なくないような気がします。

tag_gawk.pngtag_gawk.png