ActiveDesktop_06

Last-modified: 2014-08-16 (土) 12:41:50 (2121d)

ActiveDesktop_05

現在放送中のTV番組一覧を表示する

06_01.png

構成

前回の 05 RSSリーダーを作成する と同じ方法で、放送中のTV番組のRSSを So-netのTV王国 より取得し、整形して表示します。いわゆるRSSリーダーです。

かなりのハードコーディングっぷりで申し訳ない。

スクリプトファイルの作成

rss_tv.js

document.write("<DIV id=\"rss_tv\"></DIV>\n");

function getRssTv(){
	
	var url = "http://tv.so-net.ne.jp/guest/rss/rssByCurrentTime.action?index=0&areaId=13";
	var aryChannelUrl = new Array(); //チャンネルリスト。この順番で表示される。
	aryChannelUrl["NHK総合"] = "http://www.nhk.or.jp/";
	aryChannelUrl["NHK教育"] = "http://www.nhk.or.jp/";
	aryChannelUrl["日本テレビ"] = "http://www.ntv.co.jp/";
	aryChannelUrl["TBSテレビ"] = "http://www.tbs.co.jp/";
	aryChannelUrl["フジテレビ"] = "http://www.fujitv.co.jp/";
	aryChannelUrl["テレビ朝日"] = "http://www.tv-asahi.co.jp/";
	aryChannelUrl["テレビ東京"] = "http://www.tv-tokyo.co.jp/";
	var intLimit = 3; //番組表示数限界。
	
	var xmlDom = new ActiveXObject("microsoft.XMLDOM");
	
	var strOut = ""; //HTMLソース格納用
	var aryGotStr = new Array();
	var aryGotCount = new Array();
	
	for(i in aryChannelUrl){ //配列初期化
		aryGotStr[i] = "<A href=\""+aryChannelUrl[i]+"\" target=\"tv\" title=\""+
		aryChannelUrl[i]+"\" class=\"channel\">"+"["+i+"]</A><BR />\n";
		aryGotCount[i] = 0;
	}
	
	xmlDom.async=false;
	if(!xmlDom.load(url)){
		alert("取得エラー\n"+url);
		return;
	}
	
	try{
		var rdfTitle = xmlDom.documentElement.selectSingleNode('/rdf:RDF/channel/title').text;
		var rdfLink = xmlDom.documentElement.selectSingleNode('/rdf:RDF/channel/link').text;
		
		var aryItem = xmlDom.documentElement.selectNodes('/rdf:RDF/item');
		
		strOut += "<TABLE>\n";
		
		for(i=0;i<aryItem.length;i++){
			if(aryItem[i].selectSingleNode("description")){
				strDescription = aryItem[i].selectSingleNode("description").text;
			}else continue; //descriptionが無ければ無視
			
			if(strDescription.match(/\[(.+)\]/)){ //descriptionからチャンネル名を抜き出す
				strChannel = RegExp.$1;
			}else continue; //無ければ無視
			
			if(typeof(aryGotStr[strChannel])=="undefined") continue; //チャンネルリストになければ無視
			
			aryGotCount[strChannel]++;
			if(aryGotCount[strChannel] > intLimit) continue; //限界数に達したら無視
			
			strProgram = aryItem[i].selectSingleNode("title").text;
			aryGotStr[strChannel] +=
			"<A href=\""+aryItem[i].selectSingleNode("link").text+"\" title=\""+strDescription + "\r\n" +strProgram+"\" target=\"tv\"";
			if(aryGotCount[strChannel] == 1) aryGotStr[strChannel] += " class=\"now\"";//現在放送中の番組を強調
			aryGotStr[strChannel] += ">"+strProgram.substring(0,13)+"</A><BR />\n";
			
		}
		for(i in aryGotStr){
			strOut += "<TD>"+aryGotStr[i]+"</TD>";
		}
		strOut += "</TR></TABLE>\n";
	}catch(e){
		strOut = "RSS取得/解析失敗\n";
	}
	document.getElementById("rss_tv").innerHTML=strOut;
	return;
}

getRssTv();
var tvTimer = setInterval("getRssTv()",7*60*1000);

上記のようなスクリプトファイルを作成し、BODY内でインクルードしてください。

<SCRIPT src="../include/rss_tv.js"></SCRIPT>

みたいな。