criacao de funcao para gravar dados em ficheiro;

modulo 'coingecko.py' para agrupar funcoes de acesso a api
This commit is contained in:
2024-05-24 23:30:22 +01:00
parent b576ae2052
commit 88d82e3d2e
3 changed files with 74 additions and 5 deletions

56
coingecko_api.py Normal file
View File

@ -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)

View File

@ -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

1 data_unix criptomoeda vs_currency preco_abertura preco_maximo preco_minimo preco_fecho
161 1716120000000 bitcoin eur 61808.823 62146.377 61512.551 61829.506
162 1716134400000 bitcoin eur 61818.297 61818.297 61273.898 61479.361
163 1716148800000 bitcoin eur 61472.072 61594.942 60698.03 60698.03
1716163200000 bitcoin eur 60788.937 61088.408 60761.301 60924.868
164 1716177600000 bitcoin eur 60943.195 61418.882 60803.093 61310.779
165 1716192000000 bitcoin eur 61265.22 61777.561 60869.73 61498.328
166 1716206400000 bitcoin eur 61508.732 61915.705 61378.922 61679.177
178 1716379200000 bitcoin eur 64212.313 64788.086 64212.313 64640.231
179 1716393600000 bitcoin eur 64547.473 65082.056 64075.148 65026.206
180 1716408000000 bitcoin eur 65007.331 65126.685 64062.434 64369.097
181 1716422400000 bitcoin eur 64477.473 64503.784 63763.614 63912.084
182 1716436800000 bitcoin eur 63859.939 64250.165 63859.939 64010.364
183 1716451200000 bitcoin eur 64082.909 64493.094 64024.978 64328.023
184 1716163200000 bitcoin eur 60788.937 61088.408 60761.301 60924.868

View File

@ -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)