Landscape トップページ | < 前の日 2005-05-12 2005-05-13 次の日 2005-05-14 >

Landscape - エンジニアのメモ 2005-05-13

Bloglines で本文が表示されない現象の原因と対処


* Bloglines で本文が表示されない現象の原因と対処

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [RSS]

Bloglines で本文が出ないという現象の原因と対処法。

- Bloglines でタイトルだけ出て本文が出ない「ExpandできないCollapse状態」

Bloglinesがおかしい ただのにっき
http://sho.tdiary.net/20050506.html#p01
ここ数日、本文が出ない(出るときもある)。ようするに「ExpandできないCollapse状態」になっている。これではBloglinesを使っている意味がないじゃないか。つーか、ただのアンテナだよ、これじゃ。すげー不便。

Bloglinesがおかしい(2) ただのにっき
http://sho.tdiary.net/20050512.html#p01
SleipnirでBloglinesを使っていると、ExpandできないCollapse状態になって困ると書いたら、Firefoxだと起きないと聞いたので、BloglinesだけFirefoxを使っている。実際、Firefox導入以来、問題は起きていない。なんでだ。

私もこの現象に悩まされてました。しばらく悩んだ後、この現象が発生する法則に気づきました。この現象は、長くてマルチバイト文字を使ったタイトルを持ったフィードが原因のようです。私の場合、それらのフィードを別ディレクトリに隔離することで問題を回避できました。

- 「今日のなんでやねん」が更新されると本文が表示されなくなる

最初に断っておく。当記事は単に技術的興味から「Bloglines において本文が出ない」という現象の原因を追及し、対処法を見いだそうとするものだ。究明の過程で特定のサイト名や URL、RSS が登場するが、究明の手がかりとして使っているだけで、それらを糾弾したり批判する意図は全くない。

私は、きたさんの tDiary 日記「今日のなんでやねん」 http://kitaj.no-ip.com/tdiary/ が更新されると本文が表示されないという現象が発生することに気づいた。また、やねうらおさんのはてなダイアリー日記「やねうらお−よっちゃんイカを買いに行ったついでに家を買う男」 http://d.hatena.ne.jp/yaneurao/ が更新されても同じ現象が出ることに気づいた。

どちらも、タイトルが長く、かつ日本語文字列が使われている。直感的に、これらの RSS が問題の原因であることを悟った。

今日のなんでやねん,っつーか今月のなんでやねんになりつつあるね…
やねうらお−よっちゃんイカを買いに行ったついでに家を買う男

対処は 2005-04-18 の「Bloglines から エクスポートした OPML が文字化けする現象への対処」で書いたように、問題を引き起こす RSS フィードを zzz_broken というディレクトリに隔離することだ。そして、問題のあるフィードと問題のないフィードを同時に開かないこと。問題のあるフィードはBloglines においては本文を読めないので、「アンテナ的」にしか使えないけど、他のフィードに問題が波及するよりは良い。

ここまでが、私が経験から導き出した対策。今日は、もう少し突っ込んで調べてみることにする。

- RSS の文法チェック

まず、RSS の文法が正しいことを確認しておく。2004-12-19 の「RSS Validator RSS/RDF の構文・妥当性と文法チェック」で紹介した Feed Validator と RSS Validator、W3C RDF Validation Service でチェックする。

対象 RSS は http://kitaj.no-ip.com/tdiary/index.rdf だ。

Feed Validator Results: http://kitaj.no-ip.com/tdiary/index.rdf
http://feedvalidator.org/check.cgi?url=http%3A%2F%2Fkitaj.no ...
Your feed appears to be encoded as "UTF-8", but your server is reporting "US-ASCII" [help]
line 9, column 1: Undefined channel element: copyright [help]

2つエラーが出ている。一つ目は、UTF-8 って XML 中に書いてるけどサーバは US-ASCII って HTTP レスポンスヘッダを返してるぞ、というエラー。これは当サイト Landscape でも同じエラーが出ているので、たぶん今回追跡している現象とは関係ないと思う。二つ目は、copyright 要素なんてスキーマにないよ、というエラー。二つ目はちょっとだけ怪しいかもしれない。

RSS Validator
http://rss.scripting.com/?url=http%3A%2F%2Fkitaj.no-ip.com%2 ...
Congratulations -- the RSS feed validates! You may include the following
logo text into your page if you want to express your support for RSS.

RSS Validator ではエラーなしと判定された。

W3C RDF Validation Service RDF Validator Results
http://www.w3.org/RDF/Validator/ARPServlet?RDF=%3C%3Fxml+ver ...
Validation Results
Your RDF document validated successfully.

W3C RDF Validation Service でもエラー無しと判定された。

基本的に、RSS に重大な文法違反があるわけではなさそうだ。次は Bloglines の出力している HTML を調べる。

- Bloglines が どんな HTML を出力しているか調べてみる

Bloglines が どんな HTML を出力しているか調べてみる。

http://www.bloglines.com/preview?siteid=273546 を開くと、Bloglines で今日のなんでやねんを表示させたときのプレビューが見られる。この時点でもうタイトルがおかしい。「今月のなんでやねんになりお」になってる。「お」って、Bloglines 開発陣には 2ちゃんねる VIP 板 (びっぷいた) 常駐の VIPPER でもいるのかな? 「それが Bloglines クオリティ」とか言ってたりして。

HTML がどうなっているかを調べるため、IE というか Sleipnir でページをレンダリングさせて、ページのソースを表示させる。

今日のなんでやねん,っつーか今月のなんでやねんになりお
http://www.bloglines.com/preview?siteid=273546
itemList = new Array();

itemText="";
itemText+="<h3><a title=\"サイト: 今日のなんでやねん,っつーか今月のなんでやねんになり縺\" href=\"http://kitaj.no-ip.com/tdiary/20050511.html#c01\" target=_blank>2005-05-11縺繝繧繝歇1] (O縺九b縺)</a></h3>";
itemText+="<p class=\"author\">";

「今日のなんでやねん,っつーか今月のなんでやねんになり」の後ろが文字化けしてる。2005-04-18 の「Bloglines から エクスポートした OPML が文字化けする現象への対処」と似たような化け方だ。UTF-8で78バイト目までは化けずに表示され、それより後で文字化けが始まっている。

http://www.bloglines.com/preview?siteid=273546 を Firefox で開いてみると、確かにタイトルは文字化けしているが本文は問題なく表示される。Firefox なら大丈夫というのは本当のようだ。使った Firefox は Mozilla/5.0 (Windows; U; Windows NT 5.0; ja-JP; rv:1.7.7) Gecko/20050414 Firefox/1.0.3 。1.0.4 には日本語版が出たらアップデートしよう。

Firefox でソースを表示させてみる。
itemText="";
itemText+="<h3><a title=\"サイト: 今日のなんでやねん,っつーか今月のなんでやねんになり■\" href=\"http://kitaj.no-ip.com/tdiary/20050511.html#c01\" target=_blank>2005-05-11のツッコミ[1] (Oかもと)</a></h3>";

「今日のなんでやねん,っつーか今月のなんでやねんになり」の後ろにバイナリがくっついているが、その後に影響はないようだ。これが Firefox では問題が起こらない理由か。ちなみに、当サイトの RSS や HTML にバイナリを紛れ込ませたくはないので、上記引用においてバイナリは■に置き換えてある

RSS のchannel要素内の title 要素を見てみる。

今日のなんでやねんの RSS
http://kitaj.no-ip.com/tdiary/index.rdf
<channel rdf:about="http://kitaj.no-ip.com/tdiary/index.rdf">
<title>今日のなんでやねん,っつーか今月のなんでやねんになりつつあるね…</title>

ぱっと見では問題なさそう。RSS の文法チェックでも問題なかったし、やっぱりタイトルが長いことが原因か?

- テストケースを作ってみる

文字化けが起こる最小の RSS を作ってみる。さすがに 実在のドメインの RSS を勝手に配布するのはどうかと思ったので、link 要素は example.com で作成した。

http://sonic64.com/test/index.rdf
<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF xmlns="http://purl.org/rss/1.0/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xml:lang="ja-JP">
<channel rdf:about="http://sonic64.hp.infoseek.co.jp/test/index.rdf">
    <title>今日のなんでやねん,っつーか今月のなんでやねんになりつつあるね…</title>
    <link>http://example.com/</link>
    <description></description>
    <items>
        <rdf:Seq>
            <rdf:li rdf:resource="http://example.com/1"/>
        </rdf:Seq>
    </items>
</channel>
<item rdf:about="http://example.com/1">
<link>http://example.com/1</link>
<dc:date>2005-05-11T12:20:47+09:00</dc:date>
<title>2005-05-11のツッコミ[1] (Oかもと)</title>
<dc:creator>Oかもと</dc:creator>
<description>漏れも同じ現象だった。</description>
<content:encoded><![CDATA[漏れも同じ現象だった。]]></content:encoded>
</item>
</rdf:RDF>

上記 RSS を Bloglines に読ませてプレビューしてみる。

Bloglines | Preview Feed
http://www.bloglines.com/preview?siteid=1840248
ビンゴ。文字化け発生。

次に、問題が発生しなくなる最小の RSS を作る。

http://sonic64.com/test/index_short.rdf
<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF xmlns="http://purl.org/rss/1.0/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xml:lang="ja-JP">
<channel rdf:about="http://sonic64.com/test/index_short.rdf">
    <title>今日のなんでやねん</title>
    <link>http://example.com/</link>
    <description></description>
    <items>
        <rdf:Seq>
            <rdf:li rdf:resource="http://example.com/1"/>
        </rdf:Seq>
    </items>
</channel>
<item rdf:about="http://example.com/1">
<link>http://example.com/1</link>
<dc:date>2005-05-11T12:20:47+09:00</dc:date>
<title>2005-05-11のツッコミ[1] (Oかもと)</title>
<dc:creator>Oかもと</dc:creator>
<description>漏れも同じ現象だった。</description>
<content:encoded><![CDATA[漏れも同じ現象だった。]]></content:encoded>
</item>
</rdf:RDF>

Bloglines | Preview Feed
http://www.bloglines.com/preview?siteid=1840267
タイトルを短くした方は問題なく表示された。やはりタイトルが長いことが原因になっている。

ひとまずここまでにしておこう。本当は、バイナリエディタでどんなデータが混入しているのかとか、ASCII 文字だとどうなのか、日本語文字列でも大丈夫な文字があるのか、とかいろいろ調べたいところだが、まあ再現するテストケースが作れたからこれで良いでしょう。

- 考察

RSS 1.0 では、channel 要素内の title 要素の長さは40バイト以内に収めることを推奨しているが、それに引っかかっている・・・わけじゃあなさそう。単に Bloglines の文字列処理に不具合があるだけかな。DB のタイトル格納カラムを varchar(80) で定義してて、UTF-8 文字列のバイト境界を無視して切ってしまっているとかね。nvarchar などの文字列長での定義ならば良いんだけど。ちなみに、「Landscape - エンジニアのメモ」は UTF-8 で36バイト。まだまだ大丈夫。

Channel 要素内の Description 要素の中身が空なのが良くないのかなと思ったが、そうではなかった。文法チェックでもエラーでなかったし。

これを悪用して Bloglines ユーザ向けの DoS (Denial of Service) 攻撃ができるなあ。普段は有用な記事ばっかり書いて購読者を集めておいて、数日に一度だけ channel 要素内の title 要素を長くした RSS を配布するとか。なんか手間がかかるばっかりで攻撃の効果が薄いけど。

あと、本文や Description の html が不完全だったりすると表示が乱れることがある。閉じタグのない a 要素とかを書かれたりすると、それより後の本文が全部リンクになっちゃうとか。いちいち 記事の html が整形式 (well-formed) かどうかをチェックするのは大変なので仕方ないことだと思うけど。

channel 要素内の title 要素が長い場合に発生する問題については、Bloglines に報告した方が良さそうだ。

- Bloglines にバグレポートしよう

よし、2005-01-09 の「favicon.ico が bloglines で表示されない理由」の時みたいに、Bloglines にバグレポートしよう。もちろん、テストケースもちゃんと添えてね。と思ったけど、ねむくなったので今日はここまで。

追記。本件は 2005-05-15 の Bloglines に「本文が表示されない現象」をバグ報告 でBloglies にバグレポートした。

すべての記事の見出し (全1029件)
全カテゴリの一覧と記事の数
カテゴリごとに記事をまとめ読みできます。記事の表題だけを見たい場合は、すべての記事の見出し (カテゴリ別表示) へ。

直近30日分の記事
2007-04-23 (Mon)
2007-03-07 (Wed)
2007-02-27 (Tue)
2007-01-17 (Wed)
2007-01-15 (Mon)
2007-01-14 (Sun)
2007-01-08 (Mon)
2006-12-01 (Fri)
2006-11-22 (Wed)
2006-11-20 (Mon)
2006-11-19 (Sun)
2006-09-30 (Sat)
2006-08-29 (Tue)
2006-08-04 (Fri)
2006-07-27 (Thu)
2006-07-23 (Sun)
2006-07-17 (Mon)
2006-07-10 (Mon)
2006-07-06 (Thu)
2006-07-03 (Mon)
2006-06-29 (Thu)
2006-06-28 (Wed)
2006-06-27 (Tue)
2006-06-25 (Sun)
2006-06-19 (Mon)
2006-06-18 (Sun)
2006-06-15 (Thu)
2006-06-11 (Sun)
2006-06-01 (Thu)
2006-05-30 (Tue)
プロファイル
斎藤 宏明。エンジニアです。宇都宮市に住んでいます。
リンク
RSS
スポンサードリンク
Powered by
さくらインターネット

© 斎藤 宏明 Saito Hiroaki Gmail Address
Landscape - エンジニアのメモ http://sonic64.com/
Landscape はランドスケープと読みます。
ひらがなだと らんどすけーぷ です。