Gマイナー志向

とくに意味はありません

WX320KからTwitterへ直接Update

ケータイからTwitterへの投稿は、メール等で別サーバ経由のAPI投稿するのが一般的のようだ。
しかし第三者にパスワードを蒐集される可能性は避けたいし、かといって自分でサーバを建てるのは面倒。なのでWX320K単体で送れるようにしてみた。

以下のHTMLファイルをWX320K内に保存し、ローカルからPOSTで投稿する。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML Basic 1.0//EN" "xhtml-basic10.dtd">
<html lang="ja" xml:lang="ja" xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <meta http-equiv="Content-Script-Type" content="text/javascript" />
    <title>Twitter: What are you doing?</title>
    <script type="text/javascript">
    //<![CDATA[
    function checkLength() {
      var maxchars = 140;
      if(document.twitterForm.status.value.length > maxchars){
        return confirm(maxchars+'bytesを越えてますがよろしいですか?');
      }
      return true;
    }
    //]]>
    </script>
  </head>
  <body>
    <h3>What are you doing?</h3>
    <form name="twitterForm" method="post" action="http://twitter.com/statuses/update.xml">
      <textarea name="status" rows="7" cols="23"></textarea>
      <br />
      <input type="submit" value="Update" onclick="javascript:return checkLength()" />
    </form>
  </body>
</html>

このhtmlをweb上に置いて投稿した場合は他サイトからのPOSTと見做されて投稿できないが、WX320Kのローカルに置くと、リファラーがfile://になる(んだと思う)ので直接投稿ができるようだ。
WX320Kに搭載されてるOpera7はXHR非対応なので普通にPOST。結果は処理できないので生resultが返ってくるのがちょっと格好悪い。XHR対応なフルブラウザ搭載ケータイならもっとスマートにできるだろう。

BASIC認証が毎回表示されてウザイ方は、

http://twitter.com/statuses/update.xml

の部分を、

http://[ID]:[password]@twitter.com/statuses/update.xml

に変えれば解決。ただしセキュリティ的に問題あり。リファラーで漏れる場合がありますよ

ちょっとセキュアにしたければ、SSL経由に変えてやる。

https://[ID]:[password]@twitter.com/statuses/update.xml

ただし、SSL通信開始などのダイアログが出てくるのでホップ数は増える。また、https経由UpdateはTwitter API Documentationには書かれてないので非公式。それにSSLでもリファラーで漏れる可能性がある。認証周りは再検討の余地有り。

WX320Kでと書いたが、ローカルにHTMLを保存できるケータイなら使えるはず。使いにくい場合は好きなように改造してください。

WX320K的によりベターな方法はJavaで実装することかな。まぁそこまでするほどのものでもないですが。