2 月27th

jQuery/jFeed 使ってみたよ

t-matsuda jQuery Read on

ひさしぶりに、jQueryを使ってみました。
数ヶ月ぶり!?

今回使ったのは、RSS2,RSS1,AtomなどのFeedを自動的にパースしてくれるjFeed

別ドメインからのFeedは、Javascriptから直接はもちろん読めないので
proxy的な感じで、phpを挟んで実行するようになってます。

使い方は、以下サイトからjFeedをダウンロード。
jFeed: JavaScript jQuery RSS/ATOM feed parser plugin

で解凍すると、example.htmlが入っているので、
ソースを見てもらえればだいたい使い方はわかると思います。

ただ、僕的に使ってみてちょっと気になったところがあったので書いてみます。

まず、jFeed内で$.ajaxを実行してFeedを取りに行ってるんですが
エラー処理がなかったので、簡単に追加してみました。

build/dist/jquery.jfeed.js 内の7行目から始まってる処理を以下のように変更
※エラー処理追加した、jquery.jfeed.jsは、こちらからダウンロード出来るようにもしておきました。


jQuery.getFeed = function(options) {

    options = jQuery.extend({

        url: null,
        data: null,
        success: null,
//t-matsuda add
        error: null

    }, options);

    if(options.url) {

        $.ajax({
            type: 'GET',
            url: options.url,
            data: options.data,
            dataType: 'xml',
            success: function(xml) {
                var feed = new JFeed(xml);
                if(jQuery.isFunction(options.success)) options.success(feed);
            },
//t-matsuda add
            error: function(request, status, e) {
                if(jQuery.isFunction(options.error)) options.error(status);
            }
        });
    }
};

これで呼び出す側で、以下のように
errorオプションつければとりあえずエラーを拾う事ができます。


$(function() {
    jQuery.getFeed({
        url: 'proxy.php',
        success: function(feed) {
        },
        error: function (status) {
            $('#arearss').append(status);
        }
    });
});

あともう一個、気付いたと言うか、
これは間違ってもこのまま使っちゃいけなそうだなと思ったのが
jFeedをダウンロードしたときに同梱されてる、
proxy.php

もともとのソースはこんな感じ、


< ?php
header('Content-type: application/xml');
$handle = fopen($_REQUEST['url'], "r");

if ($handle) {
    while (!feof($handle)) {
        $buffer = fgets($handle, 4096);
        echo $buffer;
    }
    fclose($handle);
}
?>

リクエスト値をそのまま、fopenしてます。。。
怖いです。。。

ということで、とりあえずこれもRequest値からじゃなくて
ベタで書いてあげる事に。


< ?php
$rss = '';

header('Content-type: application/xml');
$handle = fopen($rss, "r");

if ($handle) {
    while (!feof($handle)) {
        $buffer = fgets($handle, 4096);
        echo $buffer;
    }
    fclose($handle);
}
?>

とりあえずこれで、jQueryの最新版の1.2.3と合わせて使ってみましたが問題なく使えました。

外部で書いてるブログのRSSを読み込んで、サイトのトップページに最新情報として表示させて欲しい
と言う依頼が最近多いのでこれ使えば、さっくり終わりそう。


About this entry