Alternatywa dla Google Finance API [zamknięte]

430

Chciałem użyć interfejsu API Google Finance, aby uzyskać dane giełdowe o firmie, ale ten interfejs API jest przestarzały od 26 maja 2011 r.

Czego używasz jako darmowego API do pobierania danych giełdowych w czasie rzeczywistym?

Kiva
źródło
1
Istnieje inny interfejs Google API, którego możesz użyć. Udokumentowałem tutaj: jarloo.com/real-time-google-stock-api
Kelly,
11
Jako programista polecam Alpha Vantage . Oferują bezpłatne interfejsy API JSON do notowań akcji w czasie rzeczywistym i historycznych. Oto ich dane śróddzienne w czasie rzeczywistym dla MSFT. Oto pełna dokumentacja API. Potrzebujesz klucza API, który można uzyskać bezpłatnie na ich stronie internetowej .
Steve Carino
4
Od września 2017 r. Proszę odnieść się do tego pytania: stackoverflow.com/questions/46070126/…
sierpień
2
Alpha Vantage jest świetny. Właśnie napisałem o tym blog na the-data-wrangler.com/...
Ashley Davis,
Możesz również wypróbować ten interfejs API: free.currencyconverterapi.com/api/v5/…
Toe Pyae Sone Oo

Odpowiedzi:

427

Trochę aktualizuję odpowiedź

1. Wypróbuj Alpha Vantage API

Dla początkujących możesz spróbować uzyskać wynik JSON z zapytania, takiego jak

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

NIE WYKORZYSTAJ Yahoo Finance API (JEST ODPOWIEDNIO lub NIEDOSTĘPNY TERAZ).

Dla początkujących możesz wygenerować CSV za pomocą prostego wywołania API:

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

(Spowoduje to wygenerowanie i zapisanie pliku CSV dla AAPL, GOOG i MSFT)

Pamiętaj, że musisz dołączyć format do ciągu zapytania ( f=..). Przegląd wszystkich formatów znajduje się na tej stronie .

Aby uzyskać więcej przykładów, odwiedź tę stronę .

Dla XMLi JSONdanych opartych o, można wykonać następujące czynności:

Nie używaj YQL (Yahoo Query Language) **

Na przykład:

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. Użyj usługi internetowej

Na przykład, aby uzyskać wszystkie notowania giełdowe w XML:

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

Aby uzyskać wszystkie notowania giełdowe JSON, wystarczy dodać format=JSONna końcu adresu URL:

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

Alternatywy:

1. Waluta API

  • Ponad 165 kursów walut w czasie rzeczywistym, w tym kilka kryptowalut. Dokumenty tutaj .

2. 1Forge API finansowe

  • Tutaj dostępne są stawki w czasie rzeczywistym dla około 40 par walutowych .

3. Interfejs API treści finansowych

4. Otwórz kursy walut

5. Oanda API

6. XE API

7. Xignite API

8. currencylayer API

9. Inne interfejsy API - omówione na programmableWeb

Aura
źródło
2
oto, o co teraz prosiłeś
AurA
7
Warto zauważyć, co Yahoo! powiedz o wycofywaniu cen akcji: „Wygląda na to, że niektórzy przebudowali interfejs API, którego używają do pobierania danych finansowych, ale łamią nasze Warunki świadczenia usług (brak redystrybucji danych finansowych) ... Redystrybucja jest dozwolona tylko wtedy, gdy używasz odznaki, które zespół stworzył: finanse.yahoo.com/badges . W przeciwnym razie możesz użyć YQL lub dowolnej innej metody pozyskiwania danych DO UŻYTKU OSOBISTEGO " developer.yahoo.com/forum/General-Discussion-at-YDN/...
poshaughnessy
3
zamiast zapisywać w csv ... czy możesz pobrać dane jako JSON?
odbijając
3
Warto zauważyć, że punkty końcowe Yahoo nie są w czasie rzeczywistym, są opóźnione o 15 minut (patrz na przykład pole LastTradeWithTime w YQL)
artur
37
Odpowiedź wymaga aktualizacji, ponieważ interfejs API Yahoo Finance jest już martwy.
Vivek Vijayan
47

Spóźniłem się, ale sprawdź Quandl . Posiadają API dla cen akcji i podstawowych danych .

Oto przykładowe wywołanie przy użyciu pobierania Quandl-api w csv

przykład:

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

Obsługują te języki . Ich dane źródłowe pochodzą z Yahoo Finance, Google Finance, NSE, BSE, FSE, HKEX, LSE, SSE, TSE i innych ( patrz tutaj ).

user2023861
źródło
Czy masz jakieś techniczne wskaźniki z tym API (jak rsi)?
Kiva
Nie mam pojęcia. Właściwie nie jestem związany z Quandl, po prostu wiem, że jest to miejsce, w którym można uzyskać dane.
user2023861
To wygląda na dobrą opcję, ale czy możesz tutaj uzyskać dane o zapasach na żywo? Wydaje się, że najkrótszy przedział czasowy to dane dzienne?
Trevor
8
Aktualne dane giełdowe nie są dostępne za pośrednictwem Quandl - próbowałem.
Brian Goodwin,
2
Quandl ma również wiele zapasów w zestawie danych WIKI.
Jeremy Holovacs,
16

Sugeruję użycie API dla programistów TradeKing . Jest bardzo dobry i darmowy. Wszystko, co jest wymagane, to posiadanie konta i zgodnie z moją wiedzą nie musisz nosić salda ... tylko po to, aby się zarejestrować.

ra9r
źródło
2
I tworzenie tego konta jest tak „śmieszne”, że anulowane po 10 minutach ...
ostaniec
2
Jeśli mogę zapytać, co było w tym takiego „zabawnego”? Czy masz na myśli fakt, że proszą o podanie poufnych danych osobowych? Każdy internetowy makler poprosi o te same informacje ... To nic niezwykłego.
pociąg
11
SIN, data urodzenia, stan cywilny, pozostający na utrzymaniu, ...? poważnie? Chcę tylko zadzwonić do API w celu przetestowania
Daniel B
Inne api, które znajduję, to quotemedia i sojusznik.
Deepan Prabhu Babu
7

Podążyłem za najlepszą odpowiedzią i zacząłem patrzeć na finanse Yahoo. Dostęp do ich interfejsu API można uzyskać na wiele różnych sposobów, ale znalazłem dobry odnośnik do uzyskania informacji o akcjach jako CSV tutaj: http://www.jarloo.com/

Korzystając z tego napisałem ten skrypt. Nie jestem naprawdę rubinowym facetem, ale to może pomóc ci zhakować coś razem. Nie wymyśliłem jeszcze nazw zmiennych dla wszystkich pól, które oferuje Yahoo, więc możesz je wypełnić, jeśli ich potrzebujesz.

Oto użycie

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 zwraca skrót, taki, że SpecificData [„GOOG”] [„nazwa”] to „Google Inc.”

Wreszcie rzeczywisty kod do uruchomienia, który ...

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
Jack Franzen
źródło
1
to jest naprawdę przydatne, chciałbym móc dać wam więcej głosów. Szybkie pytanie - czy uważasz, że ten interfejs API jest niezawodny i czy cytaty są naprawdę aktualne? Wiem, że niektóre informacje Yahoo są opóźnione i wydaje się, że zależy to od konkretnego interfejsu API, do którego masz dostęp.
Hundley,
Zrobiłem to, aby pomóc przyjacielowi i myślę, że skończyło się to dla niego dobrze. Informacje są dość szybkie, myślę, że aktualizują je co 10/15 minut, jeśli dobrze pamiętam.
Jack Franzen
1
Wersja C # i samouczek są tutaj: jarloo.com/yahoo_finance
Kelly
tak, ten facet najwyraźniej wie, jak zdobyć informacje giełdowe, haha. Ma inne samouczki z ostatnich 2 miesięcy, które twierdzą, że nadal możesz uzyskać dane giełdowe w czasie rzeczywistym z Google
Jack Franzen
6

Jeśli nadal chcesz używać Google Finance do swoich danych, możesz to sprawdzić.

Niedawno musiałem sprawdzić, czy dane SGX można rzeczywiście odzyskać za pośrednictwem Google Finance (i oczywiście napotkałem ten sam problem, co Ty)

Kevin
źródło
Wcześniej widziałem „JSON Quote API”. To narzędzie wydaje się bardzo obiecujące. Poleciłbym
ASH