Как стать автором
Обновить

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

Время на прочтение2 мин
Количество просмотров2.6K
Небольшой скрипт для приведение 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
Комментарии21

Публикации