RIGHT:&size(12){Category:[[:Plugin]],[[RSS>:Category/RSS]]};
* RSS 出力について [#e40c180c]

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

** メッセージ [#s23c504b]
出力された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 を表示させた((補足: Content-Type ヘッダをapplication/rss+xml に変える事で、表示させています)) ところ、更新時刻が表示されていませんでした。
いろいろ試してみたところ、タイムゾーンが'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>

--------

#comment

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Site admin: PukiWiki Development Team

PukiWiki 1.5.4+ © 2001-2022 PukiWiki Development Team. Powered by PHP 5.6.40-0+deb8u12. HTML convert time: 0.064 sec.

OSDN