蝸牛の歩み

蝸牛の如く,ゆっくりでも着実に前へ・・・

RSS配信これで完璧?

こないだ作ったRSSだが,Validatorによっては"valid"と言ってくれたり,"invalid"と言われたりという感じだった.「はてなRSSではちゃんと読んでくれるし,これでいいか」と思っていたのだが,今日Firefoxライブブックマークに登録してみたら*1,最初の1件しか出ないことが判明した.おそらく原因は参考にしたMLの投稿でも問題にしていたところで,

<rdf:Seq>
<rdf:li rdf:resource="http://www.momo-p.com/showdetail.php?movieid=momo051015ga08b"/>
<rdf:li rdf:resource="http://www.momo-p.com/showdetail.php?movieid=momo051015ga07b"/>
</rdf:Seq>

となるべきところが,

<rdf:Seq>
<rdf:li rdf:resource="http://www.momo-p.com/showdetail.php?movieid=momo051015ga08b"/>
</rdf:Seq>
<rdf:Seq>
<rdf:li rdf:resource="http://www.momo-p.com/showdetail.php?movieid=momo051015ga07b"/>
</rdf:Seq>

のように<rdf:Seq>を毎回閉じてしまっているところだろうと思われた.しかし,MLでも解決していなかったし,自分でいじってみた範囲でもPEAR::XML_Serializerを使う限りどうしようもないように思われた.
結局,getSerializedDataで配列をxmlにした後に,正規表現で置換するという泥臭い方法にしてしまった.

$buf=$serializer->getSerializedData();
ereg("(.+?<rdf:Seq>)(.+)(</rdf:Seq>.+)",$buf,$regs);
$regs[2]=ereg_replace("<.?rdf:Seq>","",$regs[2]);
echo $regs[1].$regs[2].$regs[3];

これでFirefoxでも全件のタイトルが出るようになったし,w3cのvalidatorも通るようになった.めでたしめでたし.でも本当はもっとまともなやり方があるんだろうな……

*1:Auto-Dicoverってくれないので,ブックマークの管理>ファイル>新しいライブブックマーク,で登録する