BLOGTIMES
2004/09/09

jsRSS++でdescriptionを表示させるには

 
このエントリーをはてなブックマークに追加

先日紹介したjsRSS++は便利なのですが、descriptionさせようとしたら、表示されないというバグを見つけてしまいました。ちょっと不便なのでこのバグを直してみることにしました。

改造のポイント

注意点:
 この改造は無保証ですので、自己責任でお願いします。この改造はバージョン1.0向けです。

このdescriptionのon/offはグローバル変数の$dscというもので制御されているようなのですが、同じ名前の変数がparse_rdf内でも使われてしまっています。これをparse_rdf内の$dscをローカル変数に変更することによって回避することにします。

具体的には123行目の"{"だけの行の右側に"my $dsc;"を追加します。

この状態でもdescriptionは最後の部分しか表示されません。これはdescriptionが複数行にわたって記述されているときに生じる問題です。この問題は文字列が1行ごとに上書きされてしまっているために生じている現象ですので、文字列を連結するようにすることで回避できます。

具体的には157、158行目の"="を".="に置き換えます。

差分はこちら

diff -u jsRSS.cgi.org jsRSS.cgi

--- jsRSS.cgi.org 2004-09-09 21:58:34.000000000 +0900 +++ jsRSS.cgi 2004-09-09 21:58:50.000000000 +0900 @@ -120,7 +120,7 @@ } sub parse_rdf -{ +{ my $dsc; my $rdf = shift; my @RDF = @{$rdf}; my $cnt = 1; @@ -153,9 +153,9 @@ if ($_ =~ /<description>(.*)<\/description>/i) { $site[$cnt]{description} = $1 } elsif($_ =~ /<summary(.*)>(.*)<\/summary>/i) { $site[$cnt]{description} = $2 } - elsif($_ =~ /<description>(.*)/) { $site[$cnt]{description} = $1; $dsc = 1; } - elsif($_ =~ /(.*)<\/description>/i) { $site[$cnt]{description} = $1; $dsc = 0; } - elsif($dsc == 1) { $site[$cnt]{description} = $_ } + elsif($_ =~ /<description>(.*)/i) { $site[$cnt]{description} = $1; $dsc = 1; } + elsif($_ =~ /(.*)<\/description>/i) { $site[$cnt]{description} .= $1; $dsc = 0; } + elsif($dsc == 1) { $site[$cnt]{description} .= $_ } $site[$cnt]{description} =~ s/<\!\[CDATA\[(.*)/$1/i; $site[$cnt]{description} =~ s/(.*)\]\]>/$1/i;

おまけ

156行目の正規表現だけ末尾に"i"がないのでこれを追加してあげました。


    トラックバックについて
    Trackback URL:
    お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
    このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/360
    Trackbacks
    このエントリにトラックバックはありません
    Comments
    愛のあるツッコミをお気軽にどうぞ。[policy]
    古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
    コメントはありません
    Comments Form

    コメントは承認後の表示となります。
    OpenIDでログインすると、即時に公開されます。

    OpenID を使ってログインすることができます。

    Identity URL: Yahoo! JAPAN IDでログイン