二〇〇三年 九月 十八日(

旧暦 八月二十二日 大安
癸未年 八月廿二日

RSSで試行錯誤中 その2

自分のサイトのRSSを読み込んで反映させることが出来ないという問題の続きだが、上手くいくMovableTypeのRSS(http://www.movabletype.org/index.xml)と、自分のサイトのindex.rdfの違いは何だろうと考えてみる。
まず、1行目の encoding="iso-8859-1" の部分が違う。ワタシのサイトは日本語コードをEUC-JPにしてあるから、encoding="EUC-JP" になっている。bulknews.netを経由して取得したasahi.comのものは utf-8 である。はて、もしや・・・。

と思って、index.rdfのテンプレートを見てみる。
1行目は、
<?xml version="1.0" encoding="<$MTPublishCharset$>"?>
である。これを強引にencode="iso-8859-1"と書き換えてrebuildし、RSSを読み込む方の
テンプレートもrebuildしてみる。
すると、いままでエラーで落ちてたところを通過して、一応最後までいった。「Rebuildしたページを見る」をすると、案の定文字化けているが、それは想定内。ようやくエラーの原因がわかった。
つまり、RSSを読み取る部分(たぶんmt-rssfeed.pl、それか、ひょっとするとrdfに指定しているうちのどれか)でencoding="EUC-JP"には対応しておらずエラーになっているということらしい。

しかし、ワタシのサイトはEUC-JPで設定してしまっているため、いまさら文字コードを変えることなんて出来ない。どうしようか・・・。

しばし、またGoogleで情報集め。

で、こちらのページを見つけた。mt-jcode.plを使って、出力するindex.rdfの文字コードをutf-8にしてしまうというもの。なるほど。ちょっと考えてみれば当たり前のことだった。強引にutf-8で出力してしまえばいいわけで。

というわけで、M's folder のindex.rdfのテンプレートを次のように修正。

--------------------------------------------------------------------------------------------
<?xml version="1.0" encoding="utf-8"?>
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
xmlns:admin="http://webns.net/mvcb/"
xmlns:cc="http://web.resource.org/cc/"
xmlns="http://purl.org/rss/1.0/">
<channel rdf:about="<$MTBlogURL$>">
<title><$MTBlogName encode_xml="1" jcode="utf8"$></title>
<link><$MTBlogURL$></link>
<description><$MTBlogDescription encode_xml="1" jcode="utf8"$></description>
<dc:language>ja</dc:language>
<dc:creator></dc:creator>
<dc:date><MTEntries lastn="1"><$MTEntryDate format="%Y-%m-%dT%H:%M:%S"
language="ja" jcode="utf8"$><$MTBlogTimezone$></MTEntries></dc:date>
<admin:generatorAgent rdf:resource="http://www.movabletype.org/?v=<$MTVersion$>"
/>
<MTBlogIfCCLicense>
<cc:license rdf:resource="<$MTBlogCCLicenseURL$>" />
</MTBlogIfCCLicense>
<items>
<rdf:Seq><MTEntries lastn="15">
<rdf:li rdf:resource="<$MTEntryPermalink encode_xml="1"$>"
/>
</MTEntries></rdf:Seq>
</items>
</channel>
<MTEntries lastn="15">
<item rdf:about="<$MTEntryPermalink encode_xml="1"$>">
<title><$MTEntryTitle encode_xml="1"
jcode="utf8"
$></title>
<link><$MTEntryPermalink encode_xml="1"$></link>
<description><$MTEntryExcerpt encode_xml="1" jcode="utf8"$></description>
<dc:subject><$MTEntryCategory encode_xml="1" jcode="utf8"$></dc:subject>
<dc:creator><$MTEntryAuthor encode_xml="1"$></dc:creator>
<dc:date><$MTEntryDate format="%Y-%m-%dT%H:%M:%S" language="ja"
jcode="utf8"$><$MTBlogTimezone$></dc:date>
</item>
</MTEntries>
</rdf:RDF>

--------------------------------------------------------------------------------------------

赤いところが修正した部分。これでindex.rdfの文字コードをutf-8にして出力できた。
(もちろんjcode="euc"を使うためにはmt-jcode.plがインストールされていることが必要。)

で、これらのRSSを表示させてみたのがこちら。M's folderとasahi.com、HotWiredを表示させてみた。ページはEUC-JPなので、前のエントリで書いたようにMainのテンプレートの中で読み込むときに
<$MTInclude file="hogehoge.html" jcode="euc"$>
というふうにjcode="euc"で変換している。

出すときも、取るときもmt-jcode.plのお世話になりっぱなし。感謝感謝。

しかし、MovableType(ワタシが入れたのは2.63)のデフォルトの状態では、index.rdfのencoding= に設定した文字コードが自動的に入ってしまうわけで、その場合、読み取り側では悉くエラーが出ているはず。・・・なのにあんまりこれに関する情報がないんだよな。
みんな、もっとかしこいParserを使っているのか、それともEUCでBlogする人が少ないのか・・・。どうなんだろ。

ま、それはさておき、こんどは、これらのヨソの情報をどうやって更新するかという問題だ。
エントリを入れて更新されたときしかRSSの情報も更新されないのでは、あんまり意味無いからなぁ。
でも、xreaはcron使えないし・・・。どうすべぇ。


追記:
これに関して情報を追っかけていたら、
http://uva.jp/dh/mt/archives/000391.html
に関連した情報があるのを発見。そしてそれは
http://blog.bulknews.net/mt/archives/000006.html
にもつながっている。
よく読むと、問題はXML::Parserに起因しているらしい。XML::Parserに関しては前述の
http://blog.bulknews.net/mt/archives/000006.htmlに解決法が書かれているが、ワタシの場合は「1) XML::Parser がない場合」に該当しXML::Parser::Liteをインストールしているため、この方法ではダメな気がする(試してない)。
要するに、ParserのレベルでEUC-JPが蹴られてたってこと。
まあ、出す方で解決するか、取る方で解決するか、っていうことなんだけど、つくづく日本語コードには泣かされるなぁ・・・。


さらに追記:
こういう解決法もあり。
http://weblo.torus.jp/archives/000162.html
http://weblo.torus.jp/archives/000175.html
やっぱり出す方をutf-8にする方が、全体としてはスマートだよな。

Posted by mura at 2003年9月18日 13:45 | トラックバック
コメント

先輩、先に行ってください・・・!

Posted by: かえる at 2003年9月18日 21:26

すんません。
ガラガラガラっと、いろんなことが続けざまに解決したので、とりあえず一気に書いてしまいました。
確かにわかりやすいとはいえませんね。
そのうち、RSSを使うときがきたら参考にしてください。
かえるさんとこもEUC-JPなので、よそのRSSを表示させるときには一工夫必要になると思います。

Posted by: mura at 2003年9月19日 00:13

もはや3周遅れ。追いつくためには、背中の周回数を示す「6」を「9」に逆さに背負わないとダメっぽ…このネタ元がわかる人は同世代?

Posted by: kuro at 2003年9月19日 04:23

えーと、この方面で何も追いつく必要はないです(^_^;)。
結果として、こーゆーことができるんだなぁ、と思っておいてもらえば、それでいいと思います。

ネタ的にあんまり面白いことも書けないので、ちょっとアプローチの違う面を出していかないと・・・、という気分もありますが。

Posted by: mura at 2003年9月19日 10:05
コメントする









名前、アドレスを登録しますか?






トラックバック

RSS feed encoding = EUC-JP -> UTF-8
概要 まじめにGoogle sitemapにサイトマップを登録し、 htmlの文法も直した。 しかし全然テクノラティとgoogleブログ検索に 引っかからないの...
Weblog: ESCAPE WHILE YOU CAN
時刻: 2007年03月23日 03:47

フィード向けアドセンスを設定した
概要  グーグルアドセンスでフィード向けアドセンスのサービスが始まっています。今までのアドセンスでは、WEBページ上で広告を表示する仕組みになっていました、今回...
Weblog: 臨機応変?
時刻: 2008年08月29日 12:08

RSS・ATOMの文字コードを変えました(EUC2UTF)
概要 師匠から「最近、Feedが止まっていてGoogleリーダーとかで新着が拾えない」...
Weblog: Talking in the 5th-Dimension.
時刻: 2008年11月21日 22:52

このエントリのトラックバックURL

http://www.villagewood.net/mt/mt-tb.cgi/10

◇このサイトのサーバの調子によって、トラックバックを送信してもエラーが表示されたり、すぐにこのページに反映できないときがあります。ですが、トラックバック自体は送られていますので、重ねて送っていただかなくても大丈夫です。こちらでも出来るだけ早く反映できるようにrebuildしますので、ご容赦ください。
参照元URL
関連エントリ