前回のつづきです。
詳しくは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的にはどうなんでしょうか?
・・・と、いうわけで一部を修正しました。すいません。