2016-04-25 16 views
0

Я использую PHP для захвата CSV-файлов из Yahoo Finance на основе массива биржевых тикеров.Yahoo Finance: 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: Я добавил запрос cURL перед использованием fopen. Это проверка кода ответа 404. Я не получаю никаких 404 кодов ответов из cURL, но все равно получаю ту же ошибку, что упоминалось выше.

$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

При использовании данного URL-адреса в виде строки (напрямую), чтобы открыть файл через PHP, я не получаю никаких ошибок. Попробуйте убежать и закодировать свои переменные. – manniL

ответ

1

Вы должны URL закодировать все ваши Params в противном случае вы можете иметь неверный URL ...

$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.yahoo.com к ichart.finance.yahoo.com. то есть

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

@Calum Это довольно странно. Сначала мне удалось воспроизвести 404, но теперь я не получаю его ни за какой URL. – Chris

+0

Считаете ли вы, что это сторона Yahoo? Возможно, дросселирование IP-адресов? – Calum