google gadgetのコンテスト

iGoogleガジェットコンテストですかー。ガジェットだからなんとなくお気楽に作れるっぽいですなー。

そんなわけで、仕事はそこそこに切り上げて、ガジェット開発ってどんな感じなのかちょっと調べてみた。
イマドキのjavascriptにはそれほど詳しくないのだけど、リファレンスとかサンプル見ながら試してみた数時間。

で、いろいろツギハギして作ってみたtwitter publictimelineビューワー(なんと大げさな。。。)
twitterのpublic timelineをJSON変換で取ってきて表示する
・minimessageモジュールのcreateTimerMessage(指定時間が経つと消える)を使ってちょっと動きをつけてみた
・実はスクラッチパッドでしか試してない(http://www.google.com/apis/gadgets/gs.html#Scratchpad)

googleJSON変換でキャッシュされると最新のフィードが取れないのでURLを時間で変化させている。あまり良い方法じゃないと思う。10秒毎とかに切り捨てるようにしないとなあ、、、まあ、とりあえず出しておく。。。

<?xml version="1.0" encoding="UTF-8" ?>
<Module>
  <ModulePrefs title="Twit of a minutes" height="100">
  <Require feature="minimessage"/>
  </ModulePrefs>
  <Content type="html">
  <![CDATA[
<script language="JavaScript">
//var prefs = new _IG_Prefs(__MODULE_ID__);
var showdate = false;
var summary = false;

// todo: use userprefs...
var entries = 20;
var dismiss_interval = 5;

// init
var msg = new _IG_MiniMessage(__MODULE_ID__);
var loading_message = msg.createStaticMessage("loading");

// feed handle
function feed_handle (){
  msg.dismissMessage(loading_message)
  loading_message = msg.createStaticMessage("loading");
  nowDate = new Date();
  _IG_FetchFeedAsJSON("http://twitter.com/statuses/public_timeline.atom?" + nowDate.getTime(),
    function(feed) {
      if (feed == null){ 
        alert("no data.");
        return;
      }
      msg.dismissMessage(loading_message);
      loading_message = msg.createStaticMessage(feed.Title);
      if (feed.Entry) {
        for (var i = feed.Entry.length - 1; i >= 0; i-- ) {
          var date = new Date((feed.Entry[i].Date) * 1000); 
          msg.createTimerMessage (date.toLocaleTimeString() + " " + feed.Entry[i].Title, dismiss_interval * ( feed.Entry.length - i ));
        }
      }
    setTimeout ( 'feed_handle()', entries * dismiss_interval * 1000 );
    }, entries, summary
  );
}
feed_handle ();

</script>
  ]]>
  </Content>
</Module>

あ、feed_handleの外にあるloading_messageって、、、ひどいなあ。あとで直そ。。。
さっさと寝よ。