基本的にはこれは「今何をしているか」をログに残すものであるとする。チャット的な使い方は、まあ盛り上がってるときは良いけど、飽きたら終わり。やっぱり「今何をしているか」の機能は大事にしたいと思う。
APIが用意されているので、自動的に更新することが可能なのがポイント。聴いてる音楽、開いているURL、見ているテレビ、読んでる本、起動しているアプリ、食べてるおやつ、飲んでるジュース、着ている服、横にいる人、向かい側にいる人、今メール書いてる相手、そんなのを自動でログに残せる可能性があるわけです。
で、まあそんなことの前哨戦として、とりあえずJavaScript(WSH)から投稿するやつを作ってみた。
上記のリンクからダウンロードができますが、一応この記事の最後にソースコードを掲載しておきます。
このjsはコマンドライン引数で
を受け取り、Twitter APIを使って投稿します。それだけです。
twitterclient.jsを使えば、拙作コマンドラインランチャ「MM Command Sense」を使ってTwitterに投稿することができるようになります。
これで準備完了。あとはMM Command Senseから
コマンド名 + 半角スペース + メッセージ
と打ち込めば、メッセージがTwitterに投稿されます。
上記の流れは、以前書いたwebsearch.jsの使い方と同じです。
ちなみに、『メッセージの最後に半角スペースと半角ピリオドを追加すると、Twitterが日本語をうまく受け付けない問題を回避できる』というコツがありますが、このtwitterclient.jsは内部で自動的にそれをやっています(それだけで完全に回避できるのかどうかは不明)。
別にMM Command Sense専用というわけではないです。
コマンドライン引数を渡してjsを起動できるなら何だって使えます。
Twitterには、日本語をうまく受け付けない問題や、文字数制限があります。そのため、投稿内容によっては投稿に失敗している可能性があります。
twitterclient.jsは、投稿を試みますが、その結果がどうなったかはわかりません。メールアドレスやパスワードが間違っているときはエラーメッセージを出せますが、投稿内容がTwitterの制限に引っかかった場合は検出できませんでした。
APIを使って投稿すると、レスポンスが返ってきます。ここに最新の投稿内容らしき物が入ってる。この辺と比較すると成功か失敗かを取得できそうな気もしないでもない。
でもなんかアヤシイのでやってません。将来の課題とします。
テストのたびに投稿してしまうのが悩み。GoogleTalkなんかで受信している方々にはご迷惑をおかけしました。
あれですね、テスト用に専用アカウント作ればいいんですよね。もしかしてみんなそうやってるのか。
コードを書いておいた方がGoogleなどで引っかかるようになると思うので、載せておきます。
(function(){
var xmlhttp = (function(){
try{ return new ActiveXObject('Msxml2.XMLHTTP'); }
catch(e){
try{ return new ActiveXObject('Microsoft.XMLHTTP'); }
catch(ee){ return null; }
}
})();
if(!xmlhttp) return;
var args = WScript.Arguments;
if(args.length < 3) return;
var statuses = [];
for(var i = 2; i < args.length; i++){
statuses.push(args.Item(i));
}
statuses.push('.');
xmlhttp.open('POST', 'http://twitter.com/statuses/update.json', false, args.Item(0), args.Item(1));
xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
xmlhttp.setRequestHeader('X-Twitter-Client', 'TwitterClient.js by muumoo.jp');
xmlhttp.setRequestHeader('X-Twitter-Client-Version', '0.1');
xmlhttp.setRequestHeader('X-Twitter-Client-URL', 'http://muumoo.jp/download/data/twitterclient.js.xml');
xmlhttp.send('status=' + encodeURIComponent(statuses.join(' ')));
if(xmlhttp.status != 200) WScript.echo(xmlhttp.status + ' ' + xmlhttp.statusText);
})();
以下、メモ。