FC2ブログ

RSS1.0事始め

調べてみると、結構なかなか難しかったりで。

RSS1.0をチョイスした訳です。こちらを参考にさせていただいて。でも、それはほんの始まりに過ぎなかったのです。。

RSSの配信をするシステムを作りたいとかんがえています。

RSSにはRSS0.9x、RSS1.0、RSS2.0、ATOMなどなどさまざまな種類があるかと思いますが、どのRSSを配信できるようにすれば必要十分だと思われますか。

多いほうがいいのはもちろんなのですが、どうしても手間がかかってしまいますので・・・みなさんのご意見を聞かせてください。


それで、仕様を見て作り始めた訳で。和訳ですが。ファイルを生成するよりも、PHPスクリプト自身が直接RSS吐き出した方が、取り回しが楽ですね。性能の面で懸念はありますけど。その時はキャッシュすると良いらしいですね。

RDF Site Summary (RSS) 1.0

で、safariとか、Bloglinesでは普通に出てたので。って言っても、日付出す所でちょっとつま付きましたが。こんな感じでダブリンコアモジュール組み込んで、

<?xml version="1.0" encoding="utf-8" ?>
<rdf:RDF xmlns="http://purl.org/rss/1.0/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"


item要素の中で、

<dc:date>$date_inf</dc:date>

と書いてあげると。あ、「$date_inf」はPHPの変数で、こんな感じでフォーマッティングしています。

$date_inf_date = date("Y-m-d", $event_date);
$date_inf_time = date("H:i:sO", $event_date);
$date_inf = "${date_inf_date}T$date_inf_time";


で、これでオッケーって思って見たら、甘かったと。表示するデータの中に実体参照が含まれていたのです。さっきの仕様を読み返してみると。

注意: RSS 1.0にはDTDは必要ではありませんので、必ず使用されているエンティティのインライン宣言を上記5つを除いて、組み込んで下さい。以下のDTDフラグメントはHMLと互換性のあるエンティティのソースとして非常に便利です。



なるほど、DTDを組み込めば良いのね。って、宣言してみたものの、IEだと大丈夫でもfirefoxでは「XML パースエラー: 定義されていない実体が使用されています。」なんて言われて、いまいち上手く行きません。どうしたもんかなと調べていたら見つけたのがこちら。

RSS内の実体参照

よって、このような実体参照が入る場合は、XMLに埋め込む際に&を&と変換してやるか、全体を<![CDATA[ ]]>で囲んでやるか、実体参照を数値参照によるものに変換してやる必要があります。


なるほど、じゃあ、CDATAで囲むか!ってやってみたらエラーは出なくなりましたが、実体参照は変換されずに「&amp;」みたいになってしまうので、これも今イチ。で、力技ですが、実体参照を数値参照に置換してたと。これで大丈夫、多分。

こちらを参考にして置換しました。もう、str_replaceで。引数に配列を渡せるので、舌のリンク先のテーブルから配列を吐き出すPHPスクリプト書きました。

HTMLで使える文字実体参照

つか、XSS対策とは言え、エンティティ変換しまくったかしら。。

【関連エントリ】
PHPでRSSを生成したい
RSSを出すよ!
RSSといふもの
スポンサーサイト



FC2 Blog Ranking


実験@2007/06/19 19:36   | 0 comments | 0 trackbacks |

コメント

コメントの投稿


秘密にする

«  | HOME |  »

いろいろ作ったり

プロフィール

icot

Author:icot
総合電気メーカで働く会社員でしたがいい年にも関わらずコンサルに転職。お酒、ジョギング、音楽、本、料理をこよなく愛してます。ここでは、日々感じた事を書き連ねるとともに、いろいろ実験してみたりしてます。
icotfeels[at]gmail.com

これまでに感じたこと