TOP > ウェブとコンピュータ関連 > PHP, Javascript > AjaxでCNET JapanのRSSをHTMLに表示してみた その2(修正)

« AjaxでCNET JapanのRSSをHTMLに表示してみた | メイン | Lightbox JS v2.0というのがあって »

AjaxでCNET JapanのRSSをHTMLに表示してみた その2(修正)

前回のつづきです。

詳しくはWeb Designing6月号を見てもらえれば大体は分かるんですが、
サンプルデータをダウンロードしていざトライ。

しくみとしては、表示したいHTMLにJavascriptでRSSを読み込むんですが、外部のサーバのRSSを読み込むというのは、Javascriptだけではどうも無理らしいので(同一サーバなら出来るそうです。)CGIとかPHPとかを利用することになるそうです。今回のサンプルではCGI(Perl)とRubyのファイルがダウンロードしたデータについておりました。

まずはそのままK1ファクトリーのサーバにアップして、CGIの パーミッションを「705」とかにしてやってみますが、RSSは全然表示されません。もちろんファイルのリンクもチェックするもヤッパしダメ。

これまでの経験上、CGIはパーミッションだけでなく、文字コードにも敏感?に反応するということがあったので、文字コードを「shift_jis」 で保存し直してみます。
今度は表示されましたよ。でも・・・ありゃ、文字化けですわ。

そこでCGIをよぉ〜く見てみると・・・ 

<CGIの中身>
#!/usr/bin/perl
use Jcode;
use CGI;
$input = new CGI;
$inputdata = $input->param("sURL");
print "Content-type: text/xml\n\n";
print "\xef\xbb\xbf";
open(FH,"curl '".$inputdata."' |");
while (<FH>) {
  printJcode::convert($_,"utf8");
}
close(FH);

RSSファイルの文字コード「utf8」をコンバートするのにJcode.pmを使ってるってことにようやく気づきました。
こりゃぁ説明不足じゃないの?ダウンロードデータにつけとけよ!
と、思いましたが、これぐらいは常識なのかも・・・

ネットでJcode.pmと付属のデータを別途ダウンロードして使ってみると、ちゃんと表示されるようになりました。

ところでサンプルデータは説明のためなのか、表示するHTMLにスタイルシートやRSSを読み込むためのJavascriptが一緒に載ってまして、HTMLコードがすっきりしてないように思われたので、ちょっとアレンジしてみました。


<表示するHTML>

※外部javascriptファイルにして読み込み
青はもともとサンプルについていたRSSを解読するための外部JSファイルの読み込み
赤が今回、外部JSファイルにした分です。

<script type="text/javascript" xsrc="http://www.k1factory.biz/ajax/jkl-parsexml.js"></script>
<script type="text/javascript" xsrc="http://www.k1factory.biz/ajax/rssload.js"></script>

※ページが読み込まれた時にCNET JapanのRSSを読み込ませる
<bodyonLoad="rssload('http://feed.japan.cnet.com/rss/news/index.rdf')">
※上の「onLoad〜」部分は削除。これでやるとどうやらエラーするみたい。

※<div>タグのid名「result」のところにRSSを表示させる。
<h2>CNET Japan News</h2>
<div id="result"></div>


<Javascript (rssload.js)の中身>
※bodyタグでonLoadしてユーザー定義関数「rssload」を実行。
(これをするとエラーになっちゃいました!)


リスト表記したかったのでHTML出力部分をちょっといじりました。

function rssload(rssURL){
rssURL = "http://feed.japan.cnet.com/rss/news/index.rdf";
    window.onload = function() {

    var list = "";
    var maxItem = 5;    // 最大表示項目数
    var url = "curl.cgi?sURL="+encodeURIComponent(rssURL)+"&cache="+(new Date()).getTime();
    var httpObj = new JKL.ParseXML(url);
    xmlData = httpObj.parse();
    n = xmlData["rdf:RDF"]["item"].length;
    if (n > maxItem) n = maxItem;
    list += '<ul>';
    for (var i=0; i<n; i++) {
        var rssTitle = xmlData["rdf:RDF"]["item"][i].title;
        var rssLink = xmlData["rdf:RDF"]["item"][i].link;
        list += '<li><a xhref="'+rssLink+'">'+rssTitle + "</a></li>";
    }
    list += '</ul>';
    document.getElementById("result").innerHTML = list;
}

以上のような感じです。

最後に、今回ちょっとこのサンプルを試してやっと気づいたんですが、AjaxでRSSを読み込ませても、HTMLのソースを見てみたら、表示させてる部分はなにもコードが表示されないんですよ。
PHPなどでやると、HTMLまるごとPHPが作成するのでソースがちゃんと表示されるんですが・・・

これってSEO的にはどうなんでしょうか?

・・・と、いうわけで一部を修正しました。すいません。
 

コメントを投稿

About

2006年05月21日 17:16に投稿されたエントリのページです。

ひとつ前の投稿は「AjaxでCNET JapanのRSSをHTMLに表示してみた」です。

次の投稿は「Lightbox JS v2.0というのがあって」です。

他にも多くのエントリがあります。メインページアーカイブページも見てください。

Powered by
Movable Type