Importações
import re
Classe ExtratorURL:
class ExtratorURL:
def __init__(self, url):
self.url = self.__sanitiza_url(url)
self.__valida_url()
# Declarando os GETTERS
@property
def moedaOrigem(self):
return self.get_valor_parametro("moedaOrigem")
@property
def moedaDestino(self):
return self.get_valor_parametro("moedaDestino")
@property
def quantidade(self):
return int(self.get_valor_parametro("quantidade"))
# Declarando métodos privados
def __sanitiza_url(self, url):
if type(url) == str:
return url.strip()
else:
return ""
def __valida_url(self):
if not self.url:
raise ValueError("A URL está 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.")
# Declarando os demais métodos
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
# Sobrescrevendo métodos build-in
def __len__(self):
return len(self.url)
def __str__(self):
separador = "==" * 20
titulo = "Extrator URL".center(40)
return f"\n{separador}\n{titulo}\n{separador}\n\tURL: {self.url} \n\tBase: {self.get_url_base()} \n\tParâmetros: {self.get_url_parametros()}"
def __eq__(self, other):
return self.url == other.url
Classe CalcularConversao:
class CalcularConversao(ExtratorURL):
def __init__(self, url):
super().__init__(url)
def calcular_valor_conversao(self):
if self.moedaOrigem == "real":
conversao = self.quantidade / VALOR_DOLAR
else:
conversao = self.quantidade * VALOR_DOLAR
return conversao
def __str__(self):
separador = "==" * 20
titulo = f"CONVERSOR {self.moedaOrigem.title()} -> {self.moedaDestino.title()}".center(40)
if self.moedaDestino == "real":
simbolo = "$"
else:
simbolo = "R$"
cabecalho = f"\n{separador}\n{titulo}\n{separador}"
parametros = f"""
Origem: {self.moedaOrigem}
Destino: {self.moedaDestino}
Quantidade: {self.quantidade}
"""
resultado_conversao = f"Resultado: {simbolo}{self.calcular_valor_conversao():.2f}"
return f"{super().__str__()}{cabecalho}{parametros}{resultado_conversao}"
Iniciando o programa:
# 1 dolar = 5.50 reais
VALOR_DOLAR = 5.50
# URL de conversão REAL -> DOLAR
url_real_dolar = "www.bytebank.com.br/cambio?moedaOrigem=real&quantidade=100&moedaDestino=dolar"
conversor_real_dolar = CalcularConversao(url_real_dolar)
print(conversor_real_dolar)
# URL de conversão DOLAR -> REAL
url_dolar_real = "https://bytebank.com/cambio?moedaOrigem=dolar&quantidade=50&moedaDestino=real"
conversor_dolar_real = CalcularConversao(url_dolar_real)
print(conversor_dolar_real)
Resultado:
========================================
Extrator URL
========================================
URL: www.bytebank.com.br/cambio?moedaOrigem=real&quantidade=100&moedaDestino=dolar
Base: www.bytebank.com.br/cambio
Parâmetros: moedaOrigem=real&quantidade=100&moedaDestino=dolar
========================================
CONVERSOR Real -> Dolar
========================================
Origem: real
Destino: dolar
Quantidade: 100
Resultado: R$18.18
========================================
Extrator URL
========================================
URL: https://bytebank.com/cambio?moedaOrigem=dolar&quantidade=50&moedaDestino=real
Base: https://bytebank.com/cambio
Parâmetros: moedaOrigem=dolar&quantidade=50&moedaDestino=real
========================================
CONVERSOR Dolar -> Real
========================================
Origem: dolar
Destino: real
Quantidade: 50
Resultado: $275.00