问题
I wanted to use Google Finance API to get stock data about the company but this API is deprecated since 2011/26/05.
What do you use as free API to get stock data in real time?
回答1:
Updating answer a bit
1. Try Alpha Vantage API
For beginners you can try to get a JSON output from query such as
https://www.alphavantage.co/query?function=TIME_SERIES_DAILY&symbol=MSFT&apikey=demo
DONT Try Yahoo Finance API (it is DEPRICATED or UNAVAILABLE NOW).
- Here is a link to previous Yahoo Finance API discussion on StackOverflow.
- Here's an alternate link to Yahoo Finance API posted on Google Code.
For beginners, you can generate a CSV with a simple API call:
http://finance.yahoo.com/d/quotes.csv?s=AAPL+GOOG+MSFT&f=sb2b3jk
(This will generate and save a CSV for AAPL, GOOG and MSFT)
Note that you must append the format to the query string (f=..
). For an overview of all of the formats see this page.
For more examples, visit this page.
For XML
and JSON
-based data, you can do the following:
Don't use YQL (Yahoo Query Language)**
For example:
http://developer.yahoo.com/yql/console/?q=select%20*%20from%20yahoo.finance
.quotes%20where%20symbol%20in%20(%22YHOO%22%2C%22AAPL%22%2C%22GOOG%22%2C%22
MSFT%22)%0A%09%09&env=http%3A%2F%2Fdatatables.org%2Falltables.env
2. Use the webservice
For example, to get all stock quotes in XML
:
http://finance.yahoo.com/webservice/v1/symbols/allcurrencies/quote
To get all stock quotes in JSON
, just add format=JSON
to the end of the URL:
http://finance.yahoo.com/webservice/v1/symbols/allcurrencies/quote?format=json
Alternatives:
1. Currency API
- 165+ real time currency rates, including few cryptos. Docs here.
2. 1Forge Financial APIs
- Real-time rates for about 40 currency pairs are available here.
3. Financial Content API
- The documentation for this API is very good.
4. Open Exchange Rates
5. Oanda API
6. XE API
7. Xignite API
8. currencylayer API
9. Other APIs - discussed at programmableWeb
回答2:
I'm way late, but check out Quandl. They have an API for stock prices and fundamentals.
Here's an example call, using Quandl-api download in csv
example:
https://www.quandl.com/api/v1/datasets/WIKI/AAPL.csv?column=4&sort_order=asc&collapse=quarterly&trim_start=2012-01-01&trim_end=2013-12-31
They support these languages. Their source data comes from Yahoo Finance, Google Finance, NSE, BSE, FSE, HKEX, LSE, SSE, TSE and more (see here).
回答3:
I'd suggest using TradeKing's developer API. It is very good and free to use. All that is required is that you have an account with them and to my knowledge you don't have to carry a balance ... only to be registered.
回答4:
I followed the top answer and started looking at yahoo finance. Their API can be accessed a number of different ways, but I found a nice reference for getting stock info as a CSV here: http://www.jarloo.com/
Using that I wrote this script. I'm not really a ruby guy but this might help you hack something together. I haven't come up with variable names for all the fields yahoo offers yet, so you can fill those in if you need them.
Here's the usage
TICKERS_SP500 = "GICS,CIK,MMM,ABT,ABBV,ACN,ACE,ACT,ADBE,ADT,AES,AET,AFL,AMG,A,GAS,APD,ARG,AKAM,AA,ALXN,ATI,ALLE,ADS,ALL,ALTR,MO,AMZN,AEE,AAL,AEP,AXP,AIG,AMT,AMP,ABC,AME,AMGN,APH,APC,ADI,AON,APA,AIV,AAPL,AMAT,ADM,AIZ,T,ADSK,ADP,AN,AZO,AVGO,AVB,AVY,BHI,BLL,BAC,BK,BCR,BAX,BBT,BDX,BBBY,BBY,BIIB,BLK,HRB,BA,BWA,BXP,BSX,BMY,BRCM,BFB,CHRW,CA,CVC,COG,CAM,CPB,COF,CAH,HSIC,KMX,CCL,CAT,CBG,CBS,CELG,CNP,CTL,CERN,CF,SCHW,CHK,CVX,CMG,CB,CI,XEC,CINF,CTAS,CSCO,C,CTXS,CLX,CME,CMS,COH,KO,CCE,CTSH,CL,CMA,CSC,CAG,COP,CNX,ED,STZ,GLW,COST,CCI,CSX,CMI,CVS,DHI,DHR,DRI,DVA,DE,DLPH,DAL,XRAY,DVN,DO,DTV,DFS,DG,DLTR,D,DOV,DOW,DPS,DTE,DD,DUK,DNB,ETFC,EMN,ETN,EBAY,ECL,EIX,EW,EA,EMC,EMR,ENDP,ESV,ETR,EOG,EQT,EFX,EQIX,EQR,ESS,EL,ES,EXC,EXPE,EXPD,ESRX,XOM,FFIV,FB,FDO,FAST,FDX,FIS,FITB,FSLR,FE,FISV,FLIR,FLS,FLR,FMC,FTI,F,FOSL,BEN,FCX,FTR,GME,GCI,GPS,GRMN,GD,GE,GGP,GIS,GM,GPC,GNW,GILD,GS,GT,GOOG,GWW,HAL,HBI,HOG,HAR,HRS,HIG,HAS,HCA,HCP,HCN,HP,HES,HPQ,HD,HON,HRL,HSP,HST,HCBK,HUM,HBAN,ITW,IR,TEG,INTC,ICE,IBM,IP,IPG,IFF,INTU,ISRG,IVZ,IRM,JEC,JNJ,JCI,JOY,JPM,JNPR,KSU,K,KEY,GMCR,KMB,KIM,KMI,KLAC,KSS,KRFT,KR,LB,LLL,LH,LRCX,LM,LEG,LEN,LVLT,LUK,LLY,LNC,LLTC,LMT,L,LO,LOW,LYB,MTB,MAC,M,MNK,MRO,MPC,MAR,MMC,MLM,MAS,MA,MAT,MKC,MCD,MHFI,MCK,MJN,MWV,MDT,MRK,MET,KORS,MCHP,MU,MSFT,MHK,TAP,MDLZ,MON,MNST,MCO,MS,MOS,MSI,MUR,MYL,NDAQ,NOV,NAVI,NTAP,NFLX,NWL,NFX,NEM,NWSA,NEE,NLSN,NKE,NI,NE,NBL,JWN,NSC,NTRS,NOC,NRG,NUE,NVDA,ORLY,OXY,OMC,OKE,ORCL,OI,PCAR,PLL,PH,PDCO,PAYX,PNR,PBCT,POM,PEP,PKI,PRGO,PFE,PCG,PM,PSX,PNW,PXD,PBI,PCL,PNC,RL,PPG,PPL,PX,PCP,PCLN,PFG,PG,PGR,PLD,PRU,PEG,PSA,PHM,PVH,QEP,PWR,QCOM,DGX,RRC,RTN,RHT,REGN,RF,RSG,RAI,RHI,ROK,COL,ROP,ROST,RCL,R,CRM,SNDK,SCG,SLB,SNI,STX,SEE,SRE,SHW,SIAL,SPG,SWKS,SLG,SJM,SNA,SO,LUV,SWN,SE,STJ,SWK,SPLS,SBUX,HOT,STT,SRCL,SYK,STI,SYMC,SYY,TROW,TGT,TEL,TE,THC,TDC,TSO,TXN,TXT,HSY,TRV,TMO,TIF,TWX,TWC,TJX,TMK,TSS,TSCO,RIG,TRIP,FOXA,TSN,TYC,USB,UA,UNP,UNH,UPS,URI,UTX,UHS,UNM,URBN,VFC,VLO,VAR,VTR,VRSN,VZ,VRTX,VIAB,V,VNO,VMC,WMT,WBA,DIS,WM,WAT,ANTM,WFC,WDC,WU,WY,WHR,WFM,WMB,WIN,WEC,WYN,WYNN,XEL,XRX,XLNX,XL,XYL,YHOO,YUM,ZMH,ZION,ZTS,SAIC,AP"
AllData = loadStockInfo(TICKERS_SP500, allParameters())
SpecificData = loadStockInfo("GOOG,CIK", "ask,dps")
loadStockInfo returns a hash, such that SpecificData["GOOG"]["name"] is "Google Inc."
Finally, the actual code to run that...
require 'net/http'
# Jack Franzen & Garin Bedian
# Based on http://www.jarloo.com/yahoo_finance/
$parametersData = Hash[[
["symbol", ["s", "Symbol"]],
["ask", ["a", "Ask"]],
["divYield", ["y", "Dividend Yield"]],
["bid", ["b", "Bid"]],
["dps", ["d", "Dividend per Share"]],
#["noname", ["b2", "Ask (Realtime)"]],
#["noname", ["r1", "Dividend Pay Date"]],
#["noname", ["b3", "Bid (Realtime)"]],
#["noname", ["q", "Ex-Dividend Date"]],
#["noname", ["p", "Previous Close"]],
#["noname", ["o", "Open"]],
#["noname", ["c1", "Change"]],
#["noname", ["d1", "Last Trade Date"]],
#["noname", ["c", "Change & Percent Change"]],
#["noname", ["d2", "Trade Date"]],
#["noname", ["c6", "Change (Realtime)"]],
#["noname", ["t1", "Last Trade Time"]],
#["noname", ["k2", "Change Percent (Realtime)"]],
#["noname", ["p2", "Change in Percent"]],
#["noname", ["c8", "After Hours Change (Realtime)"]],
#["noname", ["m5", "Change From 200 Day Moving Average"]],
#["noname", ["c3", "Commission"]],
#["noname", ["m6", "Percent Change From 200 Day Moving Average"]],
#["noname", ["g", "Day’s Low"]],
#["noname", ["m7", "Change From 50 Day Moving Average"]],
#["noname", ["h", "Day’s High"]],
#["noname", ["m8", "Percent Change From 50 Day Moving Average"]],
#["noname", ["k1", "Last Trade (Realtime) With Time"]],
#["noname", ["m3", "50 Day Moving Average"]],
#["noname", ["l", "Last Trade (With Time)"]],
#["noname", ["m4", "200 Day Moving Average"]],
#["noname", ["l1", "Last Trade (Price Only)"]],
#["noname", ["t8", "1 yr Target Price"]],
#["noname", ["w1", "Day’s Value Change"]],
#["noname", ["g1", "Holdings Gain Percent"]],
#["noname", ["w4", "Day’s Value Change (Realtime)"]],
#["noname", ["g3", "Annualized Gain"]],
#["noname", ["p1", "Price Paid"]],
#["noname", ["g4", "Holdings Gain"]],
#["noname", ["m", "Day’s Range"]],
#["noname", ["g5", "Holdings Gain Percent (Realtime)"]],
#["noname", ["m2", "Day’s Range (Realtime)"]],
#["noname", ["g6", "Holdings Gain (Realtime)"]],
#["noname", ["k", "52 Week High"]],
#["noname", ["v", "More Info"]],
#["noname", ["j", "52 week Low"]],
#["noname", ["j1", "Market Capitalization"]],
#["noname", ["j5", "Change From 52 Week Low"]],
#["noname", ["j3", "Market Cap (Realtime)"]],
#["noname", ["k4", "Change From 52 week High"]],
#["noname", ["f6", "Float Shares"]],
#["noname", ["j6", "Percent Change From 52 week Low"]],
["name", ["n", "Company Name"]],
#["noname", ["k5", "Percent Change From 52 week High"]],
#["noname", ["n4", "Notes"]],
#["noname", ["w", "52 week Range"]],
#["noname", ["s1", "Shares Owned"]],
#["noname", ["x", "Stock Exchange"]],
#["noname", ["j2", "Shares Outstanding"]],
#["noname", ["v", "Volume"]],
#["noname", ["a5", "Ask Size"]],
#["noname", ["b6", "Bid Size"]],
#["noname", ["k3", "Last Trade Size"]],
#["noname", ["t7", "Ticker Trend"]],
#["noname", ["a2", "Average Daily Volume"]],
#["noname", ["t6", "Trade Links"]],
#["noname", ["i5", "Order Book (Realtime)"]],
#["noname", ["l2", "High Limit"]],
#["noname", ["e", "Earnings per Share"]],
#["noname", ["l3", "Low Limit"]],
#["noname", ["e7", "EPS Estimate Current Year"]],
#["noname", ["v1", "Holdings Value"]],
#["noname", ["e8", "EPS Estimate Next Year"]],
#["noname", ["v7", "Holdings Value (Realtime)"]],
#["noname", ["e9", "EPS Estimate Next Quarter"]],
#["noname", ["s6", "evenue"]],
#["noname", ["b4", "Book Value"]],
#["noname", ["j4", "EBITDA"]],
#["noname", ["p5", "Price / Sales"]],
#["noname", ["p6", "Price / Book"]],
#["noname", ["r", "P/E Ratio"]],
#["noname", ["r2", "P/E Ratio (Realtime)"]],
#["noname", ["r5", "PEG Ratio"]],
#["noname", ["r6", "Price / EPS Estimate Current Year"]],
#["noname", ["r7", "Price / EPS Estimate Next Year"]],
#["noname", ["s7", "Short Ratio"]
]]
def replaceCommas(data)
s = ""
inQuote = false
data.split("").each do |a|
if a=='"'
inQuote = !inQuote
s += '"'
elsif !inQuote && a == ","
s += "#"
else
s += a
end
end
return s
end
def allParameters()
s = ""
$parametersData.keys.each do |i|
s = s + i + ","
end
return s
end
def prepareParameters(parametersText)
pt = parametersText.split(",")
if !pt.include? 'symbol'; pt.push("symbol"); end;
if !pt.include? 'name'; pt.push("name"); end;
p = []
pt.each do |i|
p.push([i, $parametersData[i][0]])
end
return p
end
def prepareURL(tickers, parameters)
urlParameters = ""
parameters.each do |i|
urlParameters += i[1]
end
s = "http://download.finance.yahoo.com/d/quotes.csv?"
s = s + "s=" + tickers + "&"
s = s + "f=" + urlParameters
return URI(s)
end
def loadStockInfo(tickers, parametersRaw)
parameters = prepareParameters(parametersRaw)
url = prepareURL(tickers, parameters)
data = Net::HTTP.get(url)
data = replaceCommas(data)
h = CSVtoObject(data, parameters)
logStockObjects(h, true)
end
#parse csv
def printCodes(substring, length)
a = data.index(substring)
b = data.byteslice(a, 10)
puts "printing codes of string: "
puts b
puts b.split('').map(&:ord).to_s
end
def CSVtoObject(data, parameters)
rawData = []
lineBreaks = data.split(10.chr)
lineBreaks.each_index do |i|
rawData.push(lineBreaks[i].split("#"))
end
#puts "Found " + rawData.length.to_s + " Stocks"
#puts " w/ " + rawData[0].length.to_s + " Fields"
h = Hash.new("MainHash")
rawData.each_index do |i|
o = Hash.new("StockObject"+i.to_s)
#puts "parsing object" + rawData[i][0]
rawData[i].each_index do |n|
#puts "parsing parameter" + n.to_s + " " +parameters[n][0]
o[ parameters[n][0] ] = rawData[i][n].gsub!(/^\"|\"?$/, '')
end
h[o["symbol"]] = o;
end
return h
end
def logStockObjects(h, concise)
h.keys.each do |i|
if concise
puts "(" + h[i]["symbol"] + ")\t\t" + h[i]["name"]
else
puts ""
puts h[i]["name"]
h[i].keys.each do |p|
puts " " + $parametersData[p][1] + " : " + h[i][p].to_s
end
end
end
end
回答5:
If you are still looking to use Google Finance for your data you can check this out.
I recently needed to test if SGX data is indeed retrievable via google finance (and of course i met with the same problem as you)
来源:https://stackoverflow.com/questions/10040954/alternative-to-google-finance-api