No meu caso eu fixei os parâmetros que iria procurar na url, sendo que independiente do orden que eles se encontram na url eu sempre vou ter um array [moedaOrigem, moedaDestino, quantidade] e usei um loop para procurar os valores dos parámetros na url
Adicionei no init o valor da cotação do dolar, e o metodo que permite mudar o valor da cotação
import re
class ExtratorURL: def init(self,url): self.valordolar = 5.50 self.url = self.sanitizaurl(url) self.valida_url()
@property
def valor_dolar(self):
return self._valor_dolar
def set_valor_dolar(self, valor_dolar):
self._valor_dolar = valor_dolar
# Apaga espaços brancos da URL
def sanitiza_url(self, url):
return url.strip() if type(url) == str else ""
# Validad que a URL seja True
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")
# Retorno a base da URL
def get_url_base(self):
return self._url[:self._url.find("?")]
# Retornas os parâmetros da URL
def get_url_parametros(self):
return self._url[self._url.find("?"):]
# Procura os parâmetros e retorna a lista dos valores
def get_valor_parametro(self):
url_parametros = self.get_url_parametros()
if len(url_parametros) > 0:
parametro_busca_list = ["moedaOrigem", "moedaDestino", "quantidade"]
parametro = []
for parametro_busca in parametro_busca_list:
indice_parametro = url_parametros.find(parametro_busca)
indice_valor = indice_parametro + len(parametro_busca) + 1
indice_e_comercial = url_parametros.find("&", indice_valor)
valor = url_parametros[indice_valor:] if indice_e_comercial == -1 \
else url_parametros[indice_valor: indice_e_comercial]
parametro.append(valor)
return parametro
def conversao(self):
dados = self.get_valor_parametro()
if dados[0].lower() == "real" and dados[1].lower() == "dolar":
valor = int(dados[2])/self.valor_dolar
print(f"A taxa de conversão é de $1 = R$ {self.valor_dolar}\n"
f"O valor de R$ {dados[2]} é igual a $ {valor}")
elif dados[0].lower() == "dolar" and dados[1].lower() == "real":
valor = int(dados[2]) * self.valor_dolar
print(f"A taxa de conversão é de $1 = R$ {self.valor_dolar}\n"
f"O valor de $ {dados[2]} é igual a R$ {valor}")
else:
print(f"O câmbio de {dados[0]} para {dados[1]} não está disponível")
extrator_url = ExtratorURL("https://bytebank.com/cambio?moedaOrigem=dolar&moedaDestino=real&quantidade=100") valor_quantidade = extrator_url.get_valor_parametro() extrator_url.conversao()