PHP5 XML API Wikipedia に関する質問です。


Wikipediaの記事を取得するAPIがあります。
http://www.in-vitro.jp/blog/index.cgi/WebService/20060509_01.htm
これを参考に、PHPで記事を取得したいのですがうまくいきません。


http://ja.wikipedia.org/wiki/%E7%89%B9%E5%88%A5:Export/AIBO
このURLにブラウザでアクセスするとXMLの文章が表示されます。

ただ、
$wiki_feed = "http://ja.wikipedia.org/wiki/%E7%89%B9%E5%88%A5:Export/AIBO";
$xml = file_get_contents($wiki_feed);
これでXML文章を丸ごと変数$xmlに格納しようとすると、PHPから以下のようなエラーが返ってきます。

failed to open stream: HTTP request failed! HTTP/1.0 403 Forbidden

ブラウザからのアクセスは許可されて、PHPからのアクセスは拒否されているのでしょうか。
他のXMLは今まで普通に取得することが出来ていました。
例えばアマゾンのAPIやブログのRSSなどです。


解決策やエラーの原因等なんでも構いませんので、どなたかよろしくお願いいたします。

回答の条件
  • 1人5回まで
  • 登録:2007/11/23 01:40:04
  • 終了:2007/11/30 01:40:03

回答(2件)

id:y-kawaz No.1

y-kawaz回答回数1421ベストアンサー獲得回数2262007/11/23 13:45:51

ポイント35pt

試してみましたが、どうも特定の User-Agent を弾くようになっているようですね。

以下のように file_get_contents で使われる User-Agent を適当な値に偽装することで取得できました。

<?php
ini_set("user_agent", "User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)");
echo file_get_contents("http://ja.wikipedia.org/wiki/%E7%89%B9%E5%88%A5:Export/AIBO"); 
?>
id:bayan No.2

bayan回答回数100ベストアンサー獲得回数132007/11/23 20:08:18

ポイント35pt

クローラ対策でしょうか、HTTPリクエストヘッダの User-Agent を見て排除しているようです。


手許の環境で file_get_contents を使ったところ、User-Agent が空になっているみたいで、それだと 403 Forbidden になりました。


以下のようして、User-Agent を設定したらXMLを取得できました。

// IEのフリをする?

ini_set('user_agent', 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)');

$wiki_feed = "http://ja.wikipedia.org/wiki/%E7%89%B9%E5%88%A5:Export/AIBO";

$xml = file_get_contents($wiki_feed);

■URL

http://phpspot.org/blog/archives/2007/09/file_get_conten.html

「file_get_contents UserAgent」 でググると最初に来る


http://hain.jp/index.php/tech-j/2007/09/03/file_get_contents%E3%...

PHP5であれば stream_context_create 関数が使えるそうです。

ini_set の第二引数が User-Agent: から始まっているのは間違っていると思いマス。


  • id:tokyosmash
    きちんとコメントしてポイント配分したかったのですが、ぎりぎり間に合いませんでした。
    大変失礼しました。
    問題は無事に解決しました!
    ありがとうございました。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません