JavaScript


http://hoge/rss にアクセスするとRSS2.0で表記されたRSSが表示されます。

このRSSの最新10件を別のページに表示するJavaScriptを書いてください。サーバー事情によりPHPやCGIは使えません。(geocities)

よろしくお願いします。

回答の条件
  • 1人3回まで
  • 登録:2006/08/11 02:19:32
  • 終了:2006/08/15 14:02:58

回答(5件)

id:fuk00346jp No.1

潮澤 昴回答回数1140ベストアンサー獲得回数542006/08/11 05:58:57

ポイント10pt

RSS Feed The Search

RSS FeedをJavascriptでウェブページに表示

等をお使い下さい。

 

  • JavaScript化する為にCGIが必要な為、使えない場合既存サービスより引っ張って下さい。
id:esecua

RSSの最新10件を別のページに表示するJavaScriptを書いてください

2006/08/11 12:59:49
id:okuryu No.2

okuryu回答回数72ベストアンサー獲得回数32006/08/11 18:14:35

ポイント10pt

タイトルを表示するだけの簡単なサンプルですが。

Windows XP の Firefox 1.5 と Internet Explorer 6.0 で確認しました。

JavaScript

window.onload = function() {

    var r = null;

    try {

        r = new XMLHttpRequest;

    } catch ( e ) {

        try {

            r = new ActiveXObject( "Msxml2.XMLHTTP" );

        } catch ( e ) {

            r = new ActiveXObject( "Microsoft.XMLHTTP" );

        }

    }

    r.onreadystatechange = function() {

        if ( ( r.readyState == 4 ) && ( r.status == 200 ) ) {

            var items = r.responseXML.getElementsByTagName("item");
            var titles = r.responseXML.getElementsByTagName("title");

            if ( items.length > 10 ) {

                var max = 10;

            } else {

                var max = items.length;

            }

            var result = '<ul>';

            for ( var i = 1; i <= max; i++ ) {

                var title = titles[i].childNodes[0].nodeValue;
                result += '<li>' + title + '</li>';

            }

            result += '</ul>';
            document.getElementById( 'result' ).innerHTML = result;

        }

    }

    r.open( 'GET' , 'hoge.xml' , true );
    r.send( null );

};
id:esecua

こちらも動かないです。

2006/08/12 12:03:36
id:xkettoshi No.3

xkettoshi回答回数6ベストアンサー獲得回数02006/08/11 23:23:09

ポイント15pt

@ITです。URLは適度変えてください

<html><head>

<script></p> <p>var httpRequest = null;</p> <p>function createHttpRequest()</p> <p>{</p> <p> var XMLhttpObject = null;</p> <p> try</p> <p> {</p> <p> XMLhttpObject = new XMLHttpRequest();</p> <p> }</p> <p> catch(e)</p> <p> {</p> <p> try</p> <p> {</p> <p> XMLhttpObject = new ActiveXObject("Msxml2.XMLHTTP");</p> <p> }</p> <p> catch(e)</p> <p> {</p> <p> try</p> <p> {</p> <p> XMLhttpObject = new ActiveXObject("Microsoft.XMLHTTP");</p> <p> }</p> <p> catch(e)</p> <p> {</p> <p> }</p> <p> }</p> <p> }</p> <p> return XMLhttpObject;</p> <p>}</p> <p>function parse()</p> <p>{</p> <p> try</p> <p> {</p> <p> if(!(httpRequest.readyState == 4 && httpRequest.status == 200))</p> <p> {</p> <p> return;</p> <p> }</p> <p> else if(httpRequest.responseXML)</p> <p> {</p> <p> var xdoc = httpRequest.responseXML;</p> <p> var items;</p> <p> var itm;</p> <p> var i, n;</p> <p> var title, link, desc;</p> <p> var text = "";</p> <p> var childNodes;</p> <p> var channel;</p> <p> var j;</p> <p> var data = new Array;</p> <p> channel = xdoc.getElementsByTagName("channel")[0];</p> <p> data["title"] = data["link"] = data["description"] = "";</p> <p> childNodes = channel.childNodes;</p> <p> for(j = 0; j < childNodes.length; j++)</p> <p> {</p> <p> if(childNodes[j].text)</p> <p> {</p> <p> data[childNodes[j].nodeName] = childNodes[j].text;</p> <p> }</p> <p> }</p> <p> if(data["title"] && data["link"])</p> <p> {</p> <p> text += "<a href=\"" + data["link"] + "\">" + data["title"] + "</a><br>" + (data["description"] ? data["description"] : "")+ "<br><br>\n";</p> <p> }</p> <br> <p> items = xdoc.getElementsByTagName("item");</p> <p> for(i = n = 0; i < items.length; i++)</p> <p> {</p> <p> childNodes = items[i].childNodes;</p> <p> if(childNodes == null)</p> <p> {</p> <p> continue;</p> <p> }</p> <p> data["title"] = data["link"] = data["description"] = "";</p> <p> for(j = 0; j < childNodes.length; j++)</p> <p> {</p> <p> if(childNodes[j].text)</p> <p> {</p> <p> data[childNodes[j].nodeName] = childNodes[j].text;</p> <p> }</p> <p> }</p> <p> if(data["title"] && data["link"])</p> <p> {</p> <p> text += "   <a href=\"" + data["link"] + "\">" + data["title"] + "</a><br>" + (data["description"] ? data["description"] : "")+ "<br><br>\n";</p> <p> if(n++ == 10)</p> <p> {</p> <p> break;</p> <p> }</p> <p> }</p> <p> }</p> <p> //alert(text);</p> <p> if(text)</p> <p> {</p> <p> document.getElementById("rssview").innerHTML = text;</p> <p> }</p> <p> }</p> <p> }</p> <p> catch(e)</p> <p> {</p> <p> alert("error");</p> <p> throw e;</p> <p> }</p> <p>}</p> <p>function getRSS(url)</p> <p>{</p> <p> try</p> <p> {</p> <p> httpRequest = createHttpRequest();</p> <p> if(httpRequest)</p> <p> {</p> <p> httpRequest.onreadystatechange = parse;</p> <p> httpRequest.open("get", url, false);</p> <p> httpRequest.send(null);</p> <p> }</p> <p> }</p> <p> catch(e)</p> <p> {</p> <p> alert("error");</p> <p> }</p> <p>}</p> <p></script>

</head>

<body onload="getRSS('http://www.atmarkit.co.jp/rss/rss.xml')">

</body>

</html>

id:esecua

動きません。

2006/08/12 11:59:21
id:xkettoshi No.4

xkettoshi回答回数6ベストアンサー獲得回数02006/08/12 14:23:43

ポイント25pt

<html><head>

<script>

var httpRequest = null;

function createHttpRequest()

{

var XMLhttpObject = null;

try

{

XMLhttpObject = new XMLHttpRequest();

}

catch(e)

{

try

{

XMLhttpObject = new ActiveXObject("Msxml2.XMLHTTP");

}

catch(e)

{

try

{

XMLhttpObject = new ActiveXObject("Microsoft.XMLHTTP");

}

catch(e)

{

}

}

}

return XMLhttpObject;

}

function parse()

{

try

{

if(!(httpRequest.readyState == 4 && httpRequest.status == 200))

{

return;

}

else if(httpRequest.responseXML)

{

var xdoc = httpRequest.responseXML;

var items;

var itm;

var i, n;

var title, link, desc;

var text = "";

var childNodes;

var channel;

var j;

var data = new Array;

channel = xdoc.getElementsByTagName("channel")[0];

data["title"] = data["link"] = data["description"] = "";

childNodes = channel.childNodes;

for(j = 0; j < childNodes.length; j++)

{

if(childNodes[j].text)

{

data[childNodes[j].nodeName] = childNodes[j].text;

}

}

if(data["title"] && data["link"])

{

text += "<a href=\"" + data["link"] + "\">" + data["title"] + "</a><br>" + (data["description"] ? data["description"] : "")+ "<br><br>\n";

}


items = xdoc.getElementsByTagName("item");

for(i = n = 0; i < items.length && n < 10; i++)

{

childNodes = items[i].childNodes;

if(childNodes == null)

{

continue;

}

data["title"] = data["link"] = data["description"] = "";

for(j = 0; j < childNodes.length; j++)

{

if(childNodes[j].text)

{

data[childNodes[j].nodeName] = childNodes[j].text;

}

}

if(data["title"] && data["link"])

{

text += "   <a href=\"" + data["link"] + "\">" + data["title"] + "</a><br>" + (data["description"] ? data["description"] : "")+ "<br><br>\n";

n++;

}

}

//alert(text);

if(text)

{

document.getElementById("rssview").innerHTML = text;

}

}

}

catch(e)

{

alert("error");

throw e;

}

}

function getRSS(url)

{

try

{

httpRequest = createHttpRequest();

if(httpRequest)

{

httpRequest.onreadystatechange = parse;

httpRequest.open("get", url, false);

httpRequest.send(null);

}

}

catch(e)

{

alert("error");

}

}

</script>

</head>

<body onload="getRSS('http://www.atmarkit.co.jp/rss/rss.xml')">

<div id="rssview"></div>

</body>

</html>

id:esecua

errorが表示されます。

2006/08/12 17:08:38
id:okuryu No.5

okuryu回答回数72ベストアンサー獲得回数32006/08/12 18:51:43

ポイント40pt

2の回答者です。

対象となる RSS が同じドメイン下のものという前提での JavaScript を書いたのですが、質問されている対象となる RSS は異なるドメインの外部のものでしょうか。

その場合、 Firefox などのブラウザでは仕様上読み込めないようになっているため、CGI などで一度処理する必要があります。

今回は CGI が使えないとのことなので、解決策としては以下のようなサービスを利用するとうまくいくかもしれません。

どちらも任意のドメイン上の XML データを取得して、JavaScript で扱えるようにしてくれるサービスです。

id:esecua

なるほど。

2006/08/12 20:54:21
  • id:fuk00346jp
    RSS Feed The Search 使用例
    テキスト保存して拡張子htmlにして見て下さい。
     
    文字コードEUCです。
     
    <script language="JavaScript" src="http://feed.the-search.info//eucfeed.php?src=http%3A%2F%2Fechoo.yubitoma.or.jp%2Frdf%2Ffuk00346.rdf&chan=n&num=10&desc=0&long=0&date=n&targ=y&html=n" type="text/javascript"></script>

    <noscript>
    <a href="http://feed.the-search.info//eucfeed.php?src=http%3A%2F%2Fechoo.yubitoma.or.jp%2Frdf%2Ffuk00346.rdf&chan=n&num=10&desc=0&long=0&date=n&targ=y&html=y">View RSS feed</a>
    </noscript>
     
    5.さんのとほとんど変わらんと思いますが・・・

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません