Encurtador de URL, geração de chaves em python


Ontem estava falando com um colega sobre geração de algo no formato dos encurtadores de URL atuais.
Algo pequeno e único, porém sequencial, para que não fosse necessário ficar verificando no banco a existência de uma chave randômica.

Claro, o que eu fiz é só uma função de teste, e serve para ver que a geração funciona, agora basta a você adaptá-lo ao seu programa caso queira utilizar.

Ainda, como não tenho trabalhado exclusivamente com Python, tenho muita lógica das simples na cabeça. Aquele vai e vem de IFs, e loops, e controles e tal.. mas funciona ! Só que no python sempre tem uma melhor forma de fazer as coisas. E se você sabe como melhorar meu script, poste a solução no comments ou me envie por email, que atualizerei no post. Ok !
Fica ai o desafio…

Ah, no script tem também um print mostrando quantas opções de chaves únicas será possível gerar com os caracteres disponíveis e a quantidade de casas da chave. Ou seja, funciona como nas placas de carro, temos neste caso 62 caracteres disponíveis e geraremos chaves de 5 casas, consequentemente poderemos gerar 916.132.832 chaves diferentes. Já dá bastante neh ! A conta é feita elevanto o numero de caracteres no numero de casas da chave: 62 elevado na 5 (62**5). Se aumentarmos um ou outro teremos mais e mais quantidades de resultados distintos possíveis de serem gerados.

E outro detalhe é que esta função gera resultados SEQUENCIAIS e não randômicos, e a chave disto tudo é a variavel ‘indices’, onde tenho guardado a posição atual de cada casa atualmente. Se você guardar esta variavel em algum lugar e depois reestabelecer seu valor o script funcionará perfeitamente do ponto onde parou. Ok !

Claro, isto é só a geração das chaves, se vc for fazer um encurtador de URL mesmo, necessitará mais do que isto.

#!/usr/bin/env python
"""
Gerador de strings equivalente aos encurtadores de URLs
"""

#Estas variáveis podem ser alteradas conforme desejarem
#Os caracteres possiveis
caracteres = 'A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z 1 2 3 4 5 6 7 8 9 0'.split()
#Quantidade de caracteres que terah a chave criada
tamanho = 5

print "Sera possivel gerar", len(caracteres) ** tamanho, "itens diferentes."

#=====================================================================================
#Esta variavel (indices) pode ser guardada e repassada para a função. Ela é o coração da função.
indices = [0 for x in xrange(0,tamanho)]

def gera(texto):
    '''Metodo que gera a chave alphanumerica sequencial'''
    global indices
    url = []
    proximo = False
    #passa o array de traz para frente, verificando se tem como aumentar.
    for x in xrange(tamanho-1, -1, -1):
        proximo = False
        indice = indices[x]
        indice+=1
        if indice >= len(caracteres):
            indice = 0
            proximo = True
            
        indices[x] = indice
        if not proximo:
            break;
    key = []
    for i in indices:
        key.append( caracteres[i] )
    return texto + ''.join(key)


#chamada de exemplo...
for u in xrange(0,7500):
    print gera('http://meu.url/')

Anúncios

One Comment

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

w

Conectando a %s