トップページはこちら

strtotime

RSSフィードの変換で各エントリーの日付を示しているのは、RDF(RSS 1.0)は<dc:date>の値でRSS 0.9/2.0は<pubDate>の値(ちなみに現在のXML_RSSは、Atomはサポートしていない)、前者はW3C DTFで後者はRFC 822と、表示形式が違うので厄介だなと思ったのだが、とりあえずstrtotime()を通してみたらあっさり変換できちゃったので、そのままサーバにアップしておいた。
しかし、ドキュメントもろくすっぽ読まずにあっさり出来上がったパターンは、大概落とし穴が待ち受けているもので。サーバ上のスクリプトのほうでRDFを変換表示してみると、時間が軒並み「1970/01/01 08:59:59」となっていた。つまりunixtimeゼロ秒 +9時間 -1秒ということで、strtotime()が文字列の変換に失敗して-1を返しているわけだ。何らかの設定が必要なのかと思いドキュメントを読んでみたりググったりしてみたのだけど釈然とせず。
そう言えば、ローカルの開発環境はPHP5で、サーバはPHP4だったので、試しにローカルのほうもPHP4に切り替えてみたらstrtotime()の動作が変わった。どうやらPHP4のstrtotime()は、タイムゾーンの記述を解釈できず、+9:00などと書かれてるとコケるみたい(RFC 822はタイムゾーン指定があっても大丈夫なのに)。
ならばと、-1が返ってきたらstrtotime()を使わず変換するルーティンを用意してはみたのだけど、しかしそもそも<dc:date>の内容が、必ず正しいW3C DTF書式であると期待できるわけもなく(※)、そもそもW3C DTF形式の日付表示自体、決して判読不能なものではないので、そんならそれをそのまま表示しちゃったほうが確実じゃん、という安易な結論で終了することにしますた。

※今日も、某日刊スポーツがRSSフィードを提供していているのに気付いて感心してたら、RDFのContent-Typeがtext/plainになっててガッカリ。RDFはapplication/rdf+xmlあたりでお願いします。


2005/10/25

トラックバック

このエントリーのトラックバックURL:
http://www.rcdtokyo.com/mt/mt-rcdtokyo5428-tb.cgi/9

コメント

コメントをどうぞ



保存しますか?