Задать вопрос

Как получить информацию с finance.yahoo?

Нужно получать информацию с finance.yahoo автоматически.

Есть ссылка
https://finance.yahoo.com/quote/AAPL/history?perio...
Нужно получить информацию из таблицы. Конечно, можно парсить html, но рядом есть то, что нужно - ссылка на csv (Download Data). Проблема в том, что я никак не могу получить правильную ссылку.

Говорят, дело в куки - но где точно и что ещё надо вставлять в ссылку я пока не пойму.

Мой код (рабочий, но не хватает параметра в запросе или куки)
//Получить информацию для подстановки в запрос из url
function yahoo_get_crumb_from_url($url)
{
$crumb='';
$data=file_get_contents($url);
$pattern = '|CrumbStore":{"crumb":"(.+?)\"|is'; 
preg_match($pattern, $data, $out); 
return $out[1];
}

//Получить информацию о курсе акций для выбранного тикера и дат (например AAPL,1509649200,1509908400)
//Использует функцию yahoo_get_crumb_from_url
function yahoo_get_stock_information($ticker,$date_begin,$date_end)
{
$today=time();
//Получаем информацию для подстановки в запрос из url
$url='https://finance.yahoo.com/quote/AAPL/history?period1='.$today.'&period2='.$today.'&filter=history';
$crumb=yahoo_get_crumb_from_url($url); 
$url='https://query1.finance.yahoo.com/v7/finance/download/'.$ticker.'?period1='.$date_begin.'&period2='.$date_end.'&events=history&crumb='.$crumb;
$data=file_get_contents($url);
return $data;
}

//Вызов
echo yahoo_get_stock_information('AAPL',1509649200,1509908400);
//Результат - не авторизированный доступ. 
//HTTP request failed! HTTP/1.0 401 Unauthorized


А если идем по сформированной ссылке напрямую, например сейчас ссылка
https://query1.finance.yahoo.com/v7/finance/downlo...

получаем
{
    "finance": {
        "error": {
            "code": "Unauthorized",
            "description": "Invalid cookie"
        }
    }
}


Подскажите, что ещё нужно вставить в мой url - какую cookie (вставить как параметр или set_cookie )и откуда её взять?
  • Вопрос задан
  • 1470 просмотров
Подписаться 2 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 2
proudmore
@proudmore
Файл надо качать не через file_get_content, забудьте про него.
CSV может оказаться слишком большим, и не поместиться в выделенный объем оперативной памяти.
Качайте через curl. Cookie у него установить можно. Вам нужно будет вычислить, какая именно кука ведет к авторизации, и добавить ее к curl запросу.
Ответ написан
Комментировать
logpol32
@logpol32 Автор вопроса
Если кому то ещё интересно - то забил на эту таблицу. Как я понял - там данные за день, а у них есть данные в режиме реального времени. Легче парсить и получать данные каждые 10-30 минут.
Не знаю только как к таким запросам отнесётся yahoo.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы