fc2ブログからMovableTypeにトラックバックができないことがある件


 ググるとMovableTypeからfc2にトラックバックできないことは割と出てきて、原因はfc2がIPアドレスベースでトラックバックに制限をしているらしいってことが出てくるが、反対にfc2ブログからMovableTypeにトラックバックできないことがままある。

 症状としては、ApacheなどWebサーバのアクセスログにはfc2からトラックバックが飛んできてHTTPステータス200を返しているが、MovableTypeにはトラックバックされた痕跡が全くないこと。MovableTypeは mt_tbping テーブルに受信した全てのトラックバックを保存していてスパム扱いのものも例外ではない。だが、fc2からのトラックバックの場合、Webサーバのログにはあるが mt_tbping テーブルには全く保存されていない = MovableTypeの管理画面から全く表示されない事態が割と発生する。

 今回はそんなfc2からのトラックバックがMovableTypeで受信できない件について調査した。なお、仕事で調査し、途中で多忙のためにチームメンバーに振ったタスクだったりする。本人と役員の許可を得た上で以下の通り公開しておく。

 まず共通するのは、色々なIPアドレスからトラックバックが送られているが、Webサーバにはステータス200のログが残っているのにMovableTypeにはトラックバックの痕跡がない場合、共通してレスポンスボディのサイズが2,314バイトだということだった。

 そこで、fc2からのトラックバックをスクリプトで受信して確認したところ、なんだかexcerptが200バイトで切られているっぽい雰囲気になっていた。ここで問題なのは、マルチバイトを意識せず、機械的に整形されていること。そして問題は、UTF-8では全角日本語は3バイトのため、このロジックだと割とマルチバイト文字の一部が省かれてしまい、UTF-8文字集合としては正しくない文字が含まれる文字列になってしまう。

 そしてそんな文字列を含むトラックバックをMovableTypeに送ってみると…

不正な要求です。文字コードUTF-8に含まれない文字データを送信しています。

 HTML等全てを含むとちょうど2,314バイトだった。つまり、MovableTypeからすると不正なexcerptがfc2から送られているため、トラックバック処理が行われずにバリデーションで弾かれていたということだ。

 とりあえず結論はfc2の実装はクソだってことだろう。fc2はPHPで実装されているという噂だが、文字列の短縮化に単純にsubstr()でやっているといったところだろうか。

 対応としては、fc2の対応を待つこと、MovableTypeに手を入れてバリデーションを修正することのどちらかだが、昨今のトラックバックスパムの動向を鑑みると後者はあり得ないと思う。fc2の対応に期待したい。

 最後になったが、調査を引き継いでくればkano-eさんに感謝。