2016-04-25 6 views
0

私はヤフーファイナンスからCSVファイルを取得するためにPHPを使用しています。ヤフーファイナンス:404レスポンスコード(PHP)

私のコードは簡単で、次のようになります。

$file = 'http://ichart.yahoo.com/table.csv?s='.$this->symbol.'&a='.$a.'&b='.$b.'&c='.$c.'&d='.$d.'&e='.$e.'&f='.$f.'&g='.$g.'&q=q&y=0&z='.$this->symbol.'&x=.csv'; 
$handle = fopen($file, "r"); 
//Then use fgetcsv to grab data, 
fclose($handle); 

私は次のエラーを取得しています:

Warning: fopen(http://ichart.yahoo.com/table.csv?s=ANA.L&a=2&b=16&c=2016&d=2&e=19&f=2016&g=d&q=q&y=0&z=ANA.L&x=.csv): failed to open stream: HTTP request failed! HTTP/1.0 404 Not Found in y.php on line x

が手動で前のURL(http://ichart.yahoo.com/table.csv?s=ANA.L&a=2&b=16&c=2016&d=2&e=19&f=2016&g=d&q=q&y=0&z=ANA.L&x=.csv)を入力すると、問題はないとのCSVファイルを取得します私はなぜ404応答コードが得られるのか混乱しています。

EDIT: fopenを使用する前にcURLリクエストを追加しました。これは、404応答コードを確認するためです。私はcURLから404の応答コードを取得していませんが、上記のエラーと同じエラーが表示されます。

$curlhandle = curl_init($file); 
curl_setopt($curlhandle, CURLOPT_RETURNTRANSFER, TRUE); 
/* Get the HTML or whatever is linked in $url. */ 
$response = curl_exec($curlhandle); 
/* Check for 404 (file not found). */ 
$httpCode = curl_getinfo($curlhandle, CURLINFO_HTTP_CODE); 

if($httpCode == 404) { 
    echo "404:".$this->symbol."<br>"; 
    curl_close($curlhandle); 
    return null; 
    break; 
} else { 
    curl_close($curlhandle); 
    $handle = fopen($file, "r");       
} 
+0

PHP経由でファイルを開くために指定されたURLを(直接)文字列として使用する場合、エラーは発生しません。エスケープして変数をエンコードしてみてください – manniL

答えて

1

あなたが

$file = 'http://ichart.yahoo.com/table.csv?s='.urlencode($this->symbol).'&a='.urlencode($a).' //etc 
+0

'' urlencode() 'を追加しても全く同じ結果が得られます – Calum

+0

コード全体を貼り付けます – fire

+0

URLエンコードする必要があるパラメータはありません。私はそれが問題だとは思わない。 – Chris

0

ichart.finance.yahoo.comichart.yahoo.comを変更してみてください...あなたのparamsのすべてがそうでなければ無効なURLを持つことができURLエンコードする必要があります。すなわち

file = 'http://ichart.finance.yahoo.com/table.csv?s='.$this->symbol.'&a='.$a.'&b='.$b.'&c='.$c.'&d='.$d.'&e='.$e.'&f='.$f.'&g='.$g.'&q=q&y=0&z='.$this->symbol.'&x=.csv'; 
$handle = fopen($file, "r"); 
//Then use fgetcsv to grab data, 
fclose($handle); 
+0

まだまったく同じ結果が得られる – Calum

+0

@カルマこれはかなり奇妙です。最初は私は404を複製することができましたが、今ではどちらのURLに対しても取得できません。 – Chris

+0

あなたはそれがYahoo側の何かだと思いますか?おそらくIPを抑制していますか? – Calum

関連する問題