RSSのUTF-8化

最近Bulkfeedsさんに拾ってもらえません。「最近」つっても、調べて見ると2004年の7月=約10ヶ月前に「Bulkfeedsさんに拾ってもらえない」という旨のエントリが有りますんで、随分長い間放置してる事になりますが(^^;;

でも、はっと気付くと、同じサーバに設置してるお友達のMTもBulkfeedsさんに拾ってもらえず「おとなりエントリ」が表示されなくなってる→さすがにこれはヤバい感じなので、この機会に重い腰を上げてみた次第。

まず、Bulkfeedsさんに当MTのRSS、index.rdfを喰って頂きます。

以下の URL は 登録に失敗しました。

https://crusherfactory.net/~yas_/index.rdf (XML parse error in RSS)

やっぱ↑こうなります。エラーなのは解るんだけど、「なにがエラーなのか」を表示してくれないのでよく解んない(^_^;)

続いて、RSSの妥当性をチェックするFEED Validatorさんに喰って頂きます。

Congratulations!
This is a valid RSS feed.

え?(^_^;) valid=「正当な」RSSフィードなんすか。…そりゃ困ったな(^^;;

のちの検証の結果、「valid RSS feed」となるためには.htaccess等で

AddType "text/xml; charset=EUC-JP"xml xsl rdf

とか設定しておく必要がある事が判明。これがないと

・Feeds should not be served with the "text/plain" media type
・Your feed appears to be encoded as "EUC-JP", but your server is reporting "US-ASCII"

と叱られる。

ワタシは以前にこの設定をしてたらしい。忘れてたけど(^^;;

無い知恵を絞って考えます。

「う〜む。Bulkfeedsさんに最近登録された(=エラーにならずに登録できる)RSSを見てみると、全部UTF-8みたいな気がする。つまり、単純にRSSをUTF-8にすれば良いのかな?」

本来はMT側をいじってMTの出力するindex.rdfをUTF-8化するべきなんでしょけど、ワタシゃ未だにPerl全然解んない(^^;ので、PHPでなんとかすることにします。

index.rdf.php

<?php

header("Content-Type: application/xml; charset=utf-8");

$file = "index.rdf";

$page = @file($file); //@を付けるとファイルオープンに失敗してもエラーを出さない
if ($page == False) die("File can not open");

//以後の出力を全てUTF-8に
mb_http_output ("UTF-8");

//取得したファイルを行毎に配列に格納
while (list($num, $line) = each($page)){

//EUC-JPと書いてるトコをUTF-8に書き換え
$line = eregi_replace("EUC-JP","UTF-8",$line);

//出力
echo $line ;

}

?>

元のindex.rdfを読んで、「EUC-JP」を「UTF-8」に置換して、UTF-8で出力するだけのスクリプトです。ただそれだけ。これをEUC/LFで保存して、index.rdfと同じトコに置きます。

準備が出来たら、今度はコレをBulkfeedsさんに喰って頂きます。

Add / Ping your RSS

以下の RSS Feed を登録/更新しました。
はかいおうこうむてん

ふむふむ、コードがUTF-8なら文句ないんですな(^_^)

ということで、以下の記述を.htaccessに追加し、index.rdfへのアクセスでindex.rdf.phpを読むようにしてみました。

RewriteEngine On
RewriteBase /~yas_
RewriteRule ^index.rdf$ index.rdf.php
RewriteRule ^index.xml$ index.xml.php
RewriteRule ^atom.xml$ atom.xml.php

なお、この記述はmod_rewriteが使える環境じゃないと駄目です。

いつの間に「BulkfeedsさんがUTF-8じゃないと喰わない」(もしくは「EUC-JPのは喰わない」)仕様になっちゃったのか謎ですが、これで、なんとかBulkfeedsさんに喰って頂ける模様。

feedAnalyzer - RSSの構文をチェックします

RSS構文をチェックしてくれる日本語サービス。FEED Validatorより警告が具体的で解りやすいかも。