Resolução tendo como base a informações passadas na URL e em suas variações.
import re
class ExtratorURL:
def __init__(self, url):
self.url = self.sanitiza_url(url)
self.validacao_url()
def __str__(self):
return f'URL Completa: {self.url}\nBase da URL: {self.get_url_base()}\nParâmetros da URL: {self.get_url_parametros()}'
def __len__(self):
return len(self.url)
def __eq__(self, other):
return self.url == other.url
@staticmethod
def sanitiza_url(url):
if type(url) == str:
return url.strip()
else:
return ''
def validacao_url(self):
if not self.url:
raise ValueError('URL inexistente')
padrao_url = re.compile('(http(s)?://)?(www.)?[a-z]+.com(.br)?/[a-z]')
busca_url = padrao_url.match(self.url)
if not busca_url:
raise ValueError('A URL é inválida')
def get_url_base(self):
indice_barra = self.url.find('//')
indice_interrogacao = self.url.find('?')
url_base = self.url[indice_barra + 2: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_busca_parametro(self, parametro):
indice_parametro = self.get_url_parametros().find(parametro) + len(parametro) + 1
indice_e_comercial = self.get_url_parametros().find('&', indice_parametro)
if indice_e_comercial == -1:
return self.get_url_parametros()[indice_parametro:]
else:
return self.get_url_parametros()[indice_parametro:indice_e_comercial]
def conversor_de_moeda(self, cotacao):
moeda_origem = self.get_busca_parametro('moedaOrigem')
moeda_destino = self.get_busca_parametro('moedaDestino')
quantidade = int(self.get_busca_parametro('quantidade'))
if moeda_origem == moeda_destino:
raise ValueError('A moeda de origem não pode ser a mesma de destino.')
elif moeda_origem == 'real':
conversao = quantidade / cotacao
return f'Real: R$ {quantidade:.2f} -> Dólar: US$ {conversao:.2f}'
elif moeda_origem == 'dolar':
conversao = cotacao * quantidade
return f'Dólar: US$ {quantidade:.2f} -> Real: R$ {conversao:.2f}'
else:
raise ValueError('O conversor trabalha apenas com Real e Dólar')
url = ExtratorURL('http://bytebank.com/cambio?moedaOrigem=real&moedaDestino=dolar&quantidade=100')
url1 = ExtratorURL('http://bytebank.com/cambio?moedaOrigem=real&moedaDestino=dolar&quantidade=100')
print(f'Comparando dois objetos [url = url1]: {url == url1}')
print(f'Tamanho da URL: {len(url)}')
print(url)
busca = url.get_busca_parametro('moedaOrigem')
print(busca)
print(url.conversor_de_moeda(5.50))
# Troca de moedas origem e destino
url2 = ExtratorURL('http://bytebank.com/cambio?moedaOrigem=dolar&moedaDestino=real&quantidade=150')
print(url2.conversor_de_moeda(5.50))
# Troca das posições dos parâmetros da url
url3 = ExtratorURL('http://bytebank.com/cambio?quantidade=135&moedaDestino=real&moedaOrigem=dolar')
print(url3.conversor_de_moeda(5.50))