Javascript関連情報

更新日:2005年05月31日

Ajaxを使おう RSSリーダーを作る

今回は、Ajax関連のツールを使って、RSSファイルを読み込んで加工する方法を紹介します。





  • 3: ブログのエントリーを読み込む
    (*このサンプルは上記リンク参照)

    ブログによってRSSのサポートは異なるようですが、ここでは Movable Type がサポートする数種類のRSSのうち、Atomを読み込んでみます。他のブログやRSSタイプでも、タグ付けが多少異なるだけで、基本的にはそれほど大きくは変わりません。カスタマイズする際はXMLのツリー構造に注目し、欲しい要素を「.」や配列でつないで取り出していく感覚で試してみてください。

    動作ブラウザ
    win mac linux
    n7 m1 e6 o7 o8 n7 m1 e5 s1 n7 m1 k3
    × ×


    Movable TypeのAtom.xmlは、たとえばhttp://jsgt.org/mt/01/atom.xmlなどを開いてみるとわかりますが、次のようなツリーになっています。

    
     <?xml version="1.0" encoding="UTF-8" ?> 
    - <feed>
    	:
    	:
    	-<entry>
    		<title>エントリー1</title> 
    		<link rel="alternate" type="text/html" href="http://...." /> 
    		<modified>2005-05-....</modified> 
    		<issued>2005-05-31....</issued> 
    				:
    				:
    	 </entry>
    	-<entry>
    		<title>エントリー2</title> 
    		<link rel="alternate" type="text/html" href="http://...." /> 
    		<modified>2005-05-....</modified> 
    		<issued>2005-05-3....</issued> 
    				:
    				:
    				
    	 </entry>
     </feed>
    

    こういう構成になっています。これをJKL.ParseXMLでJSONへ展開すると、エントリータイトルは、 oj.feed.entry[i].title、リンクURLは、oj.feed.entry[i].link.hrefという具合にアクセスできるようになります。

    つまり、feed要素の下のentry要素の[i]番目にあるtitleとか、feed要素の下のentry要素の[i]番目にあるlinkのhref属性ということです。

    このアクセス方法を使って、下記のように処理したのがこのサンプルです。

    
    <button onclick="rssReader('http://jsgt.org/mt/01/atom.xml')">
    MobableType のatom.xml</button><br>
    
    <!-- JKL.ParseXMLを読み込む -->
    <script type="text/javascript" src="./jkl-parsexml.js"></script>
    
    <script>
    <!--
    
    //プログレスバー
    var bar
    
    //メイン関数
    function rssReader(url)
    {
    	//プログレスバー開始
    	document.getElementById('out1').innerHTML = ''
    	bar = setInterval('progressbar()', 100 )
    
    	// JKL.ParseXMLオブジェクトを生成
    	var xml = new JKL.ParseXML( url );  
    	var func = function ( data )        // 呼び出し先関数を定義する
    	{  
    		onloaded2( data );              //コールバック
    	}
    	xml.async( func );                  // 呼び出し先関数を指定する
    	xml.parse();                        // ダウンロード~解析~関数呼び出しする
    }
    
    
    //RSSを受信時に起動するコールバック関数
    function onloaded2(xml)
    {
    	var data =""
    
    	//feed要素以下のentry要素を順番に処理
    	for(i in xml.feed.entry)
    	{
    		//カテゴリがAjaxのみを出力する
    		if(xml.feed.entry[i]["dc:subject"]=="Ajax")
    		{
    			//出力用HTMLを作る
    			data += '<a href="'+xml.feed.entry[i].link.href+'">'
    
    			//24文字に制限
    			data += xml.feed.entry[i].title.substr(0,24)
    			data += '</a>'
    			data += '<br>'
    
    			//時間を取り出す
    			var time = xml.feed.entry[i].issued
    				time = time.split("T").join(" ").split("+")[0]
    			data += '('+time+')<br>'
    		}
    	}
    	//プログレスバー停止
    	clearInterval(bar)
    	//出力
    	document.getElementById('out1').innerHTML = data
    }
    
    //プログレスバー
    function progressbar()
    {
    	document.getElementById('out1').innerHTML += '|'
    }
    
    //-->
    </script>
    <br />
    
    <!-- ここへ出力します -->
    <div id="out1" 
         style ="font-size:0.8em;margin:12px;" ></div>
         
    
    



  • 4: RSSをプレロードする
    (*このサンプルは上記リンク参照)

    読み込みボタンやリンクをクリックしてから読み込み始めたのではレスポンスに不満を感じることもあると思います。データ量がそれほど多くないRSSでは、Imageオブジェクトの先行読み込み処理のような、プレロードを行っておくのも良い方法かもしれません。このサンプルは、ページにを読み込む同時に、RSSのプレロードを開始します。したがって、ボタンを押したときには、キャッシュされていたRSSリストが一瞬で表示されるようになります。

    動作ブラウザ
    win mac linux
    n7 m1 e6 o7 o8 n7 m1 e5 s1 n7 m1 k3
    × ×


    
    <button onclick="rssOut4()">
    MobableType のatom.xml</button><br>
    
    <!-- JKL.ParseXMLを読み込む -->
    <script type="text/javascript" src="http://jsgt.org/ajax/ref/test/json/jkl/v0.07/jkl-parsexml.js"></script>
    
    <script>
    <!--
    
    //プログレスバー
    var bar
    //プレロードしたデータ用
    var data4 =""
    
    //出力用DIV
    document.write('<div id="out4" style ="font-size:0.8em;margin:12px;"></div>')
    
    //プレロード
    rssPreLoader4('http://jsgt.org/mt/01/atom.xml')
    function rssPreLoader4(url)
    {
    
    	//プログレスバー開始
    	document.getElementById('out4').innerHTML = 'pre loading...'
    	bar = setInterval('progressbar4()', 100 )
    
    	// JKL.ParseXMLオブジェクトを生成
    	var xml = new JKL.ParseXML( url );  
    	var func = function ( data4 )        // 呼び出し先関数を定義する
    	{  
    		onloaded4( data4 );              //コールバック
    	}
    	xml.async( func );                  // 呼び出し先関数を指定する
    	xml.parse();                        // ダウンロード~解析~関数呼び出しする
    
    }
    
    //RSSを受信時に起動するコールバック関数
    function onloaded4(xml)
    {
    	data4 =""
    	
    	//feed要素以下のentry要素を順番に処理
    	for(i in xml.feed.entry)
    	{
    		//カテゴリがAjaxのみを出力する
    		if(xml.feed.entry[i]["dc:subject"]=="Ajax")
    		{
    			//出力用HTMLを作る
    			data4 += '<a href="'+xml.feed.entry[i].link.href+'">'
    
    			//24文字に制限
    			data4 += xml.feed.entry[i].title.substr(0,24)
    			data4 += '</a>'
    			data4 += '<br>'
    
    			//時間を取り出す
    			var time = xml.feed.entry[i].issued
    				time = time.split("T").join(" ").split("+")[0]
    			data4 += '('+time+')<br>'
    		}
    	}
    	//プログレスバー停止
    	clearInterval(bar)
    	document.getElementById('out4').innerHTML = 'ok now loaded.'
    
    	return data4
    }
    
    //出力
    function rssOut4()
    {
    	//出力
    	document.getElementById('out4').innerHTML = data4
    }
    
    //プログレスバー
    function progressbar4()
    {
    	document.getElementById('out4').innerHTML += '|'
    }
    
    //-->
    </script>
    
    

    ところで、Ajaxの「A」は、Asynchronous(非同期)のAです。では、この非同期とは何でしょう? 次回は、実際に同期処理と非同期処理のサンプルを使って体感してみます。

  • 1 2
    • 印刷する
    • ブックマークする
    • 携帯に送る
    • ブログに書く

    あわせて読みたい

    この記事の担当ガイド

    写真

    高橋 登史朗

    Javascriptをはじめ、Ajax、jQueryの著書多数のガイドが、何かと最近騒がれているJa…

    続きを読む

    住まいには、人の個性がよく現れるもの。同じ空間をどのように使うかで、雰囲気も、快適さも大きく変わってくる。ここでは、「建築家と家を建てる」ガイド の川畑博哉氏が厳選した10軒を紹介し、建築家それぞれのこだわりのポイントを紹介しよう。建築のプロたちが考え出した、マネしたくなるアイデアが満載! さぁ、いますぐチェック!

    人気Javascriptランキング

    Powered by 価格.com

    デジタル関連コミュニティ

    北欧好きが、愛用の北欧モノを見せ合うコミュニティ

    メルマガ登録

    【デジタルメルマガ】オトナのオトコなら知っておきたい、PCやデジモノに関する情報をお届けします。

    ショッピングカタログ

    All About ウェブマガジン

    女性向け

    雨が楽しくなる!レイングッズ15

    男性向け

    マネしたくなるアイデア住宅

    All About モバイル

    QRコード

    All Aboutがケータイで読める!

    オススメ記事をメールでチェック

    知識・経験を生かして、記事を書いてみませんか?