본문 바로가기
투자/가상화폐

가상화폐 분봉 데이터 받기 업데이트 버전

by 세날 2020. 9. 12.

https://morethinking.tistory.com/6

 

가상화폐 가격 데이터 받는 방법(분봉도 가능!)

가상화폐의 가격 데이터를 가져오는 방법에 대해 알아보겠습니다. 가상화폐의 가격 데이터는 coinmarket이라는 곳에서 일별 시가 고가 저가 종가 거래량을 제공하고 있습니다. 이더리움 클릭시 나

morethinking.tistory.com

이전 포스트 

 

 

이 코드에서는 문제가 있는데 바로 한번에 모든 데이터를 받아야 한다는 점입니다. 그래서 이러한 문제를 해결하기 위해서 코드를 개선했습니다. 

 

import requests
import bs4
import pandas as pd
import time
import matplotlib.pyplot as plt
import numpy as np
import datetime
import sqlite3
import ccxt


# start=1504224000000
# start=1582748490000


ticker='BTCUSDT'

con = sqlite3.connect(r"C:\Users\A\Downloads/coindata.db")
cursor = con.cursor()

s= '2018-01-01 00:00:00'
start = int(time.mktime(datetime.datetime.strptime(s,'%Y-%m-%d %H:%M:%S').timetuple()))*1000



def get_day(day):
    an= datetime.datetime.fromtimestamp(day/1000)
    return an

def get_startpoint(start):


    l = pd.read_sql("SELECT date,time FROM %s" % ticker, con)
    # con.close()
    # print(l)
    day = l.iloc[-1]['Date']
    min= l.iloc[-1]['time']


    tmp= int(time.mktime(datetime.datetime.strptime(day+min+'00','%Y%m%d%H%M%S').timetuple()))*1000

    if start < tmp:
        start = tmp

    return start


def get_tomorrow(today):
    today =datetime.datetime.fromtimestamp(int(today)/1000) +datetime.timedelta(minutes=1)

    print(today, 'kkk')


    # print(today.timetuple())
    tomorrow = time.mktime( today.timetuple())
    # print(tomorrow)
    return int(tomorrow)*1000


#####시작####


try:
    cursor.execute("CREATE TABLE {}(Date text, time text, ticker text, Open int, High int, Low int, Closing int, Volumn int)".format(ticker))
    print('nothing')

except:
    print('exist')
    start = get_startpoint(start)


print(get_day(start))




ep='https://api.binance.com'
candle = '/api/v3/klines'

start_date=[]
start_time=[]
open=[]
high=[]
low=[]
close=[]
volume=[]


first_params_candle = {'symbol': ticker, 'interval': '1d', 'startTime': start,'limit':1}
r1 =requests.get(ep+candle, params=first_params_candle)
# print(r1.json())

# print(start, '1')
start = get_tomorrow(start)
# print(start, '2')
while len(r1.json()) >0:


    first_params_candle = {'symbol': ticker, 'interval': '1m', 'startTime': start,'limit':1000}
    r1 =requests.get(ep+candle, params=first_params_candle)
    # print(r1.text)
    for i in range(0, len(r1.json())):
        # print(r1.json())
        # print(datetime.datetime.fromtimestamp(r1.json()[i][0]/1000),r1.json()[i][4])
        start_date.append(datetime.datetime.fromtimestamp(r1.json()[i][0]/1000).strftime('%Y%m%d'))
        start_time.append(datetime.datetime.fromtimestamp(r1.json()[i][0]/1000).strftime('%H%M'))
        open.append(r1.json()[i][1])
        high.append(r1.json()[i][2])
        low.append(r1.json()[i][3])
        close.append(r1.json()[i][4])
        volume.append(r1.json()[i][5])
    if len(r1.json())>0:
        # print(r1.json()[-1])
        start = r1.json()[-1][6]+1


        for i in range(len(start_time)):
            cursor.execute("INSERT INTO {} VALUES(?, ?, ?, ?, ?,?,?,?)".format(ticker), [ start_date[i], start_time[i], ticker, open[i], high[i], low[i], close[i], volume[i] ])


        start_date=[]
        start_time=[]
        open=[]
        high=[]
        low=[]
        close=[]
        volume=[]

        con.commit()


        print(datetime.datetime.fromtimestamp(r1.json()[-1][6]/1000).strftime('%Y%m%d%H%M'), '데이터 다운로드 완료')


    else:
        print( '완료')


    time.sleep(1)


con.close()

 

위 코드에서 ticker, s , con 주소를 수정하셔서 쓰면 됩니다. 

 

바이낸스 api 데이터 가져오기 개선.txt
0.00MB

 

댓글