Разработка URL Shortener - PullRequest
       17

Разработка URL Shortener

10 голосов
/ 01 ноября 2010

Я пытаюсь разработать приложение для сокращения URL для практики с Django. Я не понимаю, как я могу создать уникальные строки для каждого длинного URL-адреса для использования в качестве короткого URL-адреса. Нечто подобное делают другие популярные сокращатели URL. Как я могу это сделать? Можно ли сделать все короткие URL одинаковой длины?

Ответы [ 6 ]

12 голосов
/ 01 ноября 2010
  1. Я не понимаю, как я могу создать уникальные строки для каждого длинного URL-адреса для использования в качестве короткого URL-адреса.Что-то похожее на другие популярные сокращения URL.
    Как сказал Сугерман, это просто, вы просто создаете хеш-таблицу.* Как я могу это сделать?
    Существуют динамические способы сделать это, но самый простой и эффективный - иметь таблицу из 2 полей в базе данных, которая содержит хэш-ключ и полный URL-адрес.Тогда ваш сервер, как и Apache, сможет перенаправить на нужную страницу.

  2. Можно ли сделать все короткие URL одинаковой длины?
    Да, в определенной степени, однако, как только вы достигнете максимального количества ключей, вам придется повторно использовать / заменять короткие идентификаторы URL.Когда вы устанавливаете фиксированную длину, вы ограничиваете количество возможностей.

Мой вопрос к вам:

Я предполагаючто по URL shortener вы имеете в виду что-то вроде jsFiddle или pastebin, в котором они имеют что-то вроде http://jsfiddle.net/sdfj2/.В противном случае нам потребуются дополнительные разъяснения.

9 голосов
/ 01 ноября 2010

Возможно, вы захотите создать простую таблицу базы данных, отображающую короткое значение в URL.

Самый простой короткий URL-адрес, который вы можете сгенерировать, - это просто серийный номер или столбец автоинкремента (назначьте первое значение 1, затем 2 и т. д.)

Можно сделать все URL одинаковой длины до тех пор, пока у вас не закончатся значения одинаковой длины, например, если вы использовали только цифры (какпростой пример) это будет от 0000 до 9999.

Волшебная часть будет в том случае, когда вы будете использовать mod_rewrite для передачи URL-адреса в ваш скрипт в качестве параметра, чтобы ваше приложение просматривало значение в БД, а затемперенаправить пользователя.

Это правило перезаписи для mod_rewrite будет принимать URL-адрес, например example.com/0000, и перенаправлять на example.com/index.py?id=0000. Вы должны поместить его в .htaccess (япри условии, что вы используете apache.)

Ваше приложение просто считывает идентификатор и перенаправляет на связанную страницу.

RewriteRule ^([0-9]+)/?$ index.py?id=$1 [QSA,L]

Если вы решили использовать хеш или простой набор base64риальный номер (который был бы более компактным автоинкрементом), он бы выглядел немного иначе:

RewriteRule ^(.*)/?$ index.py?id=$1 [QSA,L]
3 голосов
/ 02 ноября 2010

Я написал пост в блоге, указанный выше.в основном, как я это сделал, было следующим:

Сохранить длинный URL-адрес в таблице с автоинкрементным индексным полем.Получить индекс.Преобразуйте его в строку так же, как в шестнадцатеричное или восьмеричное число, но используя все доступные символы в качестве возможных «цифр».Например, скажем, у нас есть az, AZ и 0-9, сделайте следующее:

0 = 0 1 = 1 ... 9 = 9 10 = a 11 = b ... 35 = z36 = A 37 = B ... 60 = Z 61 = 10 62 = 11 ... 70 = 19 71 = 1a 72 = 1b

Вы получили образец?Это универсальный алгоритм преобразования числа от base-10 до числа base-n, где n - количество символов в вашем распоряжении.

2 голосов
/ 01 ноября 2010
2 голосов
/ 01 ноября 2010

Возможно, вы захотите настроить хеш-функцию для генерации сокращенного URL.

Редактировать:

Вместосидите здесь и суммируйте довольно подробную статью для Википедии: вот ссылка на сообщение в блоге, объясняющее, как хеш-функции работают в зависимости от вашей конкретной темы (сокращения URL).

0 голосов
/ 12 апреля 2013

Вот мое мнение: https://github.com/bitmazk/django-tinylinks Один клиент использует это в производстве с одного года.

...