Home > 技術 > SimplePieがパースエラーを吐くときの対策

SimplePieがパースエラーを吐くときの対策

PHPでFeedをお手軽に扱えるSimplePieですが、ときたま謎のエラーが発生します。

僕が最近ぶつかったエラーは

 
<pre>A feed could not be found at http://katsuura.co.jp/. A feed with an invalid mime type may fall victim to this error, or SimplePie was unable to auto-discover it.. Use force_feed() if you are certain this URL is a real feed.</pre>

というエラーでした。

しかたないので、 $feed->force_feed(ture); すると…

 
<pre>This XML document is invalid, likely due to invalid characters. XML error: Mismatched tag at line 13, column 8</pre>

こんなエラーが出ます。ふしぎですねー

しかし、wgetした後で localhost/hoge.xml をパースすると成功するのです。さらに。適当な別のサーバーに echo file_get_contents(destination_addr); とか書いたPHPスクリプトを置いて踏み台にすれば、これでも動いちゃいます。本当に不思議です。

結局、tcpdumpしたりtelnetで直接叩いたりした結果、UserAgentが悪さをしてることが分かりました。というのも、SimplePieはご丁寧に

SimplePie/1.3-dev (Feed Parser; http://simplepie.org; Allow like Gecko) Build/20110421044730

なんてUserAgentを投げているわけです。

試しに

$feed->set_useragent(”simplepie”);

としたら、ばっちり動きました。やれやれ。

ちょっとコレだと怖いので念のため

Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_7; ja-jp) AppleWebKit/533.21.1 (KHTML, like Gecko) Version/5.0.5 Safari/533.21.1

等、他のブラウザのフリをするのもアリです。

ちなみに、デフォルトではHostヘッダも投げてないみたいなので、それで不具合が起きるかも知れません。curlが上手に世話してくれてるかもしれないのでハッキリしたことは言えませんが。

その場合は File.php の100行目付近に、curl_setoptが沢山あるのでcurlが上手に世話してくれてるかも?)

そこに適宜書くと良いと思われます。

Comments:0

Comment Form
Remember personal info

Trackbacks:0

Trackback URL for this entry
http://blog.s-satoshi.net/tech/simplepie_ua_error/trackback/
Listed below are links to weblogs that reference
SimplePieがパースエラーを吐くときの対策 from S.Satoshiのブログ

Home > 技術 > SimplePieがパースエラーを吐くときの対策

Search
Feeds
Meta

Return to page top