비트코인 시세 엑셀 저장 업비트API 코드(2)

지난 포스팅에 이어 업비트 API를 이용하여 비트코인 시세를 엑셀로 저장하는 파이썬 코드입니다.

비트코인 시세 엑셀 저장

비트코인 시세 엑셀 저장

아래는 코드 내용입니다. 비트코인 시세 엑셀 저장 파이썬 코드를 작성하기 위해 업비트 개발자 센터GPT를 이용해서 작성했습니다.

코드를 실행하기 위해서는 본인의 업비트API를 발급받아서 입력해야 됩니다. 해당경로에’api.txt’를 만들어 주시고 ac: 에는 엑세스코드 se:에는 시크릿코드를 적어주시면 됩니다.

비트코인 시세 엑셀 저장 업비트API 코드는 아래와 같습니다.

import jwt
import uuid
import requests
from urllib.parse import urlencode
import hashlib
import matplotlib.pyplot as plt
import time
import pandas as pd
import numpy as np
import talib
import requests
import datetime
import pandas as pd
import pytz

class Upbit:
    def __init__(self):
        with open('api.txt', 'r') as file:
            lines = file.readlines()
            for line in lines:
                if "ac:" in line:
                    self.access_key = line.replace("ac:", "").strip()
                elif "se:" in line:
                    self.secret_key = line.replace("se:", "").strip()
        self.server_url = 'https://api.upbit.com/v1/'

    def get_auth_headers(self, query):
        m = hashlib.sha512()
        m.update(urlencode(query).encode())
        query_hash = m.hexdigest()
        payload = {
            'access_key': self.access_key,
            'nonce': str(uuid.uuid4()),
            'query_hash': query_hash,
            'query_hash_alg': 'SHA512'
        }
        jwt_token = jwt.encode(payload, self.secret_key)
        authorize_token = 'Bearer {}'.format(jwt_token)
        headers = {"Authorization": authorize_token}
        return headers

    def request_private(self, content):
        headers = self.get_auth_headers({})
        res = requests.get(self.server_url + content, headers=headers).json()
        return res

    def request_public(self, content, query):
        res = requests.request("GET", self.server_url + content, params=query).json()
        return res

# Create an instance of the Upbit class
upbit = Upbit()

# Make a private API request
response = upbit.request_private('accounts')

def adjust_time(time):
    return (time - datetime.timedelta(minutes=200)).replace(tzinfo=pytz.timezone('Asia/Seoul'))


# Make a public API request with query parameters
to = datetime.datetime.now().replace(tzinfo=pytz.timezone('Asia/Seoul'))
data = []

for _ in range(5):  # 5번 반복하여 총 1000개의 데이터를 수집합니다.
    query_params = {
        'market': 'KRW-BTC',
        'to': to.isoformat(),
        'count': 200  # 한 번에 최대 200개의 데이터를 수집합니다.
    }
    print(query_params)
    response = upbit.request_public('candles/minutes/1', query_params)
    data.extend(response)
    to = adjust_time(to)

df = pd.DataFrame(data)
print(df)
df.to_excel("upbit_data.xlsx")

Upbit의 정책상 한번에200개 데이터만 수집하게 되어 있어 for문으로 반복 시켜 많은 데이터를 수집하도록 했습니다.

다른포스팅

댓글 남기기

%d 블로거가 이것을 좋아합니다: