Неужели Yahoo внезапно прекратил свою финансовую загрузку API?
В течение нескольких месяцев я использую такой URL, от perl:
http://finance.yahoo.com/d/quotes.csv?s=$s&f=ynl1 #returns yield, name, price;
Сегодня, 11/1/17, он неожиданно возвращает ошибку 999.
Это сбой, или Yahoo прекратила обслуживание?
Я получаю ошибку, даже если я ввожу URL прямо в браузер, например:
http://finance.yahoo.com/d/quotes.csv?s=INTC&f=ynl1
поэтому он не кажется проблемой "крошки".
Примечание. Это не вопрос, на который был дан ответ в прошлом!
Он работал вчера. То, что случилось в первый месяц, было подозрительным.
Ответы
Ответ 1
Yahoo подтвердил, что они прекратили обслуживание:
Мы обратили наше внимание на то, что эта услуга используется в нарушение Условий использования Yahoo. Таким образом, услуга прекращается. Для всех будущих рынков и исследований данных о ценных бумагах, пожалуйста, обратитесь к finance.yahoo.com.
Ответ 2
Как указано в других ответах и в других местах (например, хелпер валюты yahoo - Извините, не удалось обработать запрос в это время - ошибка 999), Yahoo действительно прекратил работу Yahoo Finance API. Однако в качестве обходного пути вы можете получить доступ к информации о финансовой информации в формате JSON для данного символа тикера, выполнив запрос HTTPS GET для: https://finance.yahoo.com/quote/SYMBOL (например, https://finance.yahoo.com/quote/MSFT). Если вы выполните запрос GET на указанный выше URL-адрес, вы увидите, что финансовые данные содержатся в ответе в формате JSON. Следующий python script показывает, как вы можете анализировать отдельные значения, которые могут вас заинтересовать:
import requests
import json
symbol='MSFT'
url='https://finance.yahoo.com/quote/' + symbol
resp = requests.get(url)
#parse the section from the html document containing the raw json data that we need
#you can write jsonstr to a file, then open the file in a web browser to browse the structure of the json data
r=resp.text.encode('utf-8')
i1=0
i1=r.find('root.App.main', i1)
i1=r.find('{', i1)
i2=r.find("\n", i1)
i2=r.rfind(';', i1, i2)
jsonstr=r[i1:i2]
#load the raw json data into a python data object
data = json.loads(jsonstr)
#pull the values that we are interested in
name=data['context']['dispatcher']['stores']['QuoteSummaryStore']['price']['shortName']
price=data['context']['dispatcher']['stores']['QuoteSummaryStore']['price']['regularMarketPrice']['raw']
change=data['context']['dispatcher']['stores']['QuoteSummaryStore']['price']['regularMarketChange']['raw']
shares_outstanding=data['context']['dispatcher']['stores']['QuoteSummaryStore']['defaultKeyStatistics']['sharesOutstanding']['raw']
market_cap=data['context']['dispatcher']['stores']['QuoteSummaryStore']['summaryDetail']['marketCap']['raw']
trailing_pe=data['context']['dispatcher']['stores']['QuoteSummaryStore']['summaryDetail']['trailingPE']['raw']
earnings_per_share=data['context']['dispatcher']['stores']['QuoteSummaryStore']['defaultKeyStatistics']['trailingEps']['raw']
forward_annual_dividend_rate=data['context']['dispatcher']['stores']['QuoteSummaryStore']['summaryDetail']['dividendRate']['raw']
forward_annual_dividend_yield=data['context']['dispatcher']['stores']['QuoteSummaryStore']['summaryDetail']['dividendYield']['raw']
#print the values
print 'Symbol:', symbol
print 'Name:', name
print 'Price:', price
print 'Change:', change
print 'Shares Outstanding:', shares_outstanding
print 'Market Cap:', market_cap
print 'Trailing PE:', trailing_pe
print 'Earnings Per Share:', earnings_per_share
print 'Forward Annual Dividend Rate:', forward_annual_dividend_rate
print 'Forward_annual_dividend_yield:', forward_annual_dividend_yield
Вывод script должен выглядеть примерно так:
Symbol: MSFT
Name: Microsoft Corporation
Price: 84.14
Change: 0.08999634
Shares Outstanding: 7714590208
Market Cap: 649105637376
Trailing PE: 31.04797
Earnings Per Share: 2.71
Forward Annual Dividend Rate: 1.68
Forward_annual_dividend_yield: 0.02
Ответ 3
var API = "https://query1.finance.yahoo.com/v7/finance/quote?symbols=AAPL";
$.getJSON(API, function (json) {...});
вызов вызывает эту ошибку: заголовок "Access-Control-Allow-Origin" отсутствует на запрошенном ресурсе. Происхождение http://www.microplan.at ', следовательно, не допускается.
Ответ 4
Есть еще способ получить эти данные, запросив некоторые API, используемые на странице finance.yahoo.com. Не уверен, что Yahoo будет поддерживать его в долгосрочной перспективе, как и предыдущий API (надеюсь, они будут).
Я адаптировал метод, используемый https://github.com/pstadler/ticker.sh в следующем взломе python, который принимает список символов из командной строки и выводит некоторые переменных как csv:
#!/usr/bin/env python
import sys
import time
import requests
if len(sys.argv) < 2:
print("missing parameters: <symbol> ...")
exit()
apiEndpoint = "https://query1.finance.yahoo.com/v7/finance/quote"
fields = [
'symbol',
'regularMarketVolume',
'regularMarketPrice',
'regularMarketDayHigh',
'regularMarketDayLow',
'regularMarketTime',
'regularMarketChangePercent']
fields = ','.join(fields)
symbols = sys.argv[1:]
symbols = ','.join(symbols)
payload = {
'lang': 'en-US',
'region': 'US',
'corsDomain': 'finance.yahoo.com',
'fields': fields,
'symbols': symbols}
r = requests.get(apiEndpoint, params=payload)
for i in r.json()['quoteResponse']['result']:
if 'regularMarketPrice' in i:
a = []
a.append(i['symbol'])
a.append(i['regularMarketPrice'])
a.append(time.strftime(
'%Y-%m-%d %H:%M:%S', time.localtime(i['regularMarketTime'])))
a.append(i['regularMarketChangePercent'])
a.append(i['regularMarketVolume'])
a.append("{0:.2f} - {1:.2f}".format(
i['regularMarketDayLow'], i['regularMarketDayHigh']))
print(",".join([str(e) for e in a]))
Пример прогона:
$ ./getquotePy.py AAPL GOOGL
AAPL,174.5342,2017-11-07 17:21:28,0.1630961,19905458,173.60 - 173.60
GOOGL,1048.6753,2017-11-07 17:21:22,0.5749836,840447,1043.00 - 1043.00
Ответ 5
Моя программа Python с использованием Yahoo Finance недавно прекратила работать должным образом, но она не вернула эту ошибку, она просто заменила цены акций на 0. Я изначально видел это, когда я отлаживался, а затем, когда я перешел на URL-адрес yahoo finance для этих акций, я подтвердил ошибку. Поскольку фактические данные перепутаны, я не думаю, что предлагаемые решения помогут исправить мои проблемы. Возможно, это связано с тем, что yahoo перестает использовать API? Я не могу понять, что может объяснить это.
Примеры: