2ntブログ
2024 101234567891011121314151617181920212223242526272829302024 12
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Flashでデザイン 差がつくBlogサイトの作り方Flashでデザイン 差がつくBlogサイトの作り方
(2005/04)
原 一浩

商品詳細を見る


*****今回の関連サイト****************************************************
Yahoo!デベロッパーネットワーク(Yahoo!APIのページ)
Flashゲーム講座&ASサンプル集(アクションスクリプトに関する内容が豊富なサイト)
XMLを読もう(ASでのXML処理方法が丁寧に書いてあるサイト)
************************************************************************

Flashを使って、XMLを取得し、表示するのに挑戦してみました。
PHPだと簡単なんですけどね。。。

では、まずこちらをご覧ください。



ボタンを押すと、Yahoo!オークションAPIが上段枠内に読み込まれます。
中段には、読み込みの状況が表示されます。
下段には、上段に読み込まれたXML文章の特定の値を表示しています。

それでは、ソースです。

/**
*
* 2008.07.27 外部APIを取得し、表示する
*
* XMLはYahoo!オークションAPIから取得
* ダイナミックテキストに表示する( 各テキストには変数名が定義されている )
*
*/

// XMLオブジェクトの生成
var xml_obj = new XML();

// 余計な改行などを削除
xml_obj.ignoreWhite = true;

// 変数の定義
var categoryIdValue = 0;

// 読み込み状況取得
xml_obj.onLoad = function(check){
    if(check){
        // 文字化け対策
        System.useCodepage = false;
        // 取得したXMLを文字列にする
        str = xml_obj.toString();

        SetMessage("読み込みが完了して変数にアクセスが可能");

    }else{
        SetMessage("読み込み失敗");
    }

    // 読み込みが完了したら表示処理を行う
    if(xml_obj.status == 0){
        SetMessage("解析完了しました");

        /**
        *
        * 表示させる値の定義
        * 変数名 = XMLオブジェクト.ルートノード.子ノード1.子ノード1の子ノード.表示させる値
        *
        */
        categoryIdValue = xml_obj.childNodes[0].childNodes[7].childNodes[1].firstChild.nodeValue;

        SetId( categoryIdValue );

    }


} // onLoadの処理終了

/**
*
* XMLファイルを読み込む関数
* urlはボタンに定義されている
*
*/
function LoadXmlFunc(url){
    xml_obj.load(url);
}

// メッセージを表示する関数
function SetMessage(str){
    msg = str + "\n";
}

// 定義した値を表示する
function SetId( categoryIdValue ) {
    id = "ID表示成功!!:" + categoryIdValue;
}


それぞれのテキストボックスには変数名が付与されています。
上から、「str」「msg」「id」です。

また、ボタンにもASが記述されています。


on ( press ) {
    LoadXmlFunc (
        "http://api.auctions.yahoo.co.jp/AuctionWebService/V1/CategoryTree?
        appid=YahooDemo&category=23568"
    );
}


このボタンが押されたら、指定のURLへアクセスし、XMLを取得してくるようになっています。

では、ソースの解説です。
コメントにも書いてあるので、ざっと説明させてもらいます。


まず、XMLオブジェクトを生成する必要があります。
「new XML」で生成できるので、簡単です。
ですが、このまま読み込むと、非常に都合が悪いです。
なぜなら、空白や改行がそのままXMLに読み込まれてしまうのです。
・・・デフォの設定なので、変更してあげなければいけません。
そこで、「xml_obj.ignoreWhite = true;」と指定します。
こうすると、余計な部分を削除してくれるので助かります。
これで、土台の完成です。

読み込むには、「load(指定のURL)」を使います。
これで、あらかじめ生成しておいたXMLオブジェクトにXMLが読み込まれます。

あとは、この読み込み状況により、処理を変えます。
今回は、全て読み込まれてから処理を始めたかったので、「status == 0」としました。
他にも判定数値はいっぱいあります。

ただXMLを読み込んでも、何も始まりません。
そこで、下段枠内に特定の値を表示させてみました。

変数に、XMLノードを指定します。
「xml_obj.childNodes[0].childNodes[7].childNodes[1].firstChild.nodeValue」という長い部分です。
親ノードから順々に降りていけばいいのですが、これが少しややこしいです。
恐らく、もっといいやり方があると思いますが、今回の私ではこれが限界。
表示させるまでで、もうヘトヘトになってしまいました。

でも、とりあえず表示されるようにはなりました。
「windows」と表示されていると思います。

また、テキストボックスに変数名を定義しておく事で、表示させたい内容を指定するだけで表示させることが出来ます。
この技は結構使えるので、覚えておいても損はないかも。
(「id = "ID表示成功!!:" + categoryIdValue;」などの部分)

「childNodes」の部分が配列なので、もっと工夫が出来そう。
現状では、大きく細かいXMLは厳しいものがあるので、どうにかしたいと思う。

どうにか出来たら、また報告したい。

今回は、表示まで出来たので、メモしておく。


コメント非表示