1
resposta

Meu extrator de URL

Decidi fazer o código por conta com o que aprendi até aqui. Senti dificuldade em fazer as funções compartilharem seus resultados e acabei chamando as funções que geram variáveis compartilhadas no construtor e atribuindo seus returns ao self. Não sei se devo usar um @property nesse caso. Achei bagunçado mas não consegui pensar em maneira melhor de fazer. Gostaria de algumas dicas se puderem ajudar.

A minha função pede como parametros não somente a url mas também a lista de caracteres a separar. No exemplo do exercício, estes caracteres são ['?', '&', '='], por isso coloquei mais um validador. E nas funções get também temos mais duas, uma get_separador_base que retorna o indice do separador entre a base e os parametros na url. E outra get é a get_valores_e_parametros que retorna uma lista com os parametros e os valores na ordem em que aparecem na url.

class ExtratorUrl:
    def __init__(self,url, lista_de_separadores):
        self.separadores = lista_de_separadores
        self.url = self.sanitiza_url(url)
        self.valida_url()
        self.valida_separadores()
        self.indices_a_recortar = self.lista_a_recortar()



    def sanitiza_url(self,url):
        return url.strip()

    def valida_url(self):
        if self.url == "":
            raise ValueError('A URL está vazia')

    def valida_separadores(self):
        l = []
        for caractere_separador in self.separadores:
            caractere_na_url = caractere_separador in self.url
            l.append(caractere_na_url)
        if not any(l):
            raise ValueError("A URL não contém nenhum dos caracteres listados")

    def lista_a_recortar(self):
        indices_a_recortar = []
        for i in range(0,len(self.url)):
            if self.url[i] in self.separadores:
                indices_a_recortar.append(i)
        return indices_a_recortar

    def get_separador_base(self):
        separador_base = self.lista_a_recortar()[0]
        return separador_base

    def get_url_base(self):
        url_base = self.url[:self.get_separador_base()]
        return url_base

    def get_url_parametros(self):
        url_parametros = self.url[self.get_separador_base() + 1:]
        return url_parametros

    def get_valores_e_parametros(self):
        lista_recortar = self.lista_a_recortar()
        lista_valores_e_parametros = []
        for recorte in range(1,len(lista_recortar)):
            item = self.url[lista_recortar[recorte - 1] + 1:lista_recortar[recorte]]
            lista_valores_e_parametros.append(item)
        ultimo_recorte = lista_recortar[len(lista_recortar) - 1]
        ultimo_item = self.url[ultimo_recorte + 1:]
        lista_valores_e_parametros.append(ultimo_item)
        return lista_valores_e_parametros








url = "bytebank.com/cambio?quantidade=100&moedaOrigem=real&moedaDestino=dolar"
lista = ['?','&', '=']

teste = ExtratorUrl(url, lista)
print(teste.get_url_base())
print(teste.get_url_parametros())
print(teste.get_valores_e_parametros())
1 resposta
O post foi fechado por inatividade após 3 meses.

Para continuar o assunto, recomendamos criar um novo tópico. Bons Estudos!