emacs-w3m上で短縮URLを取得する – その1
emacs
|
comments(0) | 2009/09/05 12:52
Twitterを使用するようになってからTinyURLとかbit.ly使用する機会が増えたのでemacs上のw3mから簡単に短縮URLを取得できるように関数を作成しました。Twitter自体自動的にURLを短縮する機能を持っているようですけど。
この投稿については内容が更新されています。「emacs-w3m上で短縮URLを取得する – その2」の方を利用してください。
以下の関数を.emacsとかに書き込みます。
;; URLを短縮してkill-ringの中に入れる関数(TinyURLを使用バージョン ... API使用)
(defun shorten-url-tinyurl(url)
(let ((shorten-uri "http://tinyurl.com/api-create.php")
(url-request-method "POST")
(url-request-extra-headers
'(("Content-Type" . "application/x-www-form-urlencoded")))
(url-request-data (concat "url=" (url-hexify-string url))))
(url-retrieve shorten-uri
'(lambda (status cbargs)
(point-min)
(if (re-search-forward "\\(http://tinyurl.com/.+\\)" nil t)
(progn
(setq result-url (match-string-no-properties 1))
(kill-new result-url nil)
(message "Copy '%s' to ring, shorten %s" result-url cbargs)))
(kill-buffer (current-buffer)))
(list url))))
;; URLを短縮してkill-ringの中に入れる関数(bit.lyを使用バージョン ... API不使用)
(defun shorten-url-bitly (url)
(let ((shorten-uri "http://bit.ly")
(shorten-uri-get-regexp "id *= *\"shortened-url\" +value *= *\"\\(http://bit.ly/.+\\)\" +/>")
(url-request-method "POST")
(url-request-extra-headers
'(("Content-Type" . "application/x-www-form-urlencoded")))
(url-request-data (concat "url=" (url-hexify-string url))))
(url-retrieve shorten-uri
'(lambda (status cbargs)
(point-min)
(if (re-search-forward (car (cdr cbargs)) nil t)
(progn
(setq result-url (match-string-no-properties 1))
(kill-new result-url nil)
(message "Copy '%s' to ring, shorten %s" result-url (car cbargs))))
(kill-buffer (current-buffer)))
(list (list url shorten-uri-get-regexp)))))
;; 上をw3m上から使用するための関数
(defun my-w3m-shorten-url ()
(interactive)
(shorten-url-tinyurl ;; もしくは shorten-url-bitly
(or (w3m-url-valid (w3m-anchor))
(w3m-url-valid w3m-current-url))))
キーバインドとかは必要だったら適当にしてください。
(eval-after-load "w3m"
'(progn
;; w3m-mode-map key binds
(define-key w3m-mode-map "\C-cs" 'my-w3m-shorten-url)))
ちなみにTinyURLとbit.lyバージョンを用意しています。好きな方を選択してください。ただしbit.lyバージョンはAPIではなく通常のWebページから取得しているためWebページの改装等で使用できなくなる可能性があります。