Alternative to google finance api [closed]

2019-01-01 14:06发布

问题:

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. 1Forge Financial APIs

  • Real-time rates for about 40 currency pairs are available here.

2. Financial Content API

  • The documentation for this API is very good.

3. Open Exchange Rates

4. Oanda API

5. XE API

6. Xignite API

7. currencylayer API

8. Other API 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:

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)



回答5:

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