SĂ̌`ɑΉ@RSS 1.0, RSS 2.0, AtomɑΉȈRSS[_[쐬Ă݂܂B܂Aǂݍ܂ꂽf[^RSS 1.0Ȃ̂RSS 2.0Ȃ̂Atom𒲂ׂKv܂Bȉ̃XNvgŎނ𒲂ׂ܂BRSS 1.0̏ꍇRDF, RSS2.0̏ꍇRSS, Atom̏ꍇAtom̕Ԃ܂Bɂ͕KAꂩ̌`ł邱ƂOȂ̂œKXMLf[^̏ꍇɂ͐ʂł܂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">tWer (RSS 2.0)</option>
<option value="http://www.openspc2.org/blog/atom.xml">OpenSpace (Atom)</option>
</select>
<input type="button" value="`FbN" onClick="rssCheck()">
</form>
<div id="result"></div>
</div>
</body>
</html>

@RSS 1.0RSS 2.0͓XNvgœ삵܂AAtom͓XNvg삵܂BAtom̏ꍇʂ̏s܂BRSSł͋L̃^Cg⃊NAvLitem^OɁAAtomłentry^OɋLqĂ܂B͈ȉ̂悤Ɏނ𔻕ʂēǂݏo^Oݒ肵Ă܂B

if (ver == "Atom")
{
itemTag = "entry";
catTag = "summary";
}

@͈ȉ̂悤ɂƃJeS̏񂪔zitemListɊi[܂B

itemList = sXML.getElementsByTagName(itemTag)

@Ƃ̓JeS񂩂^CgƃNAvLǂݏo܂B܂ANłRSSłlink^O̍ŏ̃m[h̓eǂݏo܂AAtom̏ꍇɂlink^Ohref̓eǂݏo܂B
@vLRSSAtomŃ^OقȂ邽߁Aނ𔻕ʂRSSȂdescriptionAAtomȂsummary^O̓eǂݏo܂BAvL̃^O͕K{ł͂Ȃ߁AȗꂽꍇlĂKv܂BȗꂽꍇɓǂݏoƂƂ̓G[̂try..catchgď܂BiTvsj

<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<title>RSS, Atom̌oƋLe\</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ƋLe\</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">Hc (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">tWer (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܂^OXg擾łȂAgetAttributes()Ғʂ蓮삵Ȃꍇ邽߂łBŁAgetElementsByTagName()g@߂āAm[h𒲂ׂĊYm[hi^Oj邩ǂfor()߂ŌJԂׂ܂B̕@̗͌ǂ@ł͂܂񂪁ASafari 2ł̃uEUłXNvgœ삳邱Ƃł܂BiTvsj

<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<title>RSS, Atom̌oƋLe\</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^Otitle^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^Olink^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ƋLe\</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">Hc (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">tWer (RSS 2.0)</option>
</select>
<input type="button" value="" onClick="rssSearch()">
</form>
<div id="result"></div>
</div>
</body>
</html>

@ňꉞłłA^OsȂ̂A^O݂Ȃꍇɂ̓G[Ă܂܂B܂ARSS 2.0descriptionHTML^O܂܂ĂꍇɂInternet ExplorerȂǂł͐\ł܂BɂA\łȂRSS, Atom݂܂AɂΉ̂ł΁Atry...catchŃG[ƂďĂ܂@܂B
@܂Aŏ̒iKœΏۂƂuEUœ삷閽߂mFĒׂĂȂƁÂ悤ɍŌɃXNvg蒼ɂȂĂ܂܂BƎvĂ߂uEUł͓ȂƂ܂B

