最近 mixi という日本語のソーシャル・ネットワークに参加しました。
(AILightの石野さんに誘っていただきました)
mixi の日記として外部の RSS を指定することができますが、なぜか .Text だとうまくいきません。どうやら RSS がまったく取り込まれていないように見えます。で、FAQ を見てみたらこんなことが書いてありました。
日時に関する表記が以下の形式になっている必要があります...
<dc:date>2004-01-01T12:34:56+09:00</dc:date>
反映されないケース
・<dc:date>以外のdateタグ
・日時、時間表記の形式が違う
って、ええ?!
.Text の日時の表記は "Wed, 25 Aug 2004 01:55:00 GMT" っていう形式です。
というか、そもそも .Text の RSS は 2.0 なので <pubDate> タグです。<dc:date> タグっていったら RSS 1.0 じゃないですか。うーむ、どうやら RSS 1.0 のみサポートですか。
そこで、とりあえず RSS 2.0 から 1.0 に変換する XSL を書いてみました。これで変換した RSS を mixi に指定してみたらそれなりに読み込んでくれるようです。それならということで、ASP.NET で RSS 2.0 →1.0 変換をするものを作ってみました。といっても、中身は XSL を使って transform してるだけなんですが。
あと、日時が "Wed, 25 Aug 2004 01:55:00 GMT" 形式だと mixi 上ではすべて "0月0日" になってしまいます。なので、これも "2004-08-25T01:55:00Z" 形式に変換するようにしました(といっても、これまた SelectNodes して DateTime.ToString("s") するだけですが。あと、面倒なのでとりあえず GMT にしちゃってます)。
ダウンロード: rss20to10.zip
中身は rss20to10.aspx と rss20to10.xsl の 2ファイルのみです。
これらを ASP.NET が動くフォルダに置いてください。
rss20to10.xsl は ASP.NET が読み取れる必要があります。
あとは、引数に "url=[2.0→1.0したいRSSのURL]" を与えて rss20to10.aspx にアクセスすれば OK です。
たとえば rss20to10.aspx を example.com に置いたとすると、
http://example.com/rss20to10.aspx?url=http://www.divakk.co.jp/blog/aoyagi/Rss.aspx
というような感じです。これを、mixi の 「RSSのURL」 に指定してやれば .Text の RSS でもちゃんと取り込んでくれるようになります。
ただ、ちょっと注意。
rss20to10.aspx は横着な実装なのでリクエストがあると毎回バカ正直に RSS を取得し、2.0→1.0 して返します。たとえば、If-Modified-Since なんかが役に立たなくなると思います。それと RSS には If-None-Match と ETag を使って変更がないときのサイズを減らすっていう仕組みがありますが、これもまったく処理してません。
けど、まぁ、mixi 相手のときくらいしか使い道はないだろうから、特に問題はないでしょ。
そもそも、mixi が RSS 2.0 をサポートしてくれればそれでいいんだし。
(実装すんのはそんなに難しい話とは思えないんだけどなぁ。なんでサポートしないんだろ?)
ああ、1.0のみ対応だったのですか。
返信削除うまくとりこんでくれないなぁ、とだけ思ってました。
mixiのほうはほんとに個人的な話の日記にしようかな、と思いつつも
書くことないな~、と放置状態(w
なるほど
返信削除RSS1.0のみ対応なんですね。
だからMSNのBlogが読み込めま無かったのか。。
MSNのBlogを変換するためにVBUGで使わせてもらいました。
返信削除ありがとう。
VBUGとしてはやっぱりVBに書き換えないとな、、、、
MIXI 招待していただけませんか?
返信削除