#!/bin/bash # Copyright (C) 2009 Bart Trojanowski # # 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 version 2 of the License. # # 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., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. needs_escape=true shrink_host=2tu.us test -f ~/.bti && source ~/.bti || test -f ~/.config/bti && source ~/.config/bti while test -n "$1" ; do word="$1" shift case "$word" in --escaped) needs_escape= ;; --help|-h) cat <] Currently supported: 2tu.us (default), bit.ly, j.mp. END exit 0 ;; *) URL=$word ;; esac done function convert_url() { local url=$1 test -n "$url" || return 1 test "${url%%:*}" = 'http' || return 1 local urllen="${#url}" # http://en.wikipedia.org/wiki/Percent-encoding if test -n "$needs_escape" ; then url=$(echo "$url" | sed -e 's/\%/%25/g' \ -e 's/!/%21/g' \ -e 's/*/%2A/g' \ -e "s/'/%27/g" \ -e 's/(/%28/g' \ -e 's/)/%29/g' \ -e 's/;/%3B/g' \ -e 's/:/%3A/g' \ -e 's/@/%40/g' \ -e 's/&/%26/g' \ -e 's/=/%3D/g' \ -e 's/+/%2B/g' \ -e 's/\$/%24/g' \ -e 's/,/%2C/g' \ -e 's,/,%2F,g' \ -e 's/?/%3F/g' \ -e 's/#/%23/g' \ -e 's/\[/%5B/g' \ -e 's/]/%5D/g') fi case $shrink_host in 2tu.us) local submit="http://2tu.us/?save=y&url=$url" local res=$(wget -q -O - "$submit" | awk -F"'" '/Your tight URL is:/ { print $2 }') ;; bit.ly|j.mp) if [ -z "$shrink_bitly_login" -o -z "$shrink_bitly_key" ]; then echo "To use $shrink_host you must set 'shrink_bitly_login' and 'shrink_bitly_key' in ~/.bti" >&2 exit 1 fi local submit="http://api.bit.ly/v3/shorten?format=txt&login=$shrink_bitly_login&apiKey=$shrink_bitly_key&domain=$shrink_host&longUrl=$url" local res=$(wget -q -O - "$submit") ;; *) echo "Shrinking with $shrink_host is not supported." >&2 exit 1 ;; esac if test "${res%%:*}" = 'http' -a "${#res}" -lt "$urllen" ; then echo $res return 0 fi return 1 } function die() { echo >&2 $@ exit 1 } if test -n "$URL" ; then convert_url "$URL" || die "Failed to shrink '$URL'" exit $? fi test -t 0 && echo >&2 "Type in some urls and I'll try to shrink them for you..." while read line ; do convert_url "$line" || echo $line done