From 8dc8efc997ae49c7d5ef16f09a329f6db1f2ac9b Mon Sep 17 00:00:00 2001 From: "jonghun.yoo" Date: Wed, 5 May 2021 17:20:03 +0900 Subject: [PATCH] =?UTF-8?q?request=EB=A5=BC=20retry=ED=95=98=EB=8A=94=20?= =?UTF-8?q?=EC=BD=94=EB=93=9C=20=EC=A0=9C=EA=B1=B0=20(#15)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vscode/launch.json | 4 +- pyupbit/exchange_api.py | 6 +-- pyupbit/quotation_api.py | 83 ++++++++++++++++++++-------------------- pyupbit/request_api.py | 33 ++-------------- 4 files changed, 51 insertions(+), 75 deletions(-) diff --git a/.vscode/launch.json b/.vscode/launch.json index c290bee..08e5e2f 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -10,8 +10,8 @@ "request": "launch", "program": "${file}", "console": "integratedTerminal", - "cwd": "${fileDirname}", - "env": {"PYTHONPATH": "${workspaceFolder}:${env:PYTHONPATH}"} + // "cwd": "${fileDirname}", + "env": {"PYTHONPATH": "${workspaceRoot}"} } ] } \ No newline at end of file diff --git a/pyupbit/exchange_api.py b/pyupbit/exchange_api.py index 3ad23de..98501e9 100644 --- a/pyupbit/exchange_api.py +++ b/pyupbit/exchange_api.py @@ -368,7 +368,7 @@ def get_order(self, ticker_or_uuid, state='wait', kind='normal', contain_req=Fal url = "https://api.upbit.com/v1/order" data = {'uuid': ticker_or_uuid} headers = self._request_headers(data) - result = _send_get_request(url, headers=headers, data=data) + result = _send_get_request(url, headers=headers, data=data) else : url = "https://api.upbit.com/v1/orders" @@ -437,7 +437,7 @@ def withdraw_coin(self, currency, amount, address, secondary_address='None', tra except Exception as x: print(x.__class__.__name__) return None - + def withdraw_cash(self, amount: str, contain_req=False): """ 현금 출금 @@ -457,7 +457,7 @@ def withdraw_cash(self, amount: str, contain_req=False): except Exception as x: print(x.__class__.__name__) return None - + def get_individual_withdraw_order(self, uuid: str, currency: str, contain_req=False): """ 현금 출금 diff --git a/pyupbit/quotation_api.py b/pyupbit/quotation_api.py index 2420e81..b1e615a 100644 --- a/pyupbit/quotation_api.py +++ b/pyupbit/quotation_api.py @@ -21,11 +21,11 @@ def parse_remaining_req(data): p = re.compile("group=([a-z]+); min=([0-9]+); sec=([0-9]+)") m = p.search(data) ret = { - 'group': m.group(1), - 'min': int(m.group(2)), + 'group': m.group(1), + 'min': int(m.group(2)), 'sec': int(m.group(3)) } - return ret + return ret def fetch_market(isDetails=False, limit_info=False): @@ -36,7 +36,7 @@ def fetch_market(isDetails=False, limit_info=False): limit_info (bool, optional): True: 요청 수 제한 정보 리턴, False: 요청 수 제한 정보 리턴 받지 않음. Defaults to False. Returns: - list, (dict): 마켓 목록 리스트, 요청 제한 정보 딕셔너리 + list, (dict): 마켓 목록 리스트, 요청 제한 정보 딕셔너리 """ url = "https://api.upbit.com/v1/market/all" @@ -51,11 +51,11 @@ def fetch_market(isDetails=False, limit_info=False): limit = parse_remaining_req(remaining_req) data = resp.json() if limit_info: - return data, limit + return data, limit else: return data else: - raise_error(resp.status_code) + raise_error(resp.status_code) def get_tickers(fiat="ALL", limit_info=False): @@ -147,7 +147,7 @@ def get_ohlcv(ticker="KRW-BTC", interval="day", count=200, to=None): dfs = [] count = max(count, 1) - call_count = MAX_CALL_COUNT + call_count = MAX_CALL_COUNT n_calls, remainder = divmod(count, MAX_CALL_COUNT) for n_call in range(n_calls + 1): @@ -242,49 +242,49 @@ def get_orderbook(tickers="KRW-BTC"): if __name__ == "__main__": - try: - for i in range(20): - market_all, limit = fetch_market(isDetails=True, limit_info=True) - except TooManyRequests as e: - print(e) - except UpbitError as e: - print(e) + # try: + # for i in range(20): + # market_all, limit = fetch_market(isDetails=True, limit_info=True) + # except TooManyRequests as e: + # print(e) + # except UpbitError as e: + # print(e) # 모든 티커 목록 조회 - #all_tickers = get_tickers() - #print(all_tickers) + all_tickers = get_tickers() + print(all_tickers) # 특정 시장의 티커 목록 조회 - #krw_tickers = get_tickers(fiat="KRW") - #print(krw_tickers, len(krw_tickers)) + # krw_tickers = get_tickers(fiat="KRW") + # print(krw_tickers, len(krw_tickers)) #btc_tickers = get_tickers(fiat="BTC") - #print(btc_tickers, len(btc_tickers)) + # print(btc_tickers, len(btc_tickers)) #usdt_tickers = get_tickers(fiat="USDT") - #print(usdt_tickers, len(usdt_tickers)) + # print(usdt_tickers, len(usdt_tickers)) # 요청 수 제한 얻기 #all_tickers, limit_info = get_tickers(limit_info=True) - #print(limit_info) + # print(limit_info) # print(get_tickers(fiat="KRW")) # print(get_tickers(fiat="BTC")) # print(get_tickers(fiat="USDT")) #------------------------------------------------------ - #print(get_ohlcv("KRW-BTC")) - #print(get_ohlcv("KRW-BTC", interval="day", count=5)) - #print(get_ohlcv("KRW-BTC", interval="day", to="2020-01-01 00:00:00")) + # print(get_ohlcv("KRW-BTC")) + # print(get_ohlcv("KRW-BTC", interval="day", count=5)) + # print(get_ohlcv("KRW-BTC", interval="day", to="2020-01-01 00:00:00")) - #to = datetime.datetime.strptime("2020-01-01", "%Y-%m-%d") - #df = get_ohlcv(ticker="KRW-BTC", interval="day", to=to) - #print(df) + # to = datetime.datetime.strptime("2020-01-01", "%Y-%m-%d") + # df = get_ohlcv(ticker="KRW-BTC", interval="day", to=to) + # print(df) # string Test - #df = get_ohlcv("KRW-BTC", interval="minute1", to="2018-08-25 12:00:00") - #print(df) + # df = get_ohlcv("KRW-BTC", interval="minute1", to="2018-08-25 12:00:00") + # print(df) # time stamp Test # df = get_ohlcv("KRW-BTC", interval="minute1") @@ -297,13 +297,14 @@ def get_orderbook(tickers="KRW-BTC"): # print(get_ohlcv("KRW-BTC", interval="minute3")) # print(get_ohlcv("KRW-BTC", interval="minute5")) # print(get_ohlcv("KRW-BTC", interval="minute10")) - #print(get_ohlcv("KRW-BTC", interval="minute15")) - #print(get_ohlcv("KRW-BTC", interval="minute30")) - #print(get_ohlcv("KRW-BTC", interval="minute60")) - #print(get_ohlcv("KRW-BTC", interval="minute240")) - #print(get_ohlcv("KRW-BTC", interval="week")) - #print(get_daily_ohlcv_from_base("KRW-BTC", base=9)) - #print(get_ohlcv("KRW-BTC", interval="day", count=5)) + # print(get_ohlcv("KRW-BTC", interval="minute15")) + # print(get_ohlcv("KRW-BTC", interval="minute30")) + # print(get_ohlcv("KRW-BTC", interval="minute60")) + # print(get_ohlcv("KRW-BTC", interval="minute240")) + # print(get_ohlcv("KRW-BTC", interval="week")) + # print(get_daily_ohlcv_from_base("KRW-BTC", base=9)) + # print(get_ohlcv("KRW-BTC", interval="day", count=5)) + # krw_tickers = get_tickers(fiat="KRW") # print(len(krw_tickers)) @@ -314,12 +315,12 @@ def get_orderbook(tickers="KRW-BTC"): # prices1 = get_current_price(krw_tickers1) # prices2 = get_current_price(krw_tickers2) - #print(prices1) + # print(prices1) # print(prices2) - #print(get_current_price("KRW-BTC")) - #print(get_current_price(["KRW-BTC", "KRW-XRP"])) + # print(get_current_price("KRW-BTC")) + # print(get_current_price(["KRW-BTC", "KRW-XRP"])) - #print(get_orderbook(tickers=["KRW-BTC"])) - #print(get_orderbook(tickers=["KRW-BTC", "KRW-XRP"])) + # print(get_orderbook(tickers=["KRW-BTC"])) + # print(get_orderbook(tickers=["KRW-BTC", "KRW-XRP"])) diff --git a/pyupbit/request_api.py b/pyupbit/request_api.py index 0ce7104..11ac16d 100644 --- a/pyupbit/request_api.py +++ b/pyupbit/request_api.py @@ -1,8 +1,5 @@ import re - import requests -from requests.adapters import HTTPAdapter -from urllib3.util.retry import Retry getframe_expr = 'sys._getframe({}).f_code.co_name' @@ -21,28 +18,6 @@ def _parse_remaining_req(remaining_req): return None, None, None -def requests_retry_session(retries=5, backoff_factor=0.2, status_forcelist=(500, 502, 504), session=None): - """ - - :param retries: - :param backoff_factor: - :param status_forcelist: - :param session: - :return: - """ - s = session or requests.Session() - retry = Retry( - total=retries, - read=retries, - connect=retries, - backoff_factor=backoff_factor, - status_forcelist=status_forcelist) - adapter = HTTPAdapter(max_retries=retry) - s.mount('http://', adapter) - s.mount('https://', adapter) - return s - - def _call_public_api(url, **kwargs): """ @@ -51,7 +26,7 @@ def _call_public_api(url, **kwargs): :return: """ try: - resp = requests_retry_session().get(url, params=kwargs) + resp = requests.get(url, params=kwargs) remaining_req_dict = {} remaining_req = resp.headers.get('Remaining-Req') if remaining_req is not None: @@ -75,7 +50,7 @@ def _send_post_request(url, headers=None, data=None): :return: """ try: - resp = requests_retry_session().post(url, headers=headers, data=data) + resp = requests.post(url, headers=headers, data=data) remaining_req_dict = {} remaining_req = resp.headers.get('Remaining-Req') if remaining_req is not None: @@ -99,7 +74,7 @@ def _send_get_request(url, headers=None, data=None): :return: """ try: - resp = requests_retry_session().get(url, headers=headers, data=data) + resp = requests.get(url, headers=headers, data=data) remaining_req_dict = {} remaining_req = resp.headers.get('Remaining-Req') if remaining_req is not None: @@ -124,7 +99,7 @@ def _send_delete_request(url, headers=None, data=None): :return: """ try: - resp = requests_retry_session().delete(url, headers=headers, data=data) + resp = requests.delete(url, headers=headers, data=data) remaining_req_dict = {} remaining_req = resp.headers.get('Remaining-Req') if remaining_req is not None: