rNote にもとから実装されている RSS1.0 では、 Dublin Core の名前空間 dc:date で日時の指定をしていた。

RSS2.0 のフィードも、同じやり方で Akregator は認識してくれたが、正しくは pubDate というタグで指定するようだ。

RSS 2.0 Specification 日本語訳」によると、このタグは、 "Sun, 20 Jan 2019 12:00:00 JST" のような形式で日時を指定するそうなので、この要素で記事の公開日時を指定するように修正した。

rNote は、スキン内に Date タグを記述し、日時の表示フォーマットを指定することで、指定の形式で記事の投稿日時を出力してくれる。そこで、 fmt="%a, %e %b %Y %H:%M:%S %Z" とオプションを指定したのだが、出力結果の曜日が日本語の漢字で「日」と表示されてしまった。これは、 rNote 内でこの処理に使われている strftime() が、 setlocale() で設定されている現在のロケールに従って日時の表示を行うためだが、 rNote を普通に使用するとサーバのロケールが日本語に指定されるため、このような結果となる。

しかしこれではまずいので、曜日は英語の省略形式で表示しなくてはならない。

よく調べてみると、rNote のスキン用 Date タグは locale オプションも指定できるのが分かった。

ただ、 "ja_JP.utf8" を、英語表記にするために "en_US.utf8" としたら、時刻もずれてしまう。

そこで、ちょっと考えて、 "en_JP.utf8" と記述してみたら、見事英語で日本の時差で表示してくれた。ネットで検索しても、このような表記についての説明は皆無だったが、ロケールの表現方法が、「言語_地域.エンコード」という形式であることから試してみたのだが、 PHP7 はしっかり対応してくれていた。 PHP7 さすがである。

というわけで、 RSS2.0 用のスキンでの日時表示の部分は、下のようになった。

<pubDate><%=$Date fmt="%a, %e %b %Y %H:%M:%S %Z" locale="en_JP.utf8"%></pubDate>

これで正しい日時をフィードリーダに伝えることができるようになった。

・・・と思ったのだが、 Akregator が示す日時が9時間未来になってしまった。

RSS1.0 フィード( dc:date を使用)の方は +09:00 が日時に付記されているが9時間未来にはなっていない。ということは、 dc:date の方は地方時と Akregator 自身が取得した locale を元に正しい日時を表示できているということだ。 RSS2.0 の pubDate の方の処理がバグをもっているのかも知れない。 RSS2.0 フィードとしては正しい日時が出力できているので特に修正はしないでおく。

この記事のリンク元 | 9 | 8 |

この記事のリンク用URL&トラックバックURL : https://red-souls.jp/ichounoki/rnote/works/software/20190818_192232648721.htm

キーワード: rNote RSS2.0 pubDate


rNote では最初から RSS のフォードの生成機能が備わっている。そのバージョンは RSS1.0 だ。

これまでは特に問題を感じていなかったのだが、 KDE のフィードリーダ Akregator に当サイトのフィードを追加してみたところ、記事一覧の作者の表示がされなかった。

各記事に dc:creator を追加してみるなどいろいろやってみたのだがだめだったので、多分 RSS2.0 形式なら作者も表示されるだろうと推測し、 rNote に RSS2.0 のフィード生成機能を追加した。

プラグインとして実装できるかな、と思ったのだが、 RSS の生成時に RSS 用のスキンが使用され、 RSS 用スキンのための置換文字列の処理が rNote 本体に実装されているので、この部分をプラグイン化して外部に出さない限り無理だと分かった。なので、とりあえず rNote 本体に処理を追加する形で実現した。

追加したファイル:

rss2_body.skin, rss2_item.skin

修正したファイル:

rnote_config.php( FNAME_RSS2, MAX_DESCRIPTION_RSS2, FNAME_SKIN_RSS2 の3つの定数を追加した。)

rnote.php( CreateRSS2() を追加し、AdminMode() 内で CreateRSS() に続き CreateRSS2() を呼ぶようにした。 CreateHTML() 内に、スキン用のタグとして rss2_url を置換する処理を追加した。)

html_side.skin( RSS2 のフィードへのリンクを追加した。)

RSS2.0 の記述の仕方やフィードのファイル名の付け方については、「RSSのフォーマット・仕様・構造 - RSS1.0、RSS2.0、Content-Type」や「横着者のRSS 2.0 配信ページの作成方法」が参考になった。

試したところ、 Akregaror で問題なく作者が表示されるようになった。

この記事のリンク元 | 9 | 8 | 1 |

この記事のリンク用URL&トラックバックURL : https://red-souls.jp/ichounoki/rnote/works/software/20190818_160607538729.htm

キーワード: RSS2.0 rNote