CSV — Yahoo Finance: код ответа 404 (PHP)

Я использую PHP для получения CSV-файлов из Yahoo Finance на основе массива биржевых тикеров.

Мой код прост и выглядит следующим образом:

$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);

Я получаю следующую ошибку:

Предупреждение: fopen (http://ichart.yahoo.com/table.csv?s=ANA.L&а = 2&б = 16&с = 2016&д = 2&е = 19&F = 2016&г = д&Q = Q&у = 0&г = ANA.L&х = .csv): не удалось открыть поток: ошибка HTTP-запроса! HTTP / 1.0 404 не найден в y.php в строке x

Вручную введите предыдущий URL (http://ichart.yahoo.com/table.csv?s=ANA.L&а = 2&б = 16&с = 2016&д = 2&е = 19&F = 2016&г = д&Q = Q&у = 0&г = ANA.L&х = .csv) получает файл CSV без проблем, поэтому я не понимаю, почему я получаю код ответа 404.

РЕДАКТИРОВАТЬ:
Я добавил запрос 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 закодировал все ваши параметры, иначе у вас может быть неверный URL …

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

Другие решения

Попробуйте изменить 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

По вопросам рекламы [email protected]