criacao de funcao para gravar dados em ficheiro;
modulo 'coingecko.py' para agrupar funcoes de acesso a api
This commit is contained in:
56
coingecko_api.py
Normal file
56
coingecko_api.py
Normal 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)
|
||||||
@ -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
|
1716120000000,bitcoin,eur,61808.823,62146.377,61512.551,61829.506
|
||||||
1716134400000,bitcoin,eur,61818.297,61818.297,61273.898,61479.361
|
1716134400000,bitcoin,eur,61818.297,61818.297,61273.898,61479.361
|
||||||
1716148800000,bitcoin,eur,61472.072,61594.942,60698.03,60698.03
|
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
|
1716177600000,bitcoin,eur,60943.195,61418.882,60803.093,61310.779
|
||||||
1716192000000,bitcoin,eur,61265.22,61777.561,60869.73,61498.328
|
1716192000000,bitcoin,eur,61265.22,61777.561,60869.73,61498.328
|
||||||
1716206400000,bitcoin,eur,61508.732,61915.705,61378.922,61679.177
|
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
|
1716379200000,bitcoin,eur,64212.313,64788.086,64212.313,64640.231
|
||||||
1716393600000,bitcoin,eur,64547.473,65082.056,64075.148,65026.206
|
1716393600000,bitcoin,eur,64547.473,65082.056,64075.148,65026.206
|
||||||
1716408000000,bitcoin,eur,65007.331,65126.685,64062.434,64369.097
|
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
|
||||||
|
|||||||
|
18
portfolio.py
18
portfolio.py
@ -64,8 +64,18 @@ for item_resposta in lista_linhas_resposta:
|
|||||||
lista_linhas_ficheiro_csv.append(item_resposta)
|
lista_linhas_ficheiro_csv.append(item_resposta)
|
||||||
|
|
||||||
# gravar dados importados
|
# gravar dados importados
|
||||||
with open(caminho_ficheiro_historico_csv, 'w', newline='') as ficheiro_csv_historico_precos:
|
def gravar_dados_ficheiro_csv(nome_ficheiro: str, dados_importados: list, campos: list = cabecalho):
|
||||||
ficheiroCSV = csv.DictWriter(ficheiro_csv_historico_precos, fieldnames=cabecalho)
|
# validacao de parametros da funcao
|
||||||
ficheiroCSV.writeheader()
|
if not isinstance(nome_ficheiro, str):
|
||||||
ficheiroCSV.writerows(lista_linhas_ficheiro_csv)
|
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)
|
||||||
|
|||||||
Reference in New Issue
Block a user