pythongeneratorbit.lyword-list

Python bit.ly link wordlist generator


I've been developing a Python tool to generate a bit.ly wordlist. Here are the particularities of bit.ly links:

I already did the first 3 conditions, but I can't find a way to do the last.

from itertools import product

def firstN(chars, length):
    for firstNumber in product(chars, repeat=length):
        yield ''.join(firstNumber)

def combiwords(chars, length):
    for letters in product(chars, repeat=length):
        yield ''.join(letters)

def lastL(chars, length):
    for lastLetter in product(chars, repeat=length):
        yield ''.join(lastLetter)

def main():
    firstNumber = "32"
    letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
    lastLetter = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"

    for wordlen1 in range(1, 2):
        for first in firstN(firstNumber, wordlen1):
            for wordlen2 in range(6, 7):
                for combo in combiwords(letters, wordlen2):
                    for wordlen3 in range(1, 2):
                        for word in lastL(lastLetter, wordlen3):
                            print('https://bit.ly/' + first + combo + word)

if __name__=="__main__":
    main()

Solution

  • Solution

    I wrote a couple of functions which can solve your problem:

    import random
    import string
    
    def generate_alphanumeric_string_without_sequential_repetitions():
        # string.ascii_lowercase means 'abcdefghijklmnopqrstuvwxyz'. If you need it to be case unsensitive, change this to string.ascii_lowercase
        allowed_letters = string.ascii_lowercase
        allowed_chars = allowed_letters + '0123456789'
        
        result = random.choice(allowed_chars) # init first char of the sequence
        
        # generate characters (which must be alphanumeric) in positions [1,5]
        for i in range(1, 5):
            random_char = random.choice(allowed_chars)
            
            # avoid sequential repetitions by re-generating a char if is the same of the previous one
            while random_char == result[i-1]:
                random_char = random.choice(allowed_chars)
            
            result = result + random_char
            
        # generate last char (which must be a letter)
        last_char = random.choice(allowed_letters)
        
        # avoid sequential repetitions by re-generating last char if is the same of the previous one
        while last_char == result[-1]: # result[-1] is a trick in python for getting the last char of a string
            last_char = random.choice(allowed_letters)
    
        return result + last_char
    
    
    def generate_string():
        return str(random.randint(0, 9)) + generate_alphanumeric_string_without_sequential_repetitions()
    

    Results

    With the following code executed

    random.seed(10)
    
    result = list()
    
    for i in range(0, 10):
        result.append(generate_string())
        
    print(result)
    

    I've had the following result:

    ['9c14ano', '7rkc75k', '1pxc0it', '5y0sq3f', '4xi3p2t', '6capimj', '8xpu92n', '7eu6kon', '3c5te8c', '2yxjhgo']
    

    If you have any questions, just ask in the comments. I hope it helped!