Dividi meu código em 3 arquivos, um main (principal), extrator_url e outro para consulta_contação:
extrator:
import re
class ExtratorURL:
def __init__(self, url):
self.url = self.sanitiza_url(url)
self.valida_url()
def sanitiza_url(self, url):
return url.replace(' ', '')
def valida_url(self):
if not self.url:
raise ValueError('A URL não pode ser vazia')
padrao_url = re.compile("(http(s)?://)?(www.)?bytebank.com(.br)?/cambio")
match = padrao_url.match(self.url)
if not match:
raise ValueError("A URL não é válida.")
def get_url_base(self):
indice_interrogacao = self.url.find('?')
url_base = self.url[:indice_interrogacao]
return url_base
def get_url_parametros(self):
indice_interrogacao = self.url.find('?')
url_parametros = self.url[indice_interrogacao + 1:]
return url_parametros
def get_valor_parametro(self, parametro_busca):
indice_parametro = self.get_url_parametros().find(parametro_busca)
indice_valor = indice_parametro + len(parametro_busca) + 1
indice_e_comercial = self.get_url_parametros().find('&', indice_valor)
if indice_e_comercial == -1:
valor = self.get_url_parametros()[indice_valor:]
else:
valor = self.get_url_parametros()[indice_valor:indice_e_comercial]
return valor
def __str__(self):
return self.url
def __len__(self):
return len(self.url)
def __eq__(self, other):
return self.url == other.url
Consulta cotação
import requests
class CotacaoAtual:
def __init__(self, moedaOrigem, moedaDestino):
self._moeda_origem = moedaOrigem
self._moeda_destino = moedaDestino
def requisicao_api(self):
resposta = requests.get(
f'https://economia.awesomeapi.com.br/json/last/{self._moeda_origem}-{self._moeda_destino}')
if resposta.status_code == 200:
return resposta.json()
else:
return resposta.status_code
def get_valor_cotacao(self):
dados_cotacao = self.requisicao_api()
if type(dados_cotacao) is not int:
cotacao = float(
dados_cotacao[f'{self._moeda_origem}{self._moeda_destino}']['low'])
return cotacao
else:
return dados_cotacao
def get_valor_convertido(self, valor):
dados_cotacao = self.requisicao_api()
if type(dados_cotacao) is not int:
cotacao = float(
dados_cotacao[f'{self._moeda_origem}{self._moeda_destino}']['low'])
valor_convertido = valor * cotacao
return valor_convertido
else:
return dados_cotacao
def __str__(self):
return f'A Cotação atual é 1 {self._moeda_origem} = {self.get_valor_cotacao()} {self._moeda_destino}'
main
from extrator import ExtratorURL
from consulta_cotacao import CotacaoAtual
url = "bytebank.com/cambio?moedaOrigem=USD&moedaDestino=BRL&valor=100"
extrator_url = ExtratorURL(url)
moeda_origem = extrator_url.get_valor_parametro('moedaOrigem')
moeda_destino = extrator_url.get_valor_parametro('moedaDestino')
valor = float(extrator_url.get_valor_parametro('valor'))
cotacao_dolar_real = CotacaoAtual(moeda_origem, moeda_destino)
print(cotacao_dolar_real)
print(f'{valor} {moeda_origem} = {cotacao_dolar_real.get_valor_convertido(valor)} {moeda_destino}')