SiteMap Search ElispArea HowTo Glossary RecentChanges News Problems Suggestions

bitly.el

Download

;;;  bitly.el --- Shorten URLs with bit.ly from emacs
;;   Also available at https://gist.github.com/716717.
;; Copyright (C) 2010 Vivek Haldar
;;
;;  This program is free software; you can redistribute it and/or modify
;;  it under the terms of the GNU General Public License as published by
;;  the Free Software Foundation; either version 2 of the License, or
;;  (at your option) any later version.
;;
;;  This program is distributed in the hope that it will be useful,
;;  but WITHOUT ANY WARRANTY; without even the implied warranty of
;;  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
;;  GNU General Public License for more details.
;;
;;  You should have received a copy of the GNU General Public License
;;  along with this program; if not, write to the Free Software
;;  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
;;
;; Author: Vivek Haldar <vh@vivekhaldar.com>
;; Created: 27 November 2010
;;
;;; Commentary: 
;; bitly.el allows shortening URLs through the api the bit.ly service
;; provides. See http://code.google.com/p/bitly-api/ for info about
;; the tumblr.com api service.
;;
;; Installation:
;; You will need to register with bit.ly and get an API key. Customize
;; the variables bitly-username and bitly-api-key.
;;
;; Description:
;; Interactive functions:
;; bitly-shorten
;;     Shorten a URL (prompted for in the minibuffer) and insert at
;;     point.

(require 'url)

(defcustom bitly-username nil
  "Bitly username."
  :type '(choice
          (const :tag "none" nil)
          (string :tag "bitly_username"))
  :group 'bitly)

(defcustom bitly-api-key nil
  "Bitly API key."
  :type '(choice
          (const :tag "none" nil)
          (string :tag "bitly_api_key"))
  :group 'bitly)

(defvar bitly-api-url "http://api.bit.ly/v3/")

(defun bitly-shorten ()
  "Shorten a full URL using Bitly, and insert at point."
  (interactive)
  (setq longurl (read-from-minibuffer "URL:"))
  (let* ((apicall 
	  (concat bitly-api-url
		  (format "shorten?login=%s&apiKey=%s&longUrl=%s&format=txt"
			  bitly-username bitly-api-key longurl)))
	 (resultbuffer (url-retrieve-synchronously apicall)))
    (message "bitly url = %s" apicall)
    (bitly-strip-http-headers resultbuffer)
    (insert-buffer-substring resultbuffer)
    ))


(defun bitly-strip-http-headers (httpbuffer)
  "Strip headers from HTTP reply."
  (save-excursion 
    (set-buffer httpbuffer)
    (goto-char (point-min))
    (let ((endpt (search-forward "

")))
      (delete-region (point-min) endpt)
      ; we're still left with an extra newline
      (goto-char (point-max))
      (delete-backward-char 1)
      (insert-string " "))))

(provide 'bitly)