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
| トラックバック