diff --git a/modulos/coingecko_api.py b/modulos/coingecko_api.py index 2d4c4dc..4564f5e 100644 --- a/modulos/coingecko_api.py +++ b/modulos/coingecko_api.py @@ -765,17 +765,69 @@ def coin_historical_chart_data_within_time_range_by_id( # print(f'erro {codigo}: {dados}') -def coin_ohlc_chart_by_id() -> tuple: - pass +def coin_ohlc_chart_by_id( + id_criptomoeda: str = '', + vs_currency: str = '', + days: str = '', + precision: str | int = 'full' +) -> tuple: + '''https://docs.coingecko.com/v3.0.1/reference/coins-id-ohlc + + este endpoint permite fazer consulta ao gráfico OHLC (Open, High, Low, Close) + de uma moeda usando o seu id + ''' + # dicionario parametros + api_parameters: dict = { + 'id': '', + 'vs_currency': '', + 'days': '', + 'precision': '', + } + # validacao de parametros + # id_criptomoeda (como 'id' é nome reservado, foi usado outro nome) + if not isinstance(id_criptomoeda, str): + raise TypeError('\'id_criptomoeda\' tem de ser do tipo \'str\'') + if id_criptomoeda == '': + raise ValueError('\'id_criptomoeda\' tem de ser definido') + api_parameters['id'] = id_criptomoeda + # vs_currency + if not isinstance(vs_currency, str): + raise TypeError('\'vs_currency\' tem de ser do tipo \'str\'') + if vs_currency == '': + raise ValueError('\'vs_currency\' tem de ser definido') + api_parameters['vs_currency'] = vs_currency + # days + if not isinstance(days, str): + raise TypeError('\'days\' tem de ser do tipo \'str\'') + if days == '': + raise ValueError('\'days\' tem de ser definido') + api_parameters['days'] = days + # precision + if not isinstance(precision, (str, int)): + raise TypeError('\'precision\' tem de ser do tipo \'(str, int)\'') + if isinstance(precision, str): + if precision != 'full': + precision = 'full' + if precision == 'full': + precision = '18' + precision = int(precision) + if isinstance(precision, int): + if precision < 0: + precision = 0 + if precision > 18: + precision = 18 + precision = str(precision) + api_parameters['precision'] = precision + + return API(f'coins/{api_parameters['id']}/ohlc', api_parameters) # debug (decomentar linhas seguintes para testar funcao) -# url, codigo, dados = coins_list_with_market_data('eur', 'bitcoin') +# url, codigo, dados = coin_ohlc_chart_by_id('bitcoin','eur','1') # print(f'url: {url}') # if codigo == 200: -# print(f'codigo: {codigo}') # for item in dados: -# print(item) +# print(f'{item}: {dados}') # else: # print(f'erro {codigo}: {dados}') @@ -1137,43 +1189,4 @@ def public_companies_holdings() -> tuple: # for item in dados: # print(item) # else: -# print(f'erro {codigo}: {dados}') - - -# ===================================================== -# fazer consulta de dados OHLC -def consulta_ohcl(criptomoeda: str = '', - vs_currency: str = '', - dias: int | str = 30, - precisao: int | str = 3 - ) -> tuple: - # validacao de parametros - if not isinstance(criptomoeda, str): - raise TypeError('\'criptomoeda\' não é do tipo \'str\'') - if criptomoeda == '': - raise ValueError('\'criptomoeda\' tem de ser definido') - if not isinstance(vs_currency, str): - raise TypeError('\'vs_currency\' não é do tipo \'str\'') - if vs_currency == '': - raise ValueError('\'vs_currency\' tem de ser definido') - if (not isinstance(dias, str)) and (not isinstance(dias, int)): - raise TypeError('\'dias\' não é do tipo \'str\' ou \'int\'') - if isinstance(dias, int): - dias = str(dias) - if (not isinstance(precisao, str)) and (not isinstance(precisao, int)): - raise TypeError('\'precisao\' não é do tipo \'str\' ou \'int\'') - if isinstance(precisao, int): - precisao = str(precisao) - - endpoint_api = 'coins/' + criptomoeda + '/ohlc?vs_currency=' + vs_currency + '&days=' + dias + '&precision=' + precisao - url_pedido = url_raiz_API + endpoint_api - resposta = requests.get(url_pedido, headers=headers) - return resposta.status_code, resposta.json() - - -# debug (decomentar linhas seguintes para testar funcao) -# codigo, dados = consulta_ohcl('dogecoin', 'eur', precisao=5) -# if codigo == 200: -# print(f'codigo: {codigo}') -# for item in dados: -# print(item) +# print(f'erro {codigo}: {dados}') \ No newline at end of file