Видео смотреть бесплатно

Смотреть казахский видео

Официальный сайт pepsilight 24/7/365

Смотреть видео бесплатно

uscr 01.08.2012 15:08

Мой OpenSource проектСокращатель ссылок.

Вступление


Здравстувйте! Давно уже меня мучал вопрос: "да как же на этом самом питоне пишутся сайты?!". Нет, я знал про django и знал даже о том, что документация переводится на русский, но попробовать руки всё не доходили. Однажды мне приспичило сократить неприлично длинную ссылку на корпоративную вики. Гугл пнул меня на сокращатель ссылок, который отказал мне по той причине, что не смог получить доступа к ресурсу. Да, потом я нашёл сокращатель, который без вопросов сократил ссылку "как есть", но мысль уже появилась. Цели создания своего велосипеда были следующими:

Поэтому, принимается критика по коду, но не по функционалу.

Брифинг


Итак, перейдя по адресу cutcut.ru можно невозбранно ввести любой текст (длинее 9 и короче 1001 символа) и получить сокращённую ссылку. "Любой текст" - это действительно любой текст. Парсер определит, была ли введена ссылка или простой текст. У парсера бывают проблемы с детектером ссылок, потому как я не смог нагуглить адекватную регулярку, а самому думать было лень, то ссылка детектится такой регуляркой: (www.|http:\/\/|https:\/\/|^)[\w\s\-\/\._]+\.{1}[a-zA-z]{2,3}($|\/), а она не совершенна. Если вы ввели ссылку, то при переходе по сокращённой ссылке случится редирект, если простой текст - отобразится страница с введённым текстом. Имеются пасхалки:

Попытайтесь сократить слово "фонтан". Пасхалка сворована с некоего ресурса со смешными картинками, о котором нет нужды говорить.

Нажмите кнопку "Обрежь!" не вводя в форму ничего (это скорее не пасхалка, а обработка ошибки, да).

Под капотом


После ввода строки в форму она проходит тучу if'ов, дабы отсечь слишком короткие, слишком длинные и т.д. строки. Далее попытка задедектить ссылку. Если ссылка определилась, к ней дописывается http:// (если ещё нет) и меняется значение переменной, определяющей тип записи. Теперь вычисляется md5 от строки. Если такая строка уже есть в базе, пользователю отдаётся уже существующая ссылка. Если в базе строка не нашлась - создаётся запись. Теперь от записи берётся id в базе, по нему вычисляется идентификатор (hex(rec.id)[2:]) и запись апдейтится, к ней дописывается идентификатор, а пользователю отдаётся ссылка вида: cutcut.ru/a/id.

При переходе по ссылке id ищется в базе. Если находится, то из базы дёргается вся информация о записи. Если ссылка - редирект. Если простой текст - отображается текст.

Вот так выглядит ссылка на welinux.ru: cutcut.ru/a/1L

А так отобразится простой текст: cutcut.ru/a/2L

Мне не удалось найти более подходящего блога, поэтому пришлось писать сюда. Ну а раз уж блог называется: "Мой OpenSource проект", то вот вам исходники:
github

P.S. Сегодня торжественно добавил бекап этой БД в скрипт-бекапилку. Так что сайтом можно даже смело пользоваться по назначению - ссылки не сгинут вместе с жёстким диском моего сервачка.

P.P.S. Регулярка заинтересовала всех больше всего :) Нет нужды терзать сайтик. Можно на rubular.com потренироваться.

P.P.P.S. Челый час на гитхабе валялись все явки-пароли. Спасибо le087 за бдительность.


Тэги: django сокращатель
+ 8 -
Похожие Поделиться

elbahek 01.08.2012 16:23 #
+ 1 -
гмм... ну регулярку можно было бы и поизящнее,
например:
/(?:https?:\/\/)?(?:www\.)?([a-z0-9]*\.[a-z0-9]{2,3}(?:\/.*)?)/i
или вообще нагуглить решение
dieformetal 01.08.2012 17:08 #
+ 1 -
Фраза "Познакомится с джангой" подразумевает, что применение костыля входило в условие задачи.
dieformetal 01.08.2012 17:10 #
+ 0 -
Кстати, "Познакомиться с джангой"
uscr 01.08.2012 17:11 #
+ 0 -
Ну... Регулярка не имеет отношения к джанге. А проблема в том, что регулярки я писать тоже не умею.
elbahek 01.08.2012 17:29 #
+ 3 -
давай распишу
/
(?:https?:\/\/)? # (http(s 0 или 1 раз)://) 0 или 1 раз #
(?:www\.)? # (www.) 0 или 1 раз
([a-z0-9]*\.[a-z0-9]{2,3}(?:\/.*)?) # остальной кусок урла, который я, блин, написал без учета поддоменов, сорри #
/i
модификатор "i" = пофиг на регистр
"?:" в начале скобок - значит, что совпадение в скобках не попадает в карман. Фактически, в карман попадет все после http://www.
uscr 01.08.2012 17:33 #
+ 0 -
Спасибо. Читать то регулярки я умею :)
У меня с написанием проблемы. Такой вот парадокс (или нет?).
elbahek 01.08.2012 17:31 #
+ 0 -
ну я, в общем, тоже не умею. Говорят, что только Ларри Уолл знает дзен :)
uscr 01.08.2012 17:34 #
+ 2 -
У программиста была проблема. Он решил избавиться от неё с помощью регулярных выражений...
elbahek 01.08.2012 17:36 #
+ 0 -
в точку :)))
xT 22.08.2012 02:42 #
+ 0 -
вообще, как бы urlparse
kstep 01.08.2012 18:45 #
+ 0 -
В «пасхалке» про «Ничто» практически все ссылки на википедию битые. Поправь, пожалуйста.
uscr 01.08.2012 18:58 #
+ 0 -
Поправил. Нет идей, как оно сломалось.
kstep 01.08.2012 18:49 #
+ 0 -
Да, и ссылки-примеры в статье тоже битые.
uscr 01.08.2012 18:58 #
+ 0 -
Уже нет.
kstep 01.08.2012 18:50 #
+ 1 -
И может сырцы лучше на гитхаб?
uscr 01.08.2012 18:59 #
+ 0 -
А нужно? Я репозиторий буду создавать дольше, чем это всё пишется с нуля.
le087 01.08.2012 22:09 #
+ 1 -
нэ? издеваешься? что может быть проще, чем открыть реп на гитхабе и запушить туда весь свой код? Да и другим свои наработки проще раздавать.. давай на гитхаб). Меня твой tar.gz опечалил, и мне лень его качать и разархивировать.
uscr 01.08.2012 22:48 #
+ 0 -
Ладно, ладно. Только теперь в пятницу вечером я окажусь у компа. Просто у меня есть свой git с контролем доступа и кучей репозиториев. Поэтому, мне проще паковать таргз после правок, чем следить, в какой репозиторий я пушу.
le087 03.08.2012 19:57 #
+ 0 -
Питница! Вечер! =) хде? %)
uscr 03.08.2012 20:09 #
+ 0 -
На 10 минут опоздал я :)
uscr 03.08.2012 20:09 #
+ 0 -
Ой. Вот: github.
uscr 03.08.2012 21:48 #
+ 0 -
Ссылка мёртва.
Так надо: github
uscr 04.08.2012 10:48 #
+ 0 -
Опять умерла. github.
kstep 22.08.2012 16:21 #
+ 0 -
Зачем *.pyc в репе?
kstep 22.08.2012 16:22 #
+ 1 -
Не стрёмно секретные ключи палить в settings.py?
uscr 22.08.2012 17:14 #
+ 1 -
Там ещё и пароли были. Невнимательность, знаете ли.
xT 22.08.2012 02:44 #
+ 1 -
До кучи, ссылка на мой сокращатель со звучным русским именем zae.bz : ) : )

быдло-говно-код, поэтому исходников нет : )

p.s. ruby\sinatra\mongodb
mult 14.10.2012 07:14 #
+ 0 -
я когда-то тоже написал свой укорачиватель на perl+mysql: weeg.ru. если кому интересно. есть желание переписать его на rails, когда-таки разберусь с рельсами.
cppmm 14.10.2012 12:32 #
+ 0 -
А я бы с удовольствием посмотрел на сырцы. Именно "перловые", руби не моё.
mult 15.10.2012 05:36 #
+ 0 -
как вычищу от хлама, дам посмотреть :-)
но шедевров там не наблюдается :-)
ferary3230 13.10.2013 12:41 #
+ 0 -
Urlc.ru работает с кириллицей, сокращатель ссылок РФ, Инструменты API

В хорошем качестве hd видео

Онлайн видео бесплатно


Смотреть русское с разговорами видео

Online video HD

Видео скачать на телефон

Русские фильмы бесплатно

Full HD video online

Смотреть видео онлайн

Смотреть HD видео бесплатно

School смотреть онлайн