diff --git a/coingecko_api.py b/coingecko_api.py new file mode 100644 index 0000000..c3155db --- /dev/null +++ b/coingecko_api.py @@ -0,0 +1,56 @@ + +# . documentação API: https://docs.coingecko.com/v3.0.1/reference/introduction + +import requests + +CHAVE_API = 'CG-K5RS5VXsdFDip2UvY3z8VjQP' +headers = { + 'accept': 'application/json', + 'x-cg-demo-api-key': CHAVE_API +} + +url_raiz_API = 'https://api.coingecko.com/api/v3/' + +# criptomoeda = 'bitcoin' +# vs_currency = 'eur' +# dias = '30' +# precisao = '3' + +#url_consulta_ohlc = 'coins/' + criptomoeda + '/ohlc?vs_currency=' + vs_currency + '&days=' + dias + '&precision=' + precisao + +# verificar o estado do servidor API +def ping() -> tuple: + endpoint_api = 'ping' + url_pedido = url_raiz_API + endpoint_api + resposta = requests.get(url_pedido, headers=headers) + return resposta.status_code, resposta.json()['gecko_says'] +# debug +# codigo, dados = ping() +# print(f'codigo: {codigo}') +# print(f'resposta: {dados}') + +# fazer consulta de dados OHLC +def consulta_ohcl(criptomoeda: str, vs_currency: str = 'eur', dias: int | str = 30, precisao: int | str = 3) -> tuple: + # validacao de parametros + if not isinstance(criptomoeda, str): + raise ValueError('\'criptomoeda\' não é do tipo \'str\'') + if not isinstance(vs_currency, str): + raise ValueError('\'vs_currency\' não é do tipo \'str\'') + if (not isinstance(dias, str)) and (not isinstance(dias, int)): + raise ValueError('\'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 ValueError('\'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 +# codigo, dados = consulta_ohcl('bitcoin') +# print(f'codigo: {codigo}') +# for item in dados: +# print(item) \ No newline at end of file diff --git a/historico_precos.csv b/historico_precos.csv index 1028ff1..db92a11 100644 --- a/historico_precos.csv +++ b/historico_precos.csv @@ -161,7 +161,6 @@ data_unix,criptomoeda,vs_currency,preco_abertura,preco_maximo,preco_minimo,preco 1716120000000,bitcoin,eur,61808.823,62146.377,61512.551,61829.506 1716134400000,bitcoin,eur,61818.297,61818.297,61273.898,61479.361 1716148800000,bitcoin,eur,61472.072,61594.942,60698.03,60698.03 -1716163200000,bitcoin,eur,60788.937,61088.408,60761.301,60924.868 1716177600000,bitcoin,eur,60943.195,61418.882,60803.093,61310.779 1716192000000,bitcoin,eur,61265.22,61777.561,60869.73,61498.328 1716206400000,bitcoin,eur,61508.732,61915.705,61378.922,61679.177 @@ -179,3 +178,7 @@ data_unix,criptomoeda,vs_currency,preco_abertura,preco_maximo,preco_minimo,preco 1716379200000,bitcoin,eur,64212.313,64788.086,64212.313,64640.231 1716393600000,bitcoin,eur,64547.473,65082.056,64075.148,65026.206 1716408000000,bitcoin,eur,65007.331,65126.685,64062.434,64369.097 +1716422400000,bitcoin,eur,64477.473,64503.784,63763.614,63912.084 +1716436800000,bitcoin,eur,63859.939,64250.165,63859.939,64010.364 +1716451200000,bitcoin,eur,64082.909,64493.094,64024.978,64328.023 +1716163200000,bitcoin,eur,60788.937,61088.408,60761.301,60924.868 diff --git a/portfolio.py b/portfolio.py index 09af0eb..ea9ee32 100644 --- a/portfolio.py +++ b/portfolio.py @@ -64,8 +64,18 @@ for item_resposta in lista_linhas_resposta: lista_linhas_ficheiro_csv.append(item_resposta) # gravar dados importados -with open(caminho_ficheiro_historico_csv, 'w', newline='') as ficheiro_csv_historico_precos: - ficheiroCSV = csv.DictWriter(ficheiro_csv_historico_precos, fieldnames=cabecalho) - ficheiroCSV.writeheader() - ficheiroCSV.writerows(lista_linhas_ficheiro_csv) +def gravar_dados_ficheiro_csv(nome_ficheiro: str, dados_importados: list, campos: list = cabecalho): + # validacao de parametros da funcao + if not isinstance(nome_ficheiro, str): + raise ValueError('\'nome_ficheiro\' não é do tipo \'str\'') + if not isinstance(dados_importados, list): + raise ValueError('\'dados_importados\' não é do tipo \'list\'') + if not isinstance(campos, list): + raise ValueError('\'campos\' não é do tipo \'list\'') + + with open(nome_ficheiro, 'w', newline='') as ficheiro_csv_historico_precos: + ficheiroCSV = csv.DictWriter(ficheiro_csv_historico_precos, fieldnames=campos) + ficheiroCSV.writeheader() + ficheiroCSV.writerows(dados_importados) +gravar_dados_ficheiro_csv(caminho_ficheiro_historico_csv, lista_linhas_ficheiro_csv)