Dei uma solução dentro da mesma classe, sem comparar origem / destino, apenas ligando para origem e destino fixo Real...
import re
class ExtractorUrl:
def __init__(self, url):
self.url = url.strip() if type(url) == str else ''
self.valida_url()
def __len__(self):
return len(self.url)
def __str__(self):
return f'Url parametros: {self.url_parametros}\n' \
f'Url completa: {self.url_base}'
def __eq__(self, other):
return self.url == other.url
def valida_url(self):
if not self.url:
raise ValueError("Url vazia.")
padrao_url = re.compile('(http(s)?://)?(www.)?bytebank.com(.br)?/cambio')
match = padrao_url.match(self.url)
if not match:
raise ValueError("Url inválida")
def conversor(self):
cotacao = 0
quantidade = self.buscar_parametro('quantidade')
origem = self.buscar_parametro('moedaOrigem').title()
destino = self.buscar_parametro('moedaDestino').title()
if origem == 'Dolar':
cotacao = 5.5
elif origem == 'Euro':
cotacao = 6
elif origem == 'Bitcoin':
cotacao = 100000
else:
raise ValueError("Não reconheço essa moeda.")
return f'O valor convertido de {quantidade} {origem} para {destino} é R${float(quantidade) * cotacao:.2f}.'
@property
def url_base(self):
indice_interrogacao = self.url.find('?')
url_base = self.url[:indice_interrogacao]
return url_base
@property
def url_parametros(self):
indice_interrogacao = self.url.find('?')
url_parametros = self.url[indice_interrogacao + 1:]
return url_parametros
def buscar_parametro(self, parametro_busca):
# Busca o valor de um parâmetro
indice_parametro = self.url_parametros.find(parametro_busca)
indice_valor = indice_parametro + len(parametro_busca) + 1
indice_e_comercial = self.url_parametros.find('&', indice_valor)
if indice_e_comercial == -1:
valor = self.url_parametros[indice_valor:]
else:
valor = self.url_parametros[indice_valor:indice_e_comercial]
return valor
site1 = ExtractorUrl('www.bytebank.com/cambio?quantidade=100&moedaOrigem=euro&moedaDestino=real')
site2 = ExtractorUrl('www.bytebank.com/cambio?quantidade=500&moedaOrigem=dolar&moedaDestino=real')
print(len(site1))
print(site1)
print(site1 == site2)
print(site1.conversor())