Alternativa a google finance api [chiuso]


430

Volevo utilizzare l'API di Google Finance per ottenere dati sulle scorte dell'azienda, ma questa API è obsoleta dal 26/06/2011.

Cosa usi come API gratuita per ottenere dati di borsa in tempo reale?


1
C'è un'altra API di Google che puoi usare. Ho documentato qui: jarloo.com/real-time-google-stock-api
Kelly

11
Come sviluppatore di software, consiglierei Alpha Vantage . Offrono API JSON gratuite per quotazioni di borsa storiche e in tempo reale. Ecco i loro dati intraday in tempo reale per MSFT. Ecco la loro documentazione API completa. È necessaria una chiave API, che può essere ottenuta gratuitamente sul loro sito Web .
Steve Carino,

4
A partire dal settembre 2017, si prega di fare riferimento a questa domanda: stackoverflow.com/questions/46070126/...
augustomen

2
Alpha Vantage è fantastico. Ho appena scritto un post sul blog the-data-wrangler.com/…
Ashley Davis,

Risposte:


427

Aggiornamento risposta un po '

1. Prova l' API Alpha Vantage

Per i principianti puoi provare a ottenere un output JSON da query come

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

NON provare l' API di Yahoo Finance (è ORA DEPRICATA o NON DISPONIBILE).

Per i principianti, puoi generare un CSV con una semplice chiamata API:

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

(Questo genererà e salverà un CSV per AAPL, GOOG e MSFT)

Si noti che è necessario aggiungere il formato alla stringa di query ( f=..). Per una panoramica di tutti i formati vedere questa pagina .

Per altri esempi, visita questa pagina .

Per i dati basati su XMLe JSON, è possibile effettuare le seguenti operazioni:

Non utilizzare YQL (Yahoo Query Language) **

Per esempio:

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. Utilizzare il servizio web

Ad esempio, per ottenere tutte le quotazioni di borsa in XML:

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

Per ottenere tutte le quotazioni di borsa JSON, basta aggiungere format=JSONalla fine dell'URL:

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

alternative:

1. API valuta

  • Più di 165 tassi di cambio in tempo reale, inclusi alcuni cryptos. Documenti qui .

2. API finanziarie 1Forge

  • I tassi in tempo reale per circa 40 coppie di valute sono disponibili qui .

3. API dei contenuti finanziari

4. Aprire i tassi di cambio

5. API di Oanda

6. API XE

7. API Xignite

8. API currencylayer

9. Altre API - discusse su programmableWeb



7
Vale la pena notare ciò che Yahoo! diciamo di tirare fuori i prezzi delle azioni: "Sembra che alcuni abbiano retroingegnerizzato un'API che usano per estrarre i dati finanziari, ma stanno infrangendo i nostri Termini di servizio (nessuna ridistribuzione dei dati finanziari) ... La ridistribuzione è consentita solo se si utilizza i badge creati dal team: finance.yahoo.com/badges . Altrimenti, è possibile utilizzare YQL o qualsiasi altro metodo per ottenere dati PER USO PERSONALE " developer.yahoo.com/forum/General-Discussion-at-YDN/…
poshaughnessy

3
invece di salvare su CSV ... puoi invece prendere i dati come JSON?
rimbalzare

3
Vale la pena notare che gli endpoint di Yahoo non sono in tempo reale, sono ritardati di 15 minuti (ad esempio, vedi campo LastTradeWithTime in YQL)
artur

37
La risposta deve essere aggiornata poiché l'API di Yahoo Finance non è più disponibile.
Vivek Vijayan,

47

Sono in ritardo, ma controlla Quandl . Hanno un'API per i prezzi delle azioni e i fondamentali .

Ecco una chiamata di esempio, usando il download di Quandl-api in CSV

esempio:

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

Supportano queste lingue . I loro dati di origine provengono da Yahoo Finance, Google Finance, NSE, BSE, FSE, HKEX, LSE, SSE, TSE e altro ( vedi qui ).


Hai alcuni indicatori tecnici con questa API (come rsi)?
Kiva,

Non ne ho idea. In realtà non sono affiliato con Quandl, so solo che è un posto per ottenere dati.
user2023861

Questa sembra una buona opzione, ma puoi ottenere dati di borsa dal vivo qui? Sembra che i tempi più brevi siano i dati giornalieri?
Trevor,

8
I dati sulle scorte in tempo reale non sono disponibili tramite Quandl: l'ho provato.
Brian Goodwin,

2
Quandl ha anche molte scorte mancanti nel suo set di dati WIKI.
Jeremy Holovacs

16

Suggerirei di usare l'API per sviluppatori di TradeKing . È molto buono e gratuito da usare. Tutto ciò che serve è che tu abbia un account con loro e per quanto ne sappia non devi portare un saldo ... solo per essere registrato.


2
E creare quell'account è così "divertente" che ho cancellato dopo 10 minuti ...
inselberg

2
Se posso chiedere, che cosa è stato così "divertente" al riguardo? Ti riferisci al fatto che chiedono alcune informazioni personali sensibili? Qualsiasi broker di borsa online chiederà le stesse informazioni ... Non è niente di insolito.
treno

11
SIN, data di nascita, stato civile, dipendenti, ...? sul serio? Voglio solo chiamare l'API per testare
Daniel B,

Altre API che sto trovando sono quotemedia e alleati.
Deepan Prabhu Babu,

7

Ho seguito la risposta migliore e ho iniziato a guardare yahoo finanza. È possibile accedere alla loro API in diversi modi, ma ho trovato un buon riferimento per ottenere informazioni sulle scorte come CSV qui: http://www.jarloo.com/

Usando quello ho scritto questo script. Non sono davvero un ragazzo rubino, ma questo potrebbe aiutarti a hackerare qualcosa insieme. Non ho ancora trovato nomi variabili per tutti i campi offerti da Yahoo, quindi puoi riempirli se ne hai bisogno.

Ecco l'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 restituisce un hash, in modo tale che SpecificData ["GOOG"] ["name"] sia "Google Inc."

Infine, il codice effettivo per eseguirlo ...

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
questo è davvero utile, vorrei poterti dare più voti. Domanda veloce: hai trovato questa API affidabile e le virgolette sono davvero in tempo reale? Conosco alcune delle informazioni di Yahoo in ritardo e sembra dipendere dalla particolare API a cui accedi.
Hundley,

L'ho fatto per aiutare un amico e penso che abbia funzionato bene per lui. Le informazioni sono piuttosto veloci, penso che le abbiano aggiornate ogni 10/15 minuti se ricordo bene.
Jack Franzen,

1
La versione C # e il tutorial sono qui: jarloo.com/yahoo_finance
Kelly

sì, a quanto pare quel ragazzo sa come ottenere informazioni di magazzino haha. Ha altri tutorial degli ultimi 2 mesi che sostengono che puoi ancora ottenere dati di borsa in tempo reale da Google
Jack Franzen,

6

Se stai ancora cercando di utilizzare Google Finance per i tuoi dati, puoi verificarlo.

Di recente ho dovuto verificare se i dati SGX sono effettivamente recuperabili tramite google finance (e ovviamente ho riscontrato lo stesso problema con te)


Ho già visto "API di citazione JSON" in precedenza. Questo strumento sembra molto promettente. Vorrei anche raccomandare questo: investexcel.net/google-finance-stock-quotes-in-excel
ASH
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.