雅虎今天突然终止了它的金融下载 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 吗?的主要内容,如果未能解决你的问题,请参考以下文章

雅虎金融 API 的查询限制是多少?

雅虎金融网络服务消失了吗? API 变了吗?暂时下线?

我正在努力寻找一种将 IPO 股票从雅虎金融 API 中撤出的方法

雅虎财经 API 错误 400 在亚洲

雅虎财经 API [关闭]

雅虎正式成立 | 历史上的今天