Category::Plugin,RSS

RSS 出力について

  • ページ: BugTrack2
  • 投稿者: 名無しさん
  • 優先順位: 普通
  • 状態: 却下
  • カテゴリー: プラグイン
  • 投稿日: 2009-10-17 (土) 01:12:31
  • バージョン:

メッセージ

出力されたRSS データを利用しようとすると、問題が出る場面があったので挙げておきます。

RSS 1.0 出力で表示されるタイムゾーンが、サーバーのローカルタイム基準になっている
			$date = substr_replace(get_date('Y-m-d\TH:i:sO', $time), ':', -2, 0);
として更新時刻の文字列を作成しているが、フォーマットオプション'O' が返す値はサーバーのローカルタイムと基準時との時差です。 もし、ZONETIME にLOCALZONE と違う値を設定すると、日時はZONETIME を基準に、タイムゾーンはLOCALZONE を基準にしたものになってしまい、RSS リーダーなどで読み取ると正しい時刻に変換されません。
Firefox 3.5.3 のRSS リーダーでは、RSS 2.0 の<pubDate> のデータを表示しないことがある
自分のところだけかもしれませんが、Firefox 3.5.3 でPukiWiki のRSS 2.0 を表示させた*1 ところ、更新時刻が表示されていませんでした。 いろいろ試してみたところ、タイムゾーンが'JST' では表示されず、'+0900' では表示されていました。 BugTrack2/249 で話題になっているRFC2822 に早く対応しろ、ってことなんでしょうか・・・

とりあえず、なパッチです

  • cvs:plugin/rss.inc.php (r1.21)
    • 35 行目あたり
       	$lang = LANG;
       	$page_title_utf8 = mb_convert_encoding($page_title, 'UTF-8', SOURCE_ENCODING);
       	$self = get_script_uri();
      +	switch ($version) {
      +	case '0.91': /* FALLTHROUGH */
      +	case '2.0':
      +		$zone = (ZONETIME < 0) ? '-' : '+';
      +		$zone .= sprintf('%02d%02d', floor(abs(ZONETIME) / 60 / 60), abs(ZONETIME) / 60 % 60);
      +		break;
      +	case '1.0': /* FALLTHROUGH */
      +		$zone = (ZONETIME < 0) ? '-' : '+';
      +		$zone .= sprintf('%02d:%02d', floor(abs(ZONETIME) / 60 / 60), abs(ZONETIME) / 60 % 60);
      +		break;
      +	}
       
       	// Creating <item> or <entry>
       	$items = $rdf_li = '';
    • 45 行目あたり
       		switch ($version) {
       		case '0.91': /* FALLTHROUGH */
       		case '2.0':
      -			$date = get_date('D, d M Y H:i:s T', $time);
      +			$date = get_date('D, d M Y H:i:s ', $time) . $zone;
       			$date = ($version == '0.91') ?
       				' <description>' . $date . '</description>' :
       				' <pubDate>'     . $date . '</pubDate>';
       			$items .= <<<EOD
    • 65 行目あたり
       		case '1.0':
       			// Add <item> into <items>
       			$rdf_li .= '    <rdf:li rdf:resource="' . $self .
       				'?' . $r_page . '" />' . "\n";
       
      -			$date = substr_replace(get_date('Y-m-d\TH:i:sO', $time), ':', -2, 0);
      +			$date = get_date('Y-m-d\TH:i:s', $time) . $zone;
       			$items .= <<<EOD
       <item rdf:about="$self?$r_page">
        <title>$title</title>



*1 補足: Content-Type ヘッダをapplication/rss+xml に変える事で、表示させています

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2009-10-17 (土) 01:12:31
Site admin: PukiWiki Development Team

PukiWiki 1.5.2+ © 2001-2019 PukiWiki Development Team. Powered by PHP 5.6.40-0+deb8u7. HTML convert time: 0.230 sec.

OSDN