Files
crypto_portfolio/portfolio.py
[Luis Rodrigues] ee7dc47997 correção de nome de variaveis;
simplificar a avaliação de equivalencia entre 'item_resposta' e 'linha_ficheiro_csv'
2024-05-22 12:39:31 +01:00

71 lines
3.2 KiB
Python

# script para criar um historico de preços de criptomoedas, guardado em ficheiro CSV, com intuito de utilizar este historico de precos para acompanhar evolução de portfolio de criptomoedas
# aceder ao historico de preços OHLC de CoinGecko através da API
# máximo de requests mensal: 10000 (320/dia; 13/hora)
# . referenciar o uso da CoinGecko através de branding oficial e link para site (https://www.coingecko.com/en/branding)
# . documentação API: https://docs.coingecko.com/v3.0.1/reference/introduction
# . obter OHLC: https://docs.coingecko.com/v3.0.1/reference/coins-id-ohlc
import requests
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
url = url_raiz_API + url_consulta_ohlc
CHAVE_API = 'CG-K5RS5VXsdFDip2UvY3z8VjQP'
headers = {
'accept': 'application/json',
'x-cg-demo-api-key': CHAVE_API
}
resposta = requests.get(url, headers= headers)
# carregar dados já existentes em ficheiro CSV (criar ficheiro se não existir) para dicionario
import csv
import os
cabecalho: list = [ 'data_unix', 'criptomoeda', 'vs_currency', 'preco_abertura', 'preco_maximo', 'preco_minimo', 'preco_fecho' ]
caminho_ficheiro_historico_csv = './historico_precos.csv'
if (os.path.exists(caminho_ficheiro_historico_csv) == False):
ficheiro = open(caminho_ficheiro_historico_csv, 'w+', newline='')
ficheiroCSV = csv.DictWriter(ficheiro, fieldnames=cabecalho)
ficheiroCSV.writeheader()
ficheiro.close()
with open(caminho_ficheiro_historico_csv, 'r', newline='') as ficheiro_csv_historico_precos:
ficheiroCSV = csv.DictReader(ficheiro_csv_historico_precos)
lista_linhas_ficheiro_csv: list = []
for linha in ficheiroCSV:
lista_linhas_ficheiro_csv.append(linha)
# converter dados de coingecko para o formato usado no ficheiro CSV
lista_linhas_resposta: list = []
for linha_resposta in resposta.json():
nova_entrada: dict = {}
nova_entrada[cabecalho[0]] = str(linha_resposta[0])
nova_entrada[cabecalho[1]] = criptomoeda
nova_entrada[cabecalho[2]] = vs_currency
nova_entrada[cabecalho[3]] = str(linha_resposta[1])
nova_entrada[cabecalho[4]] = str(linha_resposta[2])
nova_entrada[cabecalho[5]] = str(linha_resposta[3])
nova_entrada[cabecalho[6]] = str(linha_resposta[4])
lista_linhas_resposta.append(nova_entrada)
# adicionar items de lista_linhas_resposta se não existirem em lista_linhas_ficheiro_csv (aka: adicionar apenas items novos a lista_linhas_ficheiro_csv)
for item_resposta in lista_linhas_resposta:
item_existe: bool = False
for linha_ficheiro_csv in lista_linhas_ficheiro_csv:
if (item_resposta == linha_ficheiro_csv):
item_existe = True
if not item_existe:
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)