5 ответов:
обновление ответа немного
1. попробовать Alpha Vantage API
для начинающих вы можете попробовать получить вывод JSON из запроса, такого как
https://www.alphavantage.co/query?function=TIME_SERIES_DAILY&symbol=MSFT&apikey=demoне Yahoo Finance API (сейчас он устарел или недоступен).
- вот ссылка предыдущее обсуждение Yahoo Finance API на StackOverflow.
- вот альтернативный ссылка на Yahoo Finance API опубликовано на код Google.
для начинающих вы можете создать 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.env2. Используйте веб-сервис
например, чтобы получить все котировки акций в
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варианты:
- в режиме реального времени доступны курсы примерно для 40 валютных пар здесь.
- The документация для этого API очень хорошо.
5. XE API
8. Другие API обсуждаются в programmableWeb
Я очень поздно, но проверить Quandl. У них есть 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, Google финансы, рынок акций БФБ, фсе, Гонконгской фондовой биржи, Лондонской фондовой бирже, ГСП, TSE и больше (посмотреть здесь).
Я бы предложил использовать API разработчика TradeKing. Это очень хорошо и свободно использовать. Все, что требуется, это то, что у вас есть счет с ними, и, насколько мне известно, вам не нужно нести баланс ... только для регистрации.
Если вы все еще хотите использовать Google Finance для своих данных, вы можете зацени.
недавно мне нужно было проверить, действительно ли данные SGX можно получить через Google finance (и, конечно, я столкнулся с той же проблемой, что и вы)
я последовал за верхним ответом и начал смотреть на Yahoo finance. Их 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
Comments