Google Gadgetを作ってみよー

今日は、JavaScript Day! と勝手に決め、前々から気になっていた
Google Gadgetの記事が出ていたので触発された。
ちょっといじってみよ。

はじめに

builderの『5分で学ぶGoogle Gadget開発』を
読む。

ふむふむ。
作るのはxmlベース。Contentの中にJavaScriptとHTMLで記述する。
すごくお手軽だ、、、

<?xml version="1.0" encoding="UTF-8"?>
<Module>
    <ModulePrefs title="はろーー"/>
    <Content type="html">
        <![CDATA[
            はろーわーるどーーー
        ]]>
    </Content>
</Module>

その他、基本的なタグを記事より抜粋

Module ・・・ルート要素
ModulePrefs ・・・ガジェットのメタデータを記述
Require ・・・ガジェットが必要とするライブラリ
Locale, MayRequireなどその他のタグ
UserPrefs ・・・ガジェットが必要とするユーザ設定
Content ・・・HTML/JavaScriptなどでガジェットの内容を記述する

続いて、
Google ガジェット API 開発者向けガイド』のスタートガイドから目を通し始める

開発環境設定

Google Gadget Editorをつかう。
設定は簡単。以下からガジェットを自分のiGoogleに追加するだけ。
http://www.google.co.jp/ig/directory?q=gadget+editor&root=%2Fig&dpos=top&url=www.google.com/ig/modules/gge.xml

このガジェットだけのタブを用意して、タブの編集で、レイアウトを1列にすると使いやすい。
あ〜〜!!!iGoogleが定期リロードして、途中まで書いたソースが消えた〜〜〜。
このリロードをとめる方法はないのか〜??
まめにSaveするしかないかな、、、、

冒険の書が消えた気分だ、、、、orz

面倒だけど、Editorで書く>貼ってプレビューでやる。

いじってみる

開発環境が整ったところで作ってみる。

まずは、JavaScriptを使ってみる。
<?xml version="1.0" encoding="UTF-8"?>
<Module>
    <ModulePrefs title="JavaScript Test" />
        <Content type="html">
        <![CDATA[
            <script type="text/javascript">
                function alertHoge(){  alert("hoge");}
            </script>
            <input type="button" value="hoge" onClick="alertHoge();"></input>
        ]]>
    </Content>
</Module>

さくっと書いたのが、プレビューで確認できる。
お手軽すぎてすげーーー。

APIを利用して、自分の日記のタイトルを取得してみた。
<?xml version="1.0" encoding="UTF-8"?>
<Module>
    <ModulePrefs title="RSS Fetcher" />
        <Content type="html">
            <![CDATA[
                <script type="text/javascript">
                    window.onload = function (){
                        var url = 'http://d.hatena.ne.jp/daisun/rss/';
                        _IG_FetchXmlContent(url, function(response){
                            var items = response.getElementsByTagName('item');
                            var rss = "<ul>";
                            for(var i = 0; i < items.length; i++){
                                rss += "<li>" + items[i].childNodes[0].text + "</li>";
                            }
                            rss += "</ul>";
                            document.getElementById("rss").innerHTML = rss;
                         });
                    };
                </script>
                <div id="rss" style="font-size:12px;"></div>
            ]]>
        </Content>
</Module>

変なボンミスで時間かかった、、、

リンクにしてタイトルも付けてみる

<?xml version="1.0" encoding="UTF-8"?>
<Module>
    <ModulePrefs title="RSS Fetcher" />
        <Content type="html">
            <![CDATA[
                <script type="text/javascript">
                    window.onload = function (){
                        var url = 'http://d.hatena.ne.jp/daisun/rss/';
                        _IG_FetchXmlContent(url, function(response){
                            var items = response.getElementsByTagName('item');
                            var rss = '<h3>' + response.getElementsByTagName('title')[0].text + '</h3>';
                            rss += '<ul>';
                            for(var i = 0; i < items.length; i++){
                                rss += '<li>';
                                rss += '<a href="' + items[i].childNodes[1].text + '" target="_blank">';
                                rss += items[i].childNodes[0].text;
                                rss +='</a></li>';
                            }
                            rss += '</ul>';
                            document.getElementById('rss').innerHTML = rss;
                         });
                    };
                </script>
                <div id="rss" style="font-size:12px;"></div>
            ]]>
        </Content>
</Module>

このgetElementByTagName()とかでのとってき方や、ループでHTMLタグはさみながら文字列を組み立てるって
やり方は、スマートなのだろうか、、、、

idを指定して取ってくるようにした。

で、できたのがこれ。

う〜ん、、、、