Google Finance API 대신 사용 [닫힘]


430

Google Finance API를 사용하여 회사에 대한 주식 데이터를 가져오고 싶었지만이 API는 2011/26/05부터 더 이상 사용되지 않습니다.

주식 데이터를 실시간으로 얻기 위해 무료 API로 무엇을 사용합니까?


1
사용할 수있는 다른 Google API가 있습니다. 여기에 문서화했습니다. jarloo.com/real-time-google-stock-api
켈리

11
소프트웨어 개발자로서 Alpha Vantage를 추천 합니다. 실시간 및 과거 주식 시세를위한 무료 JSON API를 제공합니다. 다음 은 MSFT에 대한 실시간 일일 데이터입니다. 다음 은 전체 API 설명서입니다. 웹 사이트 에서 무료로 얻을 수있는 API 키가 필요합니다 .
Steve Carino

4
2017 년 9 월 현재,이 질문을 참조하십시오 : stackoverflow.com/questions/46070126/…
augustomen

2
Alpha Vantage는 훌륭합니다. 방금 블로그 데이터를 작성했습니다. the-data-wrangler.com/…
Ashley Davis

이 API를 사용해 볼 수도 있습니다 : free.currencyconverterapi.com/api/v5/…
Toe Pyae Sone Oo

답변:


427

약간의 답변 업데이트

1. Alpha Vantage API 사용해보기

초보자는 다음과 같은 쿼리에서 JSON 출력을 얻을 수 있습니다.

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

DONT Yahoo Finance API를 사용해보십시오 (지금은 DEPRICATED 또는 UNAVAILABLE입니다).

초보자는 간단한 API 호출로 CSV를 생성 할 수 있습니다.

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

(이것은 AAPL, GOOG 및 MSFT에 대한 CSV를 생성하고 저장합니다)

쿼리 문자열 ( f=..)에 형식을 추가해야합니다 . 모든 형식에 대한 개요는 이 페이지를 참조 하십시오 .

더 많은 예를 보려면 이 페이지를 방문 하십시오 .

들어 XMLJSON기반 데이터, 다음을 수행 할 수 있습니다 :

YQL (Yahoo Query Language)을 사용하지 마십시오 **

예를 들면 다음과 같습니다.

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

의 모든 주식 시세를 얻으려면 URL 끝에 다음을 JSON추가하십시오 format=JSON.

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

대안 :

1. 통화 API

  • 소수의 암호화를 포함한 165 개 이상의 실시간 통화 요금. 여기에 문서가 있습니다 .

2. 1Forge 금융 API

3. 재무 컨텐츠 API

  • 문서 이 API에 대한 아주 좋은 것입니다.

4. 공개 환율

5. Oanda API

6. XE API

7. Xignite API

8. 통화 계층 API

9. 다른 API- 프로그래밍 가능한 웹 에서 논의


2
여기에 지금 요청한 것이 있습니다 ... gregnozik.blogspot.in/2011/09/yahoo-finance-api_23.html
AurA

7
야후! "가격 데이터를 가져 오는 데 사용하는 API를 리버스 엔지니어링 한 것으로 보이지만 서비스 약관을 위반하는 것으로 보입니다 (재무 데이터의 재분배 없음) ... 재분배는 사용중인 경우에만 허용됩니다. 팀이 만든 배지 : finance.yahoo.com/badges . 그렇지 않으면 YQL 또는 다른 방법으로 개인 용도의 데이터를 얻을 수 있습니다 " developer.yahoo.com/forum/General-Discussion-at-YDN/…
poshaughnessy

3
CSV로 저장하는 대신 데이터를 JSON으로 가져올 수 있습니까?
수신 거부 Hippo

3
야후의 엔드 포인트가 실시간 이 아니라는 점은 주목할 만하다. 15 분 지연된다 (예를 들어 YQL의 LastTradeWithTime 필드 참조)
artur

37
Yahoo Finance API가 현재 종료되었으므로 답변을 업데이트해야합니다.
Vivek Vijayan

47

늦었지만 Quandl을 확인하십시오 . 그들은 주가와 기초에 대한 API를 가지고 있습니다 .

다음 은 CSV에서 Quandl-api 다운로드를 사용 하는 호출 예입니다.

예:

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과 제휴하지 않고 데이터를 얻을 수있는 곳이라는 것을 알고 있습니다.
user2023861

이것은 좋은 옵션처럼 보이지만 여기서 실시간 재고 데이터를 얻을 수 있습니까? 최단 시간 프레임이 일일 데이터 인 것 같습니다.
Trevor

8
Quandl을 통해 실시간 재고 데이터를 사용할 수 없습니다. 시도했습니다.
Brian Goodwin

2
Quandl은 또한 WIKI 데이터 세트에 많은 주식이 없습니다.
Jeremy Holovacs 2012 년

16

TradeKing의 개발자 API 사용을 제안 합니다 . 매우 좋고 무료입니다. 필요한 것은 당신이 그들과 함께 계정을 가지고 있고 내 지식으로 당신은 잔액을 가질 필요가 없다는 것입니다 ... 등록하기 위해서만.


2
그리고 그 계정을 만드는 것은 너무 재미있어서 10 분 후에 취소되었습니다 ...
inselberg

2
내가 물을 수 있다면, "재미있는"것은 무엇입니까? 그들이 민감한 개인 정보를 요구한다는 사실을 언급하고 있습니까? 모든 온라인 주식 중개인은 동일한 정보를 요구할 것입니다.
훈련

11
SIN, 생년월일, 무술 상태, 부양 가족, ...? 진심으로? 테스트를 위해 API를 호출하고 싶습니다
Daniel B

내가 찾고있는 다른 API는 quotemedia와 ally입니다.
Deepan Prabhu Babu

7

나는 최고 답변을 따라 야후 금융을보고 시작했다. 그들의 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는 특정 데이터 [ "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에 의존하는 것 같습니다.
Hundley

나는 친구를 돕기 위해 이것을했고 결국 친구를 위해 잘 작동한다고 생각합니다. 정보는 매우 빠르다. 올바르게 기억하면 10/15 분마다 업데이트한다고 생각한다.
Jack Franzen

1
C # 버전 및 튜토리얼은 다음과 같습니다. jarloo.com/yahoo_finance
Kelly

그래, 그 사람은 재고 정보를 얻는 방법을 알고있다. 그는 여전히 구글에서 실시간 주식 데이터를 얻을 수 있습니다 주장하는 지난 3 개월까지 다른 자습서를 가지고
잭 프란 젠에게

6

데이터에 Google Finance를 계속 사용하려는 경우 이를 확인할 수 있습니다 .

최근 SGX 데이터가 Google 금융을 통해 실제로 검색 가능한지 테스트해야했습니다 (물론 귀하와 동일한 문제가 발생했습니다)


전에 'JSON Quote API'를 보았습니다. 그 도구는 매우 유망한 것 같습니다. 또한 다음과 같이
ASH
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.