ターミナルから

% tweet 'hello, world.'

これだけでホームページが更新されて hello, world! と表示されるスクリプトを書いてみた。

つまり twitter と同じことをコマンドでさくっとやってしまうわけ。 あーらくちん。なんでもっと早く書かなかったか。laziness が足りない。 もちろんフォローとかの機能はない。 フォローとかいらない、 そう割り切れば、ミニブログなどいたって簡単に実現できるという遊び。 unix 環境ならでは。

そのスクリプトはいかなるものか。Perl でも Ruby でもない。

#!/bin/sh

case $# in
0) echo "Usage: tweet 'string'" 1>&2; exit 1;
esac

tweeting="$1"
datetime=`date  "+%Y-%m-%dT%H:%M:%S"`
source="/home/foo/Sites"
public="somewhere:/home/foo/public_html"
entry="entries/recent_entry.shtml"
index="index.shtml"

echo $datetime $tweeting >! $source/$entry
scp $source/$entry $public/$entry
scp $source/$index $public/$index

これぐらいで動く。

もちろんこれだけでは動かない。 ホームページがすでに SSI を使って構築されていること。 プロバイダがクールであることも要件。 ようするに

% ssh somewhere
% cd public_html
% echo hello, world. `date` >! entries/recent_entry.shtml
% touch index.shtml
% exit

ということをやってるだけ。それを

% tweet 'hello, world.'

これ一発で済むようにしただけ。

なにが Laziness, Impatience and Hubris かって、つぶやきをいちいち残さない豪快仕様なこと。 つぶやかれた瞬間がすべて。つぶやきなんて残す意味はないでしょ。残したってどうせ見やしないよ。

つぶやきを残すなら、

datetimeiso=`date "+%Y-%m-%dT%H:%M:%S"`
datetimestr=`date "+%Y%m%d%H%M%S"`
blosxomtext="$datetimeiso\n$tweeting"
blosxomfile="/home/foo/blosxom/tweetings/article/$datetimestr.txt
echo $blosxomtext > $blosxomfile

というのを追加。とりあえず blosxom doc 形式。 このファイル群はあとでどうにでも料理できる。 blosxom 互換のスタティック・レンダラーで処理できる。

ツールとしてより便利にした決定版はこちら。

#!/bin/sh

if [ -n "$1" ]; then
    echo 'usage: echo string | tw' 1>&2; exit 1;
fi

source="/home/foo/Sites"
public="somewhere:/home/foo/public_html"
entry="entries/recent_entry.shtml"
index="index.shtml"
file="/var/tmp/tweeting"
datetime=`date  "+%Y-%m-%dT%H:%M:%S"`

echo $datetime > $file
cat >> $file
scp  $file          $public/$entry
scp  $source/$index $public/$index
rm   $file

これでパイプできる。

% echo 'hello, world.' | tweet

とか

% vim tweeting
% cat tweeting | tweet

とか使えて便利です。

あとこれにメッセージングの機能を加えれば twitter みたいになりますけど、 そんなめんどくさいことしない。

unix 環境なら、MacOSX なら、つぶやきミニブログなど簡単にできるよというデモにはなったかな。 まさに unix プログラミング環境なの。

topic: software
first posted: 2009-08-19 18:48:23
last modified: 2009-08-29 20:59:56