#!/bin/bash # # Post a link to a scuttle service. # # Thanks https://gist.github.com/cdown/1163649 function urlencode() { # urlencode old_lc_collate=$LC_COLLATE LC_COLLATE=C local length="${#1}" for (( i = 0; i < length; i++ )); do local c="${1:i:1}" case $c in [a-zA-Z0-9.~_-]) printf "$c" ;; *) printf '%%%02X' "'$c" ;; esac done LC_COLLATE=$old_lc_collate } # Parameters BASENAME="`basename $0`" URL="$1" TAGS="$2" shift 2 DESC="$*" TMP="${TMP:=/tmp}" # Syntax if [ -z "$TAGS" ]; then echo "usage: $BASENAME [description]" exit fi # Config source "$HOME/.custom/scuttle" || exit 1 # See http://www.wired.com/2010/02/using_the_delicious_api/ #CALL="$SCUTTLE_URL/api/posts/add?url=`urlencode $URL`" CALL="$SCUTTLE_URL/api/posts/add" # Tags TAGS="`echo $TAGS | sed -e 's/,/ /g'`" #TAGS="`urlencode "$TAGS"`" TAGS="`echo $TAGS | sed -e 's/%2C/,/g'`" #CALL="$CALL&tags=$TAGS" # Description if [ -z "$DESC" ]; then # See http://stackoverflow.com/questions/3195851/ddg#3195895 DESC="`torify curl -L -s $URL | grep -i "" | sed -n 's/.*<title>\(.*\)<\/title>.*/\1/ip;T;q' 2> /dev/null`" echo "Fetched description: $DESC" fi # Full API call #CALL="$CALL&description=`urlencode "$DESC"`" # Write config CONF="`mktemp -t scuttle.XXXXXXXXXX -p $TMP`" echo "url = $CALL" > $CONF echo "user = $SCUTTLE_USER:$SCUTTLE_PASS" >> $CONF # Remove trailing slash which might lead to urlencode errors by curl (dunny why) URL="`echo $URL | sed -e 's|/$||'`" # Call curl # See https://stackoverflow.com/questions/296536/how-to-urlencode-data-for-curl-command#2027690 #curl -s -K $CONF &> /dev/null curl -s -K $CONF -G --data-urlencode "url=$URL" --data-urlencode "tags=$TAGS" --data-urlencode "description=$DESC" &> /dev/null # Status STATUS="$?" # Teardown rm $CONF exit $STATUS