Конвертация длинных ссылок в короткие

Небольшой скрипт для приведение URL в емаксе в приличный вид. Работает через сервис bit.ly.

Интерфейс представлен функцией short-url-dwim. Если она вызвана, когда курсор находится над URL (указания протокола требуется), то URL заменяется на короткую ссылку. В другом случае будет предложено ввести URL в минибуфере, короткая ссылка будет вставлена на место курсора.
Сообщения об ошибках выводятся в минибуфере.

Код скрипта:


(defvar short-url-user "emacsshorturl")
(defvar short-url-apiKey "R_ac13b2e481b5a73db361ddfa1430fef5")

(defun short-url (url place-url)
(unless url (error "Url is nil"))
(let ((reply (replace-regexp-in-string
"\n" ""
(shell-command-to-string
(concat "curl --url \"api.bit.ly/shorten\" -F version=\"2.0.1\" -F"
"longUrl=\"" url "\""
" -F login=\"" short-url-user
"\" -F apiKey=\"" short-url-apiKey
"\" 2> /dev/null")))))
(when (string-match ".*\"errorMessage\": \"\\([^\"]+\\)\".*" reply)
(error (concat
"ERROR: "
(replace-regexp-in-string
".*\"errorMessage\": \"\\([^\"]+\\)\".*"
"\\1" reply))))
(let ((shortUrl (replace-regexp-in-string
".*\"shortUrl\": \"\\([^\"]*\\)\".*"
"\\1" reply)))
(when place-url
(delete-region (car place-url) (cdr place-url)))
(insert shortUrl))))

(defun short-url-dwim ()
(interactive)
(let ((bounds-url (bounds-of-thing-at-point 'url)))
(if bounds-url
(short-url (thing-at-point 'url) bounds-url)
(short-url-user-url (read-from-minibuffer "URL: ")))))

(provide 'short-url)

Установка и настройка


Код необходимо поместить в файл c именем «short-url.el» в вашу load-path папку. Далее в .emacs поместить следующий код:

(require 'short-url)

Крайне рекомендую зарегистрироваться на bit.ly и настроить скрипт на свой аккаунт. Для этог есть как минимум 2 причины:
  • У вас будет статистика посещения ваших ссылок.
  • У вас ничего не отвалится, если что-то изменится с аккаунтом установленным по умолчанию.

Для этого допишите в .emacs следующее:

(setq short-url-user <Ваш логин>)
(setq short-url-apiKey <Ваш apiKey>)
–3
9 июля 2009, 18:53
2
ryukzak 7,0

комментарии (21)

0
vkovall #
Отличный пост) Смотрю Emacs с разных сторон, забавная штука которой много лет, но что на столько она расширяемая я себе не представлял.)
0
Vyazovoi #
Emacs это интерпретатор языка программирования elisp — чему тут удивляться, тут и irc/jabber/почта есть.
0
ryukzak #
И тетрис с психоаналитиком(doctor если память не изменяет)…
0
Vyazovoi #
Ещё текстовый квест: dunnet (в emacs 23.x — builtin)
0
ryukzak #
Вот такая вот забавная была у него как-то ревизия bit.ly/sHJAM
Спасибо
0
Vyazovoi #
В twit.el есть свой сокращатель:

(defun compress-url (url)
  "Compress a URL using is.gd."
  (let* ((returned-request
           (car (twit-parse-xml
                 (concat "http://is.gd/api.php?longurl=" url) "GET")))
          (url-idx (string-match "http://" returned-request 160))
          (compressed-url
           (if url-idx
               (substring returned-request url-idx -1)
               "is.gd is down :(")))
       compressed-url))


Принимает url в качестве аргумента
0
ryukzak #
Есть много аналогов, но вот для битли я не видел. А его я выбрал просто по историческим причинам.

Использую twitter.el, по этому не охота тянуть кучу всего остального.
0
Vyazovoi #
Зачем же тянуть, эту функцию можно и в twitter.el использовать, и без твиттера.
0
vkovall #
Удивление вот почему — я слышал про lisp, смотрел как на нем пишут, но сам не пробовал. Когда пришел ко мне первый мак я поверхностно все изучил. А сейчас все более глубже изучаю) И как коснулся текстового редактора — а их такое множетво и комбайном среди них Emacs стоит. Да еще и видеокурс поглядел — фантастика, почему раньше не пробовал не знаю)) Спасибо, отличная среда и ваш пост)
0
ryukzak #
Если не секрет какой лисп пробуете? А вообще чудесный язык, после курсового по приложениям к базам данных с написанием своего dsl (по крайней мере некоторого подобия dsl) на макросах для описания графического интерфейса, стало как-то грустно писать на других языках. Хотя и синтаксис в нём жестокий.

Не забывайте про второй правильный редактор — vim. Быть модет вам он больше подойдёт. (а по возможностям примерно одно и тоже)
0
vkovall #
На самом деле я когда-то пытался запустить и честно найти документацию по нему — в то время ничего не смог найти( Слышал, что в AutoCAD используется) Использую несколько редакторов под *nix — наипростейший nano (приглянулся из-за простоты), vim и emacs. Правда с первыми 2 быстро подружился, а вот с комбайном сложнее)) Но в последние несколько недель все чаще стараюсь использовать) Курсовые в свое время я писал на VB еще первом под DOS) Вполне успшно сдавались, а потом научился на С — вот до некоторого момента другого ничего не пробовал, а сейчас у меня на повесте Ruby и RoR).
0
ryukzak #
Да и сейчас пожалуй наиболее вменяемой документацией на русском по нему является вот этот незаконченный перевод. bit.ly/1nPYnD + стандарт (речь о комон лисп)

Как говорят руби, это для тех кто не осилил лисп. На сколько это утверждение верно сказать трудно, но их объединяет то, что в обоих есть хорошо выверенное концептуальное единство.
0
vkovall #
НУ я б не сказал кто не осилил)) Это скажем так две разные вещи) Руби — объекты) Лисп (насколько я представляю) списки)) Но и тот и другой великолепны каждый по своему))
0
ryukzak #
Но в отношение синтаксиса, оно пожалуй обосновано. С лиспом тут всё довольно глухо.

Лисп это единство данных и кода. + функционалы. Есть кстати CLOS, очень специфичная реализация ооп, по началу использовать её фишки очень трудно, но потом их начинает не хватать. Вообще есть мнение, что это не какое не ооп (хотя и очень похоже), а система с автоматическим формированием методов. Там центральное место занимают функции, которые воздействуют на объекты, а не объекты, которые делают то, что им сказано.
0
vkovall #
Хм) О клосе тоже слышал, но не находил рабочей реализации среды. Пробовал eifel — но ничего толком тоже не нашел. Когда читал про ООП Буча, долго искал нормальную реализацию. Потом были паттерны — тепепрь на основании этого постигаю Дао и Джен Ruby и скриптовых языков вообще. Сервера мои выполняют часть нужных действий под powershell) Так что я использую скрипты давненько и они мне все больше нравятся. Вот пару дней назад достал опять .Net думаю повторить. А вот Lisp и аналогичную экзотику тяжковато мне осилить((
0
ryukzak #
sbcl, clisp. Первый считается лучше по производительности, второй дружелюбнее. А в теории, подойдёт любая реализация поддерживающая common lisp. Если всё-таки решитесь опробовать, то slime как среда пожалуй лучший выбор (модуль для емакса).
0
vkovall #
А скачать попробовать где? Среда аналогичная Netbeans, VS есть? Или просто собирать в текстовых редакторах, а потом скармливать?
0
ryukzak #
slime прикручивается к емаксу. Скачать common-lisp.net/project/slime/
У меня настраивается так
(add-to-list 'load-path "~/.emacs.d/slime")
(setq inferior-lisp-program "/opt/local/bin/sbcl"); адрес к бинарнику
(require 'slime)
(slime-setup)
(setf slime-net-coding-system 'utf-8-unix)

Сам sbcl тут sbcl.sourceforge.net/
Но под никсы лучше ставить с пакетов (под винду тоже есть, но как настраивать совсем не знаю)

Как проще всего это попробовать и под это разрабатывать почитайте тут: bit.ly/18vsVt Всё делается из емакса
0
vkovall #
Спасибо большое))
0
vkovall #
Еще пробовал tcl/tk и с недавних пор к python присматриваюсь))
0
ryukzak #
Для лиспа есть модуль ltk. Сильно аскетичный, с плохой документацией. Именно для описания интерфейсов на нём dsl делал. Если интересно могу оформить и выложить.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.