3

http://www.facebook.com/feeds/share_posts.php?id=207302593&viewer=207302593&key=d95b2de790&format=rss20

上記のリンクは、Facebook で共有した投稿への URL です。その URL を simplexml_load_file() にロードすると、ページ全体にエラーが表示されます。エラーを見ると、Facebook はフィードの代わりに HTML を出力しているようです。これは認証の問題だと思いましたが、Facebook からログアウトし、フィードの URL をブラウザにロードしたところ、フィードを見ることができました。ここに私が得ているエラーがあります。何か案は?ありがとう!

A PHP Error was encountered

Severity: Warning

Message: simplexml_load_file() [function.simplexml-load-file]: http://www.facebook.com/feeds/share_posts.php?id=207302593&viewer=207302593&key=d95b2de790&format=rss20:12: parser error : AttValue: " or ' expected

Filename: models/Stream.php

Line Number: 55

A PHP Error was encountered

Severity: Warning

Message: simplexml_load_file() [function.simplexml-load-file]: </script><noscript> <meta http-equiv=refresh content="0; URL=?_fb_noscript=1" />

...
4

1 に答える 1

12

「フィード」Facebook を再定義する方法。これを試してみて、ダウンロードしたページを見てください

echo file_get_contents('http://www.facebook.com/feeds/share_posts.php?id=207302593&viewer=207302593&key=d95b2de790&format=rss20');

Facebook はユーザー エージェント スニッフィングを行っているようで、そのページを処理できないと思われる「ブラウザー」 (この場合は PHP がブラウザー) を拒否しているようです。彼らがフィードでこれを行っているのは少し奇妙ですが、ザッカーバーグは不思議な方法で働いています. (画面のスクレイピングを防ぐためにこれを行うことは 1 つのことですが、フィードは暗黙的に機械によって読み取られることを意図しています)

Facebook がサポートするブラウザーと一致するようにユーザー エージェント文字列を設定する必要があります。これを行う必要がある場合は、curl を使用してファイルをダウンロードします (curl には、http ヘッダーを設定するためのオプションがたくさんあります)。

curl が気に入らない場合は、PHP のデフォルトのユーザーエージェントを ini 設定でオーバーライドできます

    ini_set('user_agent', 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3');
于 2009-10-04T17:32:50.530 に答える