URL shortener

Discussion in 'Python' started by FK-, 4 May 2019.

  1. FK-

    FK- New Member

    Joined:
    25 Dec 2018
    Messages:
    20
    Likes Received:
    3
    Reputations:
    0
    Хочу сделать укорачиватель ссылок. Делаю на Python + Flask. С представительской частью проблем нет. Но вот с логикой есть.
    Я сейчас ищу материал о самом преобразовании длинной ссылки в короткую.
    Мои представления об этом
    1) Получить сслыку (проблем нет)
    2) Сгенерировать короткую версию (ПРОБЛЕМА)
    3) Проверить наличие в БД (проблем нет)
    4) Если нет - записать (проблем нет)
    5) Отдать юзеру (проблем быть не должно)

    Подскажите плез алгоритмы генерации коротких версий ссылки.
     
  2. barnaki

    barnaki Level 8

    Joined:
    2 Nov 2008
    Messages:
    669
    Likes Received:
    112
    Reputations:
    4
    не очень понятно что именно ты пытаешься сделать . если я правильно понял то сгеренировать короткую ссылку можно захешировав ее например в md5 . и потом брать из базы по хешу настоящую и подставлять ее. только вот зачем это все не очень пойму.
    но md5 это однонаправленное шифрование. если надо именно короткую отдавать то стоит посмотреть двунаправленные алгоритмы шифрования. насколько короткие хеши они генерируют.
    и расшифровывать потом на клиенте. только посмотреть насколько короткие хеши у них
    вот например js либа. шифруешь на питоне . разсшифровываешь на js. это если надо отдавать короткую. или например можно переписать все переходы по ссылкам с сайта и перенаправить их на твой обработчик который будет находить уже нужную ссылку и отправлять на нее.

    https://gist.github.com/jo/8619441
     
    #2 barnaki, 5 May 2019
    Last edited: 5 May 2019
  3. Игорь

    Игорь Member

    Joined:
    5 Sep 2006
    Messages:
    33
    Likes Received:
    8
    Reputations:
    0
    ID в базе + несколько символов, чтобы не подбирали
    id возможно в hex перегнать или еще какую-то систему исчесление > 10, тоже получим короткий результат
     
  4. lapitsky

    lapitsky New Member

    Joined:
    21 Feb 2012
    Messages:
    4
    Likes Received:
    0
    Reputations:
    0
    2) гугли хеширование
    - сделать преобразование ссылки по хешу, причем хеш не должен быть криптостойкий, поэтому длина хеша может быть 3-6 символов, то есть на выходе ссылка будет например yousite.ru/5zfdsw.
    - защита от совпадения хешей, простая проверка в базе по наличию схожей и последующему хешированию еще раз
    - для быстрой работы, база должна быть именно key:value хранилище
     
  5. Mexel

    Mexel Member

    Joined:
    22 Nov 2016
    Messages:
    20
    Likes Received:
    10
    Reputations:
    3
    Code:
    import hashlib
    import time
    
    forEncode = ''.join('https://forum.antichat.ru/', str(time.time()))
    # Солю поступившие данные (URL), дабы хэши не повторялись
    
    encodeUrl = hashlib.md5(forEncode.encode('utf-8')).hexdigest()
    # Хэширую в md5
    
    shortUrl = encodeUrl[:5]
    # Сохраняю первые 5 символов
    Дальше пиздуешь настраивать регулярку в конфигах, которая должна вызывать функцию обрабатывающую запрос на редирект, регулярка будет иметь логику *пять символов входящих в 0-9,a-z,A-Z*

    И не забудь, что есть такие урл на приложухи, как ftp://, tg://, ...
    Так что не зацикливайся на протоколе http/s, а бери в оборот и это
     
    FK- likes this.
  6. FK-

    FK- New Member

    Joined:
    25 Dec 2018
    Messages:
    20
    Likes Received:
    3
    Reputations:
    0
    Принял, спасибо)