Alternativa a la API de Google Finance [cerrado]


430

Quería usar la API de Google Finance para obtener datos sobre acciones de la empresa, pero esta API está en desuso desde el 26/26/2011.

¿Qué utiliza como API gratuita para obtener datos de stock en tiempo real?


1
Hay otra API de Google que puedes usar. He documentado aquí: jarloo.com/real-time-google-stock-api
Kelly

11
Como desarrollador de software, recomendaría Alpha Vantage . Ofrecen API JSON gratuitas para cotizaciones de acciones históricas y en tiempo real. Aquí están sus datos intradía en tiempo real para MSFT. Aquí está su documentación API completa. Necesita una clave API, que se puede obtener de forma gratuita en su sitio web .
Steve Carino

44
A partir de septiembre de 2017, consulte esta pregunta: stackoverflow.com/questions/46070126/…
augustomen

2
Alpha Vantage es genial. Acabo de escribir una publicación de blog al respecto the-data-wrangler.com/…
Ashley Davis

Respuestas:


427

Actualizando la respuesta un poco

1. Pruebe la API Alpha Vantage

Para principiantes, puede intentar obtener una salida JSON de una consulta como

https://www.alphavantage.co/query?function=TIME_SERIES_DAILY&symbol=MSFT&apikey=demo

NO intente Yahoo Finance API (está DEPRECADO o NO DISPONIBLE AHORA).

Para principiantes, puede generar un CSV con una simple llamada API:

http://finance.yahoo.com/d/quotes.csv?s=AAPL+GOOG+MSFT&f=sb2b3jk

(Esto generará y guardará un CSV para AAPL, GOOG y MSFT)

Tenga en cuenta que debe agregar el formato a la cadena de consulta ( f=..). Para obtener una descripción general de todos los formatos, consulte esta página .

Para más ejemplos, visite esta página .

Por XMLy JSONdatos basados, puede hacer lo siguiente:

No use YQL (Yahoo Query Language) **

Por ejemplo:

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 el servicio web

Por ejemplo, para obtener todas las cotizaciones de acciones en XML:

http://finance.yahoo.com/webservice/v1/symbols/allcurrencies/quote

Para obtener todas las cotizaciones de acciones JSON, solo agregue format=JSONal final de la URL:

http://finance.yahoo.com/webservice/v1/symbols/allcurrencies/quote?format=json

Alternativas:

1. API de divisas

  • Más de 165 tipos de cambio en tiempo real, incluidos algunos criptos. Documentos aquí .

2. API financieras 1Forge

  • Las tasas en tiempo real para aproximadamente 40 pares de divisas están disponibles aquí .

3. API de contenido financiero

4. Tipos de cambio abiertos

5. API de Oanda

6. API XE

7. API de Xignite

8. API de moneda

9. Otras API - discutidas en programmableWeb



77
Vale la pena señalar lo que Yahoo! decir acerca de retirar los precios de las acciones: "Parece que algunos han realizado ingeniería inversa de una API que utilizan para extraer datos de Finanzas, pero están incumpliendo nuestros Términos de Servicio (no hay redistribución de datos de Finanzas) ... La redistribución solo está permitida si está utilizando las insignias que el equipo ha creado: finance.yahoo.com/badges . De lo contrario, puede usar YQL o cualquier método para obtener datos PARA USO PERSONAL " developer.yahoo.com/forum/General-Discussion-at-YDN/…
poshaughnessy

3
en lugar de guardar en csv ... ¿puedes tomar datos como JSON?
BouncingHippo

3
Vale la pena señalar que los puntos finales de Yahoo no son en tiempo real, tienen 15 minutos de retraso (vea el campo LastTradeWithTime en YQL, por ejemplo)
artur

37
La respuesta debe actualizarse ya que la API de Yahoo Finance está muerta ahora.
Vivek Vijayan

47

Llego muy tarde, pero echa un vistazo a Quandl . Tienen una API para precios de acciones y fundamentos .

Aquí hay una llamada de ejemplo, usando Quandl-api download en csv

ejemplo:

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

Soportan estos idiomas . Sus datos de origen provienen de Yahoo Finance, Google Finance, NSE, BSE, FSE, HKEX, LSE, SSE, TSE y más ( ver aquí ).


¿Tiene algunos indicadores técnicos con esta API (como rsi)?
Kiva

No tengo idea. En realidad no estoy afiliado a Quandl, solo sé que es un lugar para obtener datos.
user2023861

Esto parece una buena opción, pero ¿puede obtener datos de acciones en vivo aquí? Parece que el período de tiempo más corto son los datos diarios?
Trevor

8
Los datos de acciones en vivo no están disponibles a través de Quandl. Lo he probado.
Brian Goodwin

2
Quandl también tiene muchas existencias faltantes en su conjunto de datos WIKI.
Jeremy Holovacs

16

Sugeriría usar la API de desarrollador de TradeKing . Es muy bueno y de uso gratuito. Todo lo que se requiere es que tenga una cuenta con ellos y que yo sepa, no tiene que llevar un saldo ... solo para estar registrado.


2
Y crear esa cuenta es tan "divertido" que cancelé después de 10 minutos ...
inselberg

2
Si puedo preguntar, ¿qué fue tan "gracioso" al respecto? ¿Se refiere al hecho de que solicitan información personal confidencial? Cualquier corredor de bolsa en línea solicitará la misma información ... No es nada inusual.
entrenar

11
PECADO, fecha de nacimiento, estado civil, dependientes, ...? ¿seriamente? Solo quiero llamar a la API para probar
Daniel B

Otros apis que estoy encontrando son quotemedia y ally.
Deepan Prabhu Babu

7

Seguí la respuesta principal y comencé a buscar en Yahoo Finance. Se puede acceder a su API de varias maneras diferentes, pero encontré una buena referencia para obtener información sobre acciones como CSV aquí: http://www.jarloo.com/

Usando eso escribí este script. No soy realmente un chico rubí, pero esto podría ayudarte a hackear algo juntos. Todavía no he encontrado nombres de variables para todos los campos que yahoo ofrece, por lo que puede completarlos si los necesita.

Aquí está el uso

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 devuelve un hash, de modo que SpecificData ["GOOG"] ["name"] es "Google Inc."

Finalmente, el código real para ejecutar eso ...

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

1
Esto es realmente útil, desearía poder darle más votos. Pregunta rápida: ¿ha encontrado que esta API es confiable y las citas son realmente en tiempo real? Sé que parte de la información de Yahoo se retrasó, y parece depender de la API particular a la que accedes.
Hundley

Hice esto para ayudar a un amigo y creo que terminó funcionando bien para él. La información es bastante rápida, creo que la actualizaron cada 10/15 minutos si recuerdo correctamente.
Jack Franzen

1
La versión y tutorial de C # está aquí: jarloo.com/yahoo_finance
Kelly

Sí, ese tipo aparentemente sabe cómo obtener información sobre acciones jaja. Tiene otros tutoriales de los últimos 2 meses que afirman que aún puede obtener datos de acciones en tiempo real de Google
Jack Franzen

6

Si todavía está buscando utilizar Google Finance para sus datos, puede consultar esto.

Recientemente necesité probar si los datos de SGX se pueden recuperar a través de google finance (y, por supuesto, me encontré con el mismo problema que tú)


He visto 'JSON Quote API' antes. Esa herramienta parece muy prometedora. También recomendaría esto: investexcel.net/google-finance-stock-quotes-in-excel
ASH
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.