雅虎今天突然终止了它的金融下载 API 吗?
Posted
技术标签:
【中文标题】雅虎今天突然终止了它的金融下载 API 吗?【英文标题】:Has Yahoo suddenly today terminated its finance download API? 【发布时间】:2017-11-01 22:39:26 【问题描述】:几个月以来,我一直在使用这样的网址,来自 perl:
http://finance.yahoo.com/d/quotes.csv?s=$s&f=ynl1 #returns yield, name, price;
今天 11/1/17,突然返回 999 错误。
这是一个小故障,还是雅虎终止了服务?
即使我将 URL 直接输入到浏览器中也会出现错误,例如:
http://finance.yahoo.com/d/quotes.csv?s=INTC&f=ynl1
所以这似乎不是“碎屑”问题。
注意:这不是过去已回答的问题! 它昨天还在工作。它发生在月初是可疑的。
【问题讨论】:
我投票结束这个问题,因为这不是雅虎网站的状态。我们不支持任何第三方场外位置或供应商。直接联系该站点以询问其状态。这个网站是为编程相关的问题。 我也面临同样的问题,昨天一切都很好。有人有有效的 API 代码吗? 很多人都遇到这个问题,但恭喜 - 您的网站仍然纯净。 他们将某些表的公共类型更改为私有,但是(服务器端,没有雅虎登录,只有应用程序密钥和应用程序秘密)auth api 不存在 他们似乎知道这个问题,并打算解决它。 forums.yahoo.net/t5/Known-issues-and-updates/… 【参考方案1】:Yahoo confirmed 他们终止了服务:
我们注意到该服务的使用违反了雅虎服务条款。因此,该服务将被终止。有关所有未来市场和股票数据研究,请参阅 Finance.yahoo.com。
【讨论】:
我没有收到雅虎的回复。 这更像是雅虎不关心。 @AlenSiljak 哦,他们很在意;为了钱,这可能就是这件事的真正意义所在,他们最终会再次提供它,但人们/企业/编码人员将不得不为此付费。 我上述评论的附录:雅虎被威瑞森收购。我敢肯定这与此有关,并且它来自上方;一个很少有人看到或闻到风声的地方。 @MarkAmery 差不多。【参考方案2】:如其他答案和其他地方(例如https://***.com/questions/47076404/currency-helper-of-yahoo-sorry-unable-to-process-request-at-this-time-erro/47096766#47096766)所述,雅虎确实停止了雅虎财经 API 的运营。但是,作为一种解决方法,您可以通过向https://finance.yahoo.com/quote/SYMBOL(例如https://finance.yahoo.com/quote/MSFT)发出 HTTPS GET 请求来访问给定股票代码的 JSON 格式的大量财务信息。如果您对上述 URL 执行 GET 请求,您将看到财务数据包含在 JSON 格式的响应中。以下 python3 脚本显示了如何解析您可能感兴趣的单个值:
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 = str(resp.content, '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)
【讨论】:
这个 Python 实现是否有任何 javascript 等价物?谢谢。 到目前为止,当我将https://finance.yahoo.com/quote/MSFT
放入浏览器的地址栏中时,返回的不是 JSON,而是一个格式精美的 HTML 页面。
@mbmast - 根据浏览器发送的标头,服务器可能对来自浏览器的请求做出不同的响应。我刚才使用上面的python脚本再次测试,它产生了预期的结果。我还更新了 python3 的脚本。
@mti2935 对。我忘记了用户代理之类的东西。
@mbmast - 实际上,如果您将浏览器指向 URL(例如 finance.yahoo.com/quote/MSFT),然后查看页面的源代码,您会看到 JSON 就在其中。【参考方案3】:
仍然有一种方法可以通过查询 Finance.yahoo.com 页面使用的一些 API 来获取这些数据。不确定雅虎是否会像以前的 API 那样长期支持它(希望他们会)。
我将https://github.com/pstadler/ticker.sh 使用的方法改编为以下python hack,它从命令行获取符号列表并将一些变量输出为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
【讨论】:
【参考方案4】:var API = "https://query1.finance.yahoo.com/v7/finance/quote?symbols=AAPL";
$.getJSON(API, function (json) ...);
call 抛出此错误:请求的资源上不存在“Access-Control-Allow-Origin”标头。 Origin 'http://www.microplan.at/sar' 因此不允许访问。
【讨论】:
这在浏览器上似乎可以正常工作,并返回 json。 他们也可能会停止这项服务【参考方案5】:我使用 Yahoo Finance 的 Python 程序最近停止了正常工作,但它没有返回该错误,它只是将股票价格替换为 0。我最初在调试时看到了这一点,然后,当我访问这些股票的 yahoo Finance URLS 时,我确认了错误。由于实际数据混乱,我认为建议的解决方法无法解决我的问题。这可能与雅虎停止使用他们的 API 有关吗?我不明白这能解释什么。
例子:
https://finance.yahoo.com/quote/PSCT/history https://finance.yahoo.com/quote/VPU/history【讨论】:
以上是关于雅虎今天突然终止了它的金融下载 API 吗?的主要内容,如果未能解决你的问题,请参考以下文章