pixivのAPIをfile_get_contentsにて取得できませんでした。


取得したいデータ:
http://spapi.pixiv.net/iphone/search.php?s_mode=s_tag&word=sampl&PHPSESSID=0

ブラウザからのアクセスすると問題なく取得でするのですがPHPから叩くとタイムアウトになってしまいます。
ユーザーエージェントやリファラーの書き換えも試したのですが、いずれもfile_get_contentsがタイムアウトとなってしまいました。

試してみたこと:
(1)php_iniでのユーザーエージェント及びリファラーの書き換え
   ini_set('user_agent', 'User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)');

(2)stream_context_createでの書き換え

<?php
function pr($var) {
echo '<pre>'; print_r($var); echo '</pre>';
}
header('Content-Type:text/html; charset=UTF-8');
$url = 'http://spapi.pixiv.net/iphone/search.php?s_mode=s_tag&word=sampl&PHPSESSID=0';

$context = stream_context_create(array(
'http' => array(
'method' => 'GET',
'header' => 'User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)',
)
));
$html = file_get_contents($url, false, $context);
pr($html);


よろしくお願い致します…(x_x)

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2012/10/11 17:40:40

ベストアンサー

id:a-kuma3 No.2

回答回数4971ベストアンサー獲得回数2153

簡単なスクリプト (php じゃなくて、Ruby だけど) で試してみたら、特に Agent や Referrer を指定しなくても、pixiv API の応答は取得できました。
なので、うまくいかないと言っているサーバでの spapi.pixiv.net への到達性や、許可の問題だと思います。

  • そもそも、spapi.pixiv.net のアドレスが解決できない
  • Proxy を通さないと、spapi.pixiv.net へ到達できない
  • fopen_wrapper が有効になってない

という辺りが原因じゃないか、と想像します。

他2件のコメントを見る
id:ozakou

度々コメントありがとう御座います。
反対に自分はRubyに触れたことすらないためPHPにこだわっていました…(お恥ずかしい限りです><)

他のサーバーにあるファイルはいずれもfopenで開けたため、「fopen_wrapper」は有効になっているかと思います。

Proxyについてですが、こちらを試したところ取得に成功しました。
ですがプロキシの寿命があまり長くないのでプロキシの状態を確認するのが少々大変創です。。

2012/10/10 11:44:45
id:a-kuma3

へー、プロキシでしたか。
サーバの環境の問題かどうかを切り分けるためにも、
手元のパソコンで Apache + PHP が動くようにしておくと良いですよ。

恥ずかしいので、もう一回書きますけど、ぼくが Ruby を使ったのは、PHP が苦手だからで、普通なら、PHP を使ってコードを確認して、「これは、動くはずですよ」って回答しなきゃいけないところです (^^;

2012/10/10 21:06:03

その他の回答1件)

id:Cherenkov No.1

回答回数1504ベストアンサー獲得回数493

ユーザエージェントをfirefoxではなくてiphoneにしてみるとどうでしょう。

id:Cherenkov

あでも「ブラウザからのアクセスすると問題なく取得」できるから的外れかも

2012/10/10 08:21:24
id:ozakou

ご回答ありがとう御座いました。IEやchろめのユーザーエージェントでもタイムアウトとなってしまいました...よろしくお願い致します。

2012/10/10 09:03:11
id:a-kuma3 No.2

回答回数4971ベストアンサー獲得回数2153ここでベストアンサー

簡単なスクリプト (php じゃなくて、Ruby だけど) で試してみたら、特に Agent や Referrer を指定しなくても、pixiv API の応答は取得できました。
なので、うまくいかないと言っているサーバでの spapi.pixiv.net への到達性や、許可の問題だと思います。

  • そもそも、spapi.pixiv.net のアドレスが解決できない
  • Proxy を通さないと、spapi.pixiv.net へ到達できない
  • fopen_wrapper が有効になってない

という辺りが原因じゃないか、と想像します。

他2件のコメントを見る
id:ozakou

度々コメントありがとう御座います。
反対に自分はRubyに触れたことすらないためPHPにこだわっていました…(お恥ずかしい限りです><)

他のサーバーにあるファイルはいずれもfopenで開けたため、「fopen_wrapper」は有効になっているかと思います。

Proxyについてですが、こちらを試したところ取得に成功しました。
ですがプロキシの寿命があまり長くないのでプロキシの状態を確認するのが少々大変創です。。

2012/10/10 11:44:45
id:a-kuma3

へー、プロキシでしたか。
サーバの環境の問題かどうかを切り分けるためにも、
手元のパソコンで Apache + PHP が動くようにしておくと良いですよ。

恥ずかしいので、もう一回書きますけど、ぼくが Ruby を使ったのは、PHP が苦手だからで、普通なら、PHP を使ってコードを確認して、「これは、動くはずですよ」って回答しなきゃいけないところです (^^;

2012/10/10 21:06:03
  • id:windofjuly
    うぃんど 2012/10/10 08:41:02
    (2)のコードだけをコピペして使ってみたところ、正常に動きましたので、
    タイムアウトを起こしているのは記載していない別の部分が原因でしょう。

    &PHPSESSID=0ってことなのでログイン処理のほうで間違っている可能性が高そうですが、
    そちらのサーバー固有の問題かも知れず、いずれにしても情報不足です。

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

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

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

回答リクエストを送信したユーザーはいません