�@RSS 1.0, RSS 2.0, Atom�ɑΉ������Ȉ�RSS���[�_�[���쐬���Ă݂܂��B�܂��A�ǂݍ��܂ꂽ�f�[�^��RSS 1.0�Ȃ̂�RSS 2.0�Ȃ̂�Atom�ׂ�K�v������܂��B�ȉ��̃X�N���v�g�Ŏ�ނׂ܂��BRSS 1.0�̏ꍇ��RDF, RSS2.0�̏ꍇ��RSS, Atom�̏ꍇ��Atom�̕�����Ԃ��܂��B�����ɂ͕K���A�����ꂩ�̌`���ł��邱�Ƃ��O��Ȃ̂œK����XML�f�[�^�̏ꍇ�ɂ͐��������ʂł��܂���B�܂��A���@�I�ɍ����ĂȂ�����UTF-8�̕����R�[�h�łȂ��ꍇ�Ȃǂ����������ʂł��܂���B
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<title>RSS�̎�ނׂ�</title>
<link rel="stylesheet" href="main.css" type="text/css" media="all">
<script type="text/javascript" src="xmlhttp.js"></script>
<script type="text/javascript"><!--
function rssCheck()
{
var rssURL = $("siteURL").value;
httpObj = createXMLHttpRequest(displayData);
if (httpObj)
{
httpObj.open("GET","getrss.rb?query="+rssURL+"&cache="+(new Date()).getTime(),true);
httpObj.send(null);
}
}
function displayData()
{
if ((httpObj.readyState == 4) && (httpObj.status == 200))
{
checkRSSver(httpObj.responseXML);
}else{
$("result").innerHTML = "�ǂݍ��ݒ��ł�...";
}
}
// ��ނׂ�
function checkRSSver(sXML)
{
var resultText = "";
try { tName = sXML.childNodes[1].tagName; }
catch(e){ var tName = sXML.childNodes[0].tagName; }
if (tName == "feed") resultText = "Atom";
if (tName == "rss") resultText = "RSS";
if (tName == "rdf:RDF") resultText = "RDF";
$("result").innerHTML = tName + "<br><b>" + resultText + "</b>";
}
// --></script>
</head>
<body>
<h1>RSS�̎�ނׂ�</h1>
<form method="get" name="ajaxForm" onsubmit="rssCheck();return false;">
<select id="siteURL">
<option value="http://hotwired.goo.ne.jp/news/index.rdf">Wired (RSS 1.0/RDF)</option>
<option value="http://japan.cnet.com/rss/index.rdf">CNET (RSS 1.0/RDF)</option>
<option value="http://rss.fujitv.co.jp/whatsnew.xml">�t�W�e���r (RSS 2.0)</option>
<option value="http://www.openspc2.org/blog/atom.xml">OpenSpace (Atom)</option>
</select>
<input type="button" value="�`�F�b�N����" onClick="rssCheck()">
</form>
<div id="result"></div>
</div>
</body>
</html>
�@RSS 1.0��RSS 2.0�͓����X�N���v�g�œ��삵�܂����AAtom�͓����X�N���v�g�����삵�܂���B������Atom�̏ꍇ�����ʂ̏������s���܂��BRSS�ł͋L���̃^�C�g������N�A�v��L����item�^�O���ɁAAtom�ł�entry�^�O���ɋL�q����Ă��܂��B����͈ȉ��̂悤�Ɏ�ނʂ��ēǂݏo���^�O��ݒ肵�Ă����܂��B
if (ver == "Atom")
{
itemTag = "entry";
catTag = "summary";
}
�@��͈ȉ��̂悤�ɂ���ƃJ�e�S���̏�z��itemList�Ɋi�[����܂��B
itemList = sXML.getElementsByTagName(itemTag)
�@���Ƃ̓J�e�S�����^�C�g���ƃ����N�A�v��L����ǂݏo���܂��B�܂��A�����N�ł���RSS�ł�link�^�O�̍ŏ��̃m�[�h�̓��e��ǂݏo���܂����AAtom�̏ꍇ�ɂ�link�^�O��href�����̓��e��ǂݏo���܂��B
�@�v��L����RSS��Atom�Ń^�O���قȂ邽�߁A��ނʂ���RSS�Ȃ�description�AAtom�Ȃ�summary�^�O�̓��e��ǂݏo���܂��B�������A�v��L���̃^�O�͕K�{�ł͂Ȃ����߁A�ȗ����ꂽ�ꍇ���l���Ă����K�v������܂��B�ȗ����ꂽ�ꍇ�ɓǂݏo�����Ƃ���Ƃ̓G���[����������̂�try..catch���g���ď������܂��B�i�T���v����
���s�����j
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<title>RSS, Atom�̌��o���ƋL�����e��\������</title>
<link rel="stylesheet" href="main.css" type="text/css" media="all">
<script type="text/javascript" src="xmlhttp.js"></script>
<script type="text/javascript"><!--
function rssSearch()
{
var rssURL = $("siteURL").value;
httpObj = createXMLHttpRequest(displayData);
if (httpObj)
{
httpObj.open("GET","getrss.rb?query="+rssURL+"&cache="+(new Date()).getTime(),true);
httpObj.send(null);
}
}
function displayData()
{
if ((httpObj.readyState == 4) && (httpObj.status == 200))
{
parseRSS(httpObj.responseXML);
}else{
$("result").innerHTML = "�ǂݍ��ݒ��ł�...";
}
}
// RSS, Atom�����
function parseRSS(sXML)
{
var ver = checkRSSversion(sXML);
var itemTag = "item";
var catTag = "description";
if (ver == "Atom")
{
itemTag = "entry";
catTag = "summary";
}
var resultText = rssTitle = rssLink = rssText = "";
var itemList = sXML.getElementsByTagName(itemTag);
for (var i=0; i<itemList.length; i++)
{
rssTitle = itemList[i].getElementsByTagName("title")[0].childNodes[0].nodeValue;
if (ver == "Atom")
{
rssLink = itemList[i].getElementsByTagName("link")[0].getAttribute("href");
}else{
rssLink = itemList[i].getElementsByTagName("link")[0].childNodes[0].nodeValue;
}
try { rssText = itemList[i].getElementsByTagName(catTag)[0].childNodes[0].nodeValue; }catch(e){ rssText = "" }
resultText += '<a href="'+rssLink+'">'+rssTitle + '</a><div class="desc">'+rssText+'</div>';
}
$("result").innerHTML = resultText;
}
// ��ނׂ�
function checkRSSversion(sXML)
{
var resultText = "";
try { tName = sXML.childNodes[1].tagName; }
catch(e){ var tName = sXML.childNodes[0].tagName; }
if (tName == "feed") resultText = "Atom";
if (tName == "rss") resultText = "RSS";
if (tName == "rdf:RDF") resultText = "RDF";
return resultText;
}
// --></script>
</head>
<body>
<h1>RSS, Atom�̌��o���ƋL�����e��\������</h1>
<p>Safari�ł͓��삵�Ȃ�</p>
<form method="get" name="ajaxForm" onsubmit="rssSearch();return false;">
<select id="siteURL">
<option value="http://www.openspc2.org/blog/atom.xml">OpenSpace (Atom)</option>
<option value="http://blog.hada.org/naoki/atom.xml">�H�c���� (Atom)</option>
<option value="http://hotwired.goo.ne.jp/news/index.rdf">Wired (RSS 1.0/RDF)</option>
<option value="http://japan.cnet.com/rss/index.rdf">CNET (RSS 1.0/RDF)</option>
<option value="http://www3.asahi.com/rss/index.rdf">Asahi.com (RSS 1.0/RDF)</option>
<option value="http://nikkeibp.jp/jp/flash/index.rdf">���oBP (RSS 1.0/RDF)</option>
<option value="http://japan.zdnet.com/rss/news/index.rdf">ZDNET (RSS 1.0/RDF)</option>
<option value="http://rss.news.yahoo.com/rss/nasashuttle">Yahoo.com - NASA - (RSS 2.0)</option>
<option value="http://rss.fujitv.co.jp/whatsnew.xml">�t�W�e���r (RSS 2.0)</option>
</select>
<input type="button" value="��������" onClick="rssSearch()">
</form>
<div id="result"></div>
</div>
</body>
</html>
�@����ŁA�����Ƃ��������Ƃ���ł����A���������Ƃ�Safari 2�ł͓��삵�܂���BSafari 2�ł�getElementsByTagName()�ŁA���܂��^�O���X�g���擾�ł��Ȃ�������AgetAttributes()�����Ғʂ蓮�삵�Ȃ��ꍇ�����邽�߂ł��B�����ŁAgetElementsByTagName()���g�������@����߂āA�m�[�h�ׂĊY������m�[�h���i�^�O���j�����邩�ǂ�����for()���߂ŌJ��Ԃ����ׂ܂��B���̕��@�͌����̗ǂ����@�ł͂���܂��ASafari 2�ł����̃u���E�U�ł������X�N���v�g�œ��삳���邱�Ƃ��ł��܂��B�i�T���v����
���s�����j
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<title>RSS, Atom�̌��o���ƋL�����e��\������</title>
<link rel="stylesheet" href="main.css" type="text/css" media="all">
<script type="text/javascript" src="xmlhttp.js"></script>
<script type="text/javascript"><!--
ver = "";
function rssSearch()
{
var rssURL = $("siteURL").value;
httpObj = createXMLHttpRequest(displayData);
if (httpObj)
{
httpObj.open("GET","getrss.rb?query="+rssURL+"&cache="+(new Date()).getTime(),true);
httpObj.send(null);
}
}
function displayData()
{
if ((httpObj.readyState == 4) && (httpObj.status == 200))
{
parseRSS(httpObj.responseXML);
}else{
$("result").innerHTML = "�ǂݍ��ݒ��ł�...";
}
}
// RSS, Atom�����
function parseRSS(sXML)
{
var resultText = rssTitle = rssLink = rssText = "";
ver = checkRSSversion(sXML);
var itemTag = "item";
var catTag = "description";
if (ver == "Atom") itemTag = "entry";
var itemList = sXML.getElementsByTagName(itemTag);
for (var i=0; i<itemList.length; i++)
{
rssTitle = getTitle(itemList[i]);
rssLink = getLink(itemList[i]);
rssText = getDescription(itemList[i]);
resultText += '<a href="'+rssLink+'">'+rssTitle + '</a><div class="desc">'+rssText+'</div>';
}
$("result").innerHTML = resultText;
}
// item, entry�^�O����title�^�O�̓��e��Ԃ�
function getTitle(sTag)
{
for (var i=0; i<sTag.childNodes.length; i++)
{
if (sTag.childNodes[i].tagName == "title") return sTag.childNodes[i].childNodes[0].nodeValue;
}
return "";
}
// item, entry�^�O����link�^�O�̓��e��Ԃ�
function getLink(sTag)
{
for (var i=0; i<sTag.childNodes.length; i++)
{
if (sTag.childNodes[i].tagName == "link")
{
if (ver == "Atom")
{
for (var j=0; j<sTag.childNodes[i].attributes.length; j++)
{
if (sTag.childNodes[i].attributes[j].name == "href") return sTag.childNodes[i].attributes[j].value;
}
}else{
return sTag.childNodes[i].childNodes[0].nodeValue;
}
}
}
return "";
}
// description, summary�^�O���̓��e��Ԃ�
function getDescription(sTag)
{
var catTag = "description";
if (ver == "Atom") catTag = "summary";
for (var i=0; i<sTag.childNodes.length; i++)
{
if (sTag.childNodes[i].tagName == catTag)
{
if (sTag.childNodes[i].hasChildNodes()) return sTag.childNodes[i].childNodes[0].nodeValue;
}
}
return "";
}
// ��ނׂ�
function checkRSSversion(sXML)
{
var resultText = "";
try { tName = sXML.childNodes[1].tagName; }
catch(e){ var tName = sXML.childNodes[0].tagName; }
if (tName == "feed") resultText = "Atom";
if (tName == "rss") resultText = "RSS";
if (tName == "rdf:RDF") resultText = "RDF";
return resultText;
}
// --></script>
</head>
<body>
<h1>RSS, Atom�̌��o���ƋL�����e��\������</h1>
<p>Safari�Ή�</p>
<form method="get" name="ajaxForm" onsubmit="rssSearch();return false;">
<select id="siteURL">
<option value="http://www.openspc2.org/blog/atom.xml">OpenSpace (Atom)</option>
<option value="http://blog.hada.org/naoki/atom.xml">�H�c���� (Atom)</option>
<option value="http://hotwired.goo.ne.jp/news/index.rdf">Wired (RSS 1.0/RDF)</option>
<option value="http://japan.cnet.com/rss/index.rdf">CNET (RSS 1.0/RDF)</option>
<option value="http://www3.asahi.com/rss/index.rdf">Asahi.com (RSS 1.0/RDF)</option>
<option value="http://nikkeibp.jp/jp/flash/index.rdf">���oBP (RSS 1.0/RDF)</option>
<option value="http://japan.zdnet.com/rss/news/index.rdf">ZDNET (RSS 1.0/RDF)</option>
<option value="http://rss.fujitv.co.jp/whatsnew.xml">�t�W�e���r (RSS 2.0)</option>
</select>
<input type="button" value="��������" onClick="rssSearch()">
</form>
<div id="result"></div>
</div>
</body>
</html>
�@����ňꉞ�ł�������ł����A�^�O���s���Ȃ��̂�������A�^�O�����݂��Ȃ��ꍇ�ɂ̓G���[���������Ă��܂��܂��B�܂��ARSS 2.0��description����HTML�^�O���܂܂�Ă���ꍇ�ɂ�Internet Explorer�Ȃǂł͐������\���ł��܂���B���ɂ��A�������\���ł��Ȃ�RSS, Atom�����������݂��܂����A�����ɂ��Ή�����̂ł���Atry...catch�ŃG���[�Ƃ��ď������������Ă��܂����@������܂��B
�@�܂��A�ŏ��̒i�K�œ���ΏۂƂ���u���E�U�œ��삷�閽�߂��m�F���Ē��ׂĂ����Ȃ��ƁA����̂悤�ɍŌ�ɃX�N���v�g����蒼�����ɂȂ��Ă��܂��܂��B�����Ǝv���Ă������߂����������u���E�U�ł͓����Ȃ����Ƃ�����܂��B
[
�ڎ���]
(2006.1.30)