很长一段时间以来,我一直在使用以下REST API来查询雅虎财务的当前价格。它记录在几个Stack Overflow帖子中,例如: Yahoo finance webservice以及yahoo-finance中的其他地方。
http://finance.yahoo.com/webservice/v1/symbols/$SYMBOLS/quote?format=json
其中$ SYMBOLS是逗号分隔的股票或索引符号列表。
昨天查询停止工作,只返回"暂时移动。重定向到..."信息。
此网络服务现已关闭吗?是否已被YQL或其他API取代?查询历史价格表到" ichart"还在工作。如,
http://ichart.finance.yahoo.com/table.csv?d=2&e=3&f=2016&g=d&a=0&b=1&c=2011&ignore=.csv&s=$SYMBOL
感谢。
答案 0 :(得分:27)
过去2-3天我遇到了类似的问题。网址在智能手机上运行,在桌面上它提供了#34;不是有效参数"错误和HTTP代码406.
这可以通过将用户代理添加为" Mozilla / 5.0(Linux; Android 6.0.1; MotoG3 Build / MPI24.107-55)AppleWebKit / 537.36(KHTML,如Gecko)Chrome / 51.0.2704.81来解决。移动Safari / 537.36"在调用get请求时。
例如,如果您从php中使用curl下载,请使用如下:
curl_setopt($session,CURLOPT_USERAGENT,"Mozilla/5.0 (Linux; Android 6.0.1; MotoG3 Build/MPI24.107-55) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.81 Mobile Safari/537.36");
我希望这能解决问题。
答案 1 :(得分:6)
由于服务已关闭,我使用以下URL查询Yahoo数据(对于ACA.PA):
JSON结果不同但我发现了我感兴趣的信息。
有关详细信息,请访问页面https://developer.yahoo.com/yql/
答案 2 :(得分:6)
我有同样的问题。这是从YAHOO提取股票的API URL。希望这会有所帮助。
https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.quotes%20where%20symbol%20in%20(%22YHOO%22)&format=json&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys&callback=
答案 3 :(得分:5)
是的,看起来好像是雅虎!已停止使用多年来一直依赖货币数据的(私人的,大多数未记录的)雅虎财务API。我们在过去24小时内收到了一些通知。 (编辑:所有回复似乎都在返回"Not a valid parameter"
。我想他们有可能会重新开启它,但就我所知,他们并没有正式支持该API。)
我大约五年前创建了Open Exchange Rates,我们的汇率API现在支持由数万名开发人员及其数千万用户组成的社区,并提供准确,最新的信息。 / p>
欢迎您在https://openexchangerates.org查看我们的Forever免费服务。
我们的API采用简单的原始JSON格式,实际上已经成为显示速率的标准方法,因为它使用起来非常简单(与Yahoo API不同,后者要求您解析模糊不清的嵌套对象你需要的基本信息...)
如果您需要协助移植已弃用的Yahoo! API,我们很乐意通过电子邮件提供帮助。
(我是开放汇率的创始人。)
答案 4 :(得分:4)
我是github上的ValueViz的作者。
每日价格
您需要熟悉RESTFUL服务。
https://quantprice.herokuapp.com/api/v1.1/scoop/day?tickers=MSFT&date=2017-06-09
历史价格
您必须提供日期范围:
https://quantprice.herokuapp.com/api/v1.1/scoop/period?tickers=MSFT&begin=2012-02-19&end=2012-02-20
如果您不提供开始或结束,则会使用最早或当前日期:
https://quantprice.herokuapp.com/api/v1.1/scoop/period?tickers=MSFT&begin=2012-02-19
多个代码
你可以用逗号分隔代码:
https://quantprice.herokuapp.com/api/v1.1/scoop/period?tickers=IBM,MSFT&begin=2012-02-19
费率限制
所有请求的速率限制为每小时10个请求。如果你想注册一个完整的访问API,请在twitter上发送给我DM。您将收到一个API密钥以添加到URL。
我们正在为付费订阅设置一个paypal帐户,不含费率。
可用的代码列表
https://github.com/robomotic/valueviz/blob/master/scoop_tickers.csv
我也在努力提供EDGAR的基础数据和公司数据。欢呼声。
答案 5 :(得分:3)
它重定向到同一页面,但添加参数" bypass = true",这会产生错误。
编辑: https://stackoverflow.com/users/6593038/hemant-prasad给出的答案对我有用。 将用户代理更改为移动设备时,API工作正常,并且到目前为止还没有重定向。
这是我在Java中使用的代码(它是XML版本的代码,但它也可用于JSON):
URL url = new URL ("https://finance.yahoo.com/webservice/v1/symbols/" + stocks + "/quote");
HttpURLConnection urlc = (HttpURLConnection) url.openConnection ();
urlc.setRequestProperty ("User-Agent", "Mozilla/5.0 (Linux; Android 6.0; MotoE2(4G-LTE) Build/MPI24.65-39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.81 Mobile Safari/537.36");
Document xml = DocumentBuilderFactory.newInstance ().newDocumentBuilder ().parse (urlc.getInputStream ());
答案 6 :(得分:3)
我找到了一种使用csv API的方法。
您需要编写符号,参数和列。
使用此网站查找所需参数:http://www.jarloo.com/yahoo_finance/
示例:
如果您需要知道符号的音量
将字符串sl1d1t1c1ohgv
替换为v
并将symbol%2Cprice%2Cdate%2Ctime%2Cchange%2Ccol1%2Chigh%2Clow%2Cvolume
列替换为volume
唯一的问题是数据有点随机,而不是像在webservice API中那样实时
答案 7 :(得分:3)
查看NuGet上提供的优秀API包装器:https://github.com/salmonthinlion/YahooFinanceApi
获取股票报价
var quotes = await Yahoo.Symbol("AAPL", "GOOG").Tag(Tag.LastTradePriceOnly, Tag,ChangeAndPercentChange, Tag.DaysLow, Tag.DaysHigh).GetAsync();
var aapl = quotes["AAPL"];
var price = aapl[Tag.LastTradePriceOnly];
获取股票的历史数据
// You should be able to query data from various markets including US, HK, TW
var history = await Yahoo.GetHistoricalAsync("AAPL", new DateTime(2016, 1, 1), new DateTime(2016, 7, 1), Period.Daily);
foreach (var candle in history)
{
Console.WriteLine($"DateTime: {candle.DateTime}, Open: {candle.Open}, High: {candle.High}, Low: {candle.Low}, Close: {candle.Close}, Volume: {candle.Volume}, AdjustedClose: {candle.AdjustedClose}");
}
获取股票的股息历史记录
// You should be able to query data from various markets including US, HK, TW
var dividendHistory = await Yahoo.GetHistoricalDividendsAsync("AAPL", new DateTime(2016, 1, 1), new DateTime(2016, 7, 1));
foreach (var candle in dividendHistory)
{
Console.WriteLine($"DateTime: {candle.DateTime}, Dividend: {candle.Dividend}");
}
答案 8 :(得分:-1)
Python Yahoo Finance API似乎也有问题。如果您使用它来查找,例如亚马逊股票价格,它只是一遍又一遍地显示相同的两个值。
from yahoo_finance import Share import time f = open('/tmp/amazon/amzn.csv', 'w') while True:
amzn=Share("AMZN")
s = amzn.get_price() + "," + amzn.get_trade_datetime() + '\n'
print (s)
f.write (s)
f.flush()
time.sleep(5)
del amzn