Альтернатива google finance api [закрито]


430

Я хотів за допомогою API Google Finance отримати дані про акції про компанію, але цей API застарілий з 2011/26/05.

Що ви використовуєте як безкоштовний API для отримання даних про запаси в режимі реального часу?


1
Є ще один API Google, який ви можете використовувати. Я задокументував тут: jarloo.com/real-time-google-stock-api
Келлі

11
Як розробник програмного забезпечення я рекомендую Alpha Vantage . Вони пропонують безкоштовні API JSON для котирувань акцій у режимі реального часу та історії. Ось їхні дані в режимі реального часу для MSFT. Ось їх повна документація API. Вам потрібен ключ API, який можна безкоштовно отримати на їхньому веб-сайті .
Стів Каріно

4
Станом на вересень 2017 року, будь ласка , зверніться до цього питання: stackoverflow.com/questions/46070126 / ...
augustomen

2
Альфа Вантаж - чудова. Я щойно писав про це в блозі the-data-wrangler.com/…
Ешлі Девіс

Ви також можете спробувати цю api: free.currencyconverterapi.com/api/v5/…
Toe Pyae Sone Oo

Відповіді:


427

Оновлення відповіді трохи

1. Спробуйте API API Vantage

Для початківців ви можете спробувати отримати вихід JSON із запиту типу

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

НЕ Спробуйте Yahoo Finance API (це ДЕПРИКАТИРОВАНО або НЕ ДОПУСТАЛО).

Для початківців можна створити CSV за допомогою простого дзвінка API:

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

(Це створить і збереже CSV для AAPL, GOOG та MSFT)

Зауважте, що ви повинні додати формат до рядка запиту ( f=..). Огляд усіх форматів див на цій сторінці .

Щоб отримати додаткові приклади, відвідайте цю сторінку .

Для XMLі JSON-На даних, ви можете зробити наступне:

Не використовуйте YQL (мова запитів Yahoo) **

Наприклад:

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. Використовуйте веб-сервіс

Наприклад, щоб отримати всі котирування акцій у XML:

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

Щоб отримати всі котирування акцій JSON, просто додайте format=JSONв кінці URL-адреси:

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

Альтернативи:

1. Валютний API

  • 165+ курси валюти в реальному часі, включаючи кілька криптовалют. Документи тут .

2. 1Формуйте фінансові API

  • Ставки в режимі реального часу в протягом приблизно 40 валютних пар доступні тут .

3. API фінансового вмісту

4. Відкриті курси валют

5. API Oanda

6. XE API

7. Xignite API

8. валютний рівень API

9. Інші API - обговорюються на programmableWeb


2
ось що ви зараз просили ... gregnozik.blogspot.in/2011/09/yahoo-finance-api_23.html
AurA

7
Варто зазначити, що Yahoo! скажіть про виведення цін на акції: "Схоже, деякі з них створили зворотний інтерфейс API, який вони використовують для отримання даних про фінанси, але вони порушують наші Умови надання послуг (відсутність перерозподілу даних про фінанси) ... Перерозподіл дозволено лише у тому випадку, якщо ви використовуєте значки, створені командою: finance.yahoo.com/badges . В іншому випадку ви можете використовувати YQL або будь-який інший метод для отримання
ДІЯЛЬНОГО

3
замість того, щоб економити в csv ... чи можете ви захопити дані як JSON?
підстрибуючиХіппо

3
Варто зауважити, що кінцеві точки Yahoo не в режимі реального часу, вони затримуються на 15 хвилин (наприклад, поле LastTradeWithTime в YQL)
artur

37
Відповідь потребує оновлення, оскільки Yahoo Finance API вже мертвий.
Вівек Віджаян

47

Я запізнююсь, але перевіряю Куандль . Вони мають API цін на акції та основи .

Ось приклад дзвінка, використовуючи завантаження Quandl-api в CSV

приклад:

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

Вони підтримують ці мови . Їх вихідні дані надходять від Yahoo Finance, Google Finance, NSE, BSE, FSE, HKEX, LSE, SSE, TSE та іншого ( див. Тут ).


У вас є якісь технічні показники з цим API (наприклад, rsi)?
Ківа

Я поняття не маю. Я фактично не пов'язаний з Quandl, я просто знаю, що це місце для отримання даних.
користувач2023861

Це виглядає як хороший варіант, але чи можете ви отримати тут дані про запаси? Здається, що найкоротші часові рамки - це щоденні дані?
Тревор

8
Дані про запаси в реальному часі недоступні через Quandl - я спробував це.
Брайан Гудвін

2
Quandl також має багато запасів у своєму наборі даних WIKI.
Джеремі Головач

16

Я б запропонував використовувати API розробника TradeKing . Це дуже добре і безкоштовно використовувати. Все, що потрібно, - це те, що у вас є обліковий запис у них, і наскільки мені відомо, вам не потрібно мати баланс ... тільки щоб бути зареєстрованим.


2
І створення цього акаунта настільки "смішне", що я скасував через 10 хвилин ...
inselberg

2
Якщо я можу запитати, що було в цьому так "смішного"? Ви маєте на увазі той факт, що вони запитують певну конфіденційну особисту інформацію? Будь-який онлайн-брокер запитає однакову інформацію ... Це нічого незвичайного.
поїзд

11
СИН, дата народження, шлюбний стан, утриманці, ...? серйозно? Я просто хочу зателефонувати в API для тестування
Даніель Б

Інші апіси, які я знаходжу, - це квотемедія та союзник.
Deepan Prabhu Babu

7

Я пішов за головною відповіддю і почав дивитися на фінанси Yahoo. До їхнього API можна отримати доступ до кількох різних способів, але я знайшов приємну посилання для отримання інформації про запаси як CSV тут: http://www.jarloo.com/

Користуючись цим, я написав цей сценарій. Я насправді не рубіновий хлопець, але це може допомогти вам зламати щось разом. Я ще не придумав назви змінних для всіх полів, які пропонує Yahoo, тому ви можете заповнити їх, якщо вони вам потрібні.

Ось використання

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 повертає хеш, такий, що SpecificData ["GOOG"] ["name"] є "Google Inc."

Нарешті, власне код для запуску цього ...

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
це дійсно корисно, я б хотів, щоб я міг дати вам більше голосів. Швидке запитання - чи вважаєте ви цей API надійним і чи справді котирування в реальному часі? Я знаю, що частина інформації Yahoo затримується, і, схоже, залежить від конкретного API, до якого ви отримуєте доступ.
Гондлі

Я зробив це, щоб допомогти другові, і я думаю, що це закінчилося для нього добре. Інформація досить швидка, я думаю, що вони оновлювали її кожні 10/15 хвилин, якщо я правильно згадую.
Джек Францен

1
Версія C # та підручник тут: jarloo.com/yahoo_finance
Келлі

так, той хлопець, мабуть, знає, як отримати інформацію про запаси ха-ха. У нього є інші підручники за останні 2 місяці, які стверджують, що ви можете все ще отримувати дані про запаси в режимі реального часу від Google
Джек Францен

6

Якщо ви все ще хочете використовувати Google Finance для своїх даних, ви можете перевірити це.

Нещодавно мені потрібно було перевірити, чи справді дані SGX можна отримати за допомогою google finance (і, звичайно, я зіткнувся з тією ж проблемою, що і ви)


Я вже бачив "JSON Quote API" раніше. Цей інструмент здається дуже перспективним. Я також рекомендую це: investexcel.net/google-finance-stock-quotes-in-excel
ASH
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.