muumoo.jp


ニュース記事検索


過去ログ 2007年04月10日 - ニュース過去ログ

ニュース過去ログ

2007/04/10 管理人日記 Twitterに投稿するJavaScriptを作ってみた(MM Command Sense でも使えるよ) (管理人日記)

昨日書いたように、Twitterを使い始めました。

基本的にはこれは「今何をしているか」をログに残すものであるとする。チャット的な使い方は、まあ盛り上がってるときは良いけど、飽きたら終わり。やっぱり「今何をしているか」の機能は大事にしたいと思う。

APIが用意されているので、自動的に更新することが可能なのがポイント。聴いてる音楽、開いているURL、見ているテレビ、読んでる本、起動しているアプリ、食べてるおやつ、飲んでるジュース、着ている服、横にいる人、向かい側にいる人、今メール書いてる相手、そんなのを自動でログに残せる可能性があるわけです。

APIを使ってjsを作ってみた

で、まあそんなことの前哨戦として、とりあえずJavaScript(WSH)から投稿するやつを作ってみた。

上記のリンクからダウンロードができますが、一応この記事の最後にソースコードを掲載しておきます。

このjsはコマンドライン引数で

を受け取り、Twitter APIを使って投稿します。それだけです。

MM Command SenseからTwitterに投稿する

twitterclient.jsを使えば、拙作コマンドラインランチャ「MM Command Sense」を使ってTwitterに投稿することができるようになります。

  1. twitterclient.jsファイルを適当な場所に配置。
  2. /config/commandsに、配置したtwitterclient.jsへのショートカットを作成。名前は「t」とでもしておきます。
  3. ショートカットのプロパティを開いて、メールアドレスとパスワードをコマンドライン引数に追加する(スペース区切りで)。
  4. 「設定を再読込」する。

これで準備完了。あとは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);
})();

以下、メモ。

この記事のURI:
http://muumoo.jp/news/2007/04/10/0twitterclient.html


Copyright© 2002-2007 muumoo.jp All Rights Reserved.