Skip to content

Instantly share code, notes, and snippets.

@alvin2ye
Created June 24, 2011 01:03
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save alvin2ye/1044017 to your computer and use it in GitHub Desktop.
Save alvin2ye/1044017 to your computer and use it in GitHub Desktop.
upload image to imgur.bash
#!/bin/bash
# imgur script by Bart Nagel <bart@tremby.net>
# version 2
# I release this as public domain. Do with it what you will.
# Required: curl
#
# Optional: xsel or xclip for automatically putting the URL on the X selection
# for easy pasting
#
# Instructions:
# Put it somewhere in your path and maybe rename it:
# mv ~/Downloads/imgur.sh ~/bin/imgur
# Make it executable:
# chmod +x ~/bin/imgur
# Stick your API key in the top:
# vim ~/bin/imgur
# Upload an image:
# imgur images/hilarious/manfallingover.jpg
# The URL will be displayed (and the delete page's URL will be displayed on
# stderr). If you have xsel or xclip the URL will also be put on the X
# selection, which you can usually paste with a middle click.
# API Key provided by Alan@imgur.com
apikey="b3625162d3418ac51a9ee805b1840452"
# function to output usage instructions
function usage {
echo "Usage: $(basename $0) <filename>
Upload an image to imgur and output its new URL to stdout. Its delete page is
output to stderr.
If xsel or xclip is available, the URL is put on the X selection for easy
pasting." >&2
}
# check API key has been entered
if [ "$apikey" = "Your API key" ]; then
echo "You first need to edit the script and put your API key in the variable near the top." >&2
exit 15
fi
# check arguments
if [ "$1" = "-h" -o "$1" = "--help" ]; then
usage
exit 0
elif [ $# -ne 1 ]; then
if [ $# == 0 ]; then
echo "No file specified" >&2
else
echo "Unexpected arguments" >&2
fi
usage
exit 16
elif [ ! -f "$1" ]; then
echo "File \"$1\" not found" >&2
exit 1
fi
# check curl is available
which curl >/dev/null 2>/dev/null || {
echo "Couln't find curl, which is required." >&2
exit 17
}
# upload the image
response=$(curl -F "key=$apikey" -H "Expect: " -F "image=@$1" \
http://imgur.com/api/upload.xml 2>/dev/null)
# the "Expect: " header is to get around a problem when using this through the
# Squid proxy. Not sure if it's a Squid bug or what.
echo $response
if [ $? -ne 0 ]; then
echo "Upload failed" >&2
exit 2
elif [ $(echo $response | grep -c "<error_msg>") -gt 0 ]; then
echo "Error message from imgur:" >&2
echo $response | sed -r 's/.*<error_msg>(.*)<\/error_msg>.*/\1/' >&2
exit 3
fi
# parse the response and output our stuff
url=$(echo $response | sed -r 's/.*<original_image>(.*)<\/original_image>.*/\1/')
deleteurl=$(echo $response | sed -r 's/.*<delete_page>(.*)<\/delete_page>.*/\1/')
echo $url
echo "Delete page: $deleteurl" >&2
# put the URL on the clipboard if we have xsel or xclip
if [ $DISPLAY ]; then
{ which xsel >/dev/null 2>/dev/null && echo -n $url | xsel; } \
|| { which xclip >/dev/null 2>/dev/null && echo -n $url | xclip; } \
|| echo "Haven't copied to the clipboard: no xsel or xclip" >&2
else
echo "Haven't copied to the clipboard: no \$DISPLAY" >&2
fi
@x89
Copy link

x89 commented Dec 9, 2015

Made a few changes to echo the HTTPS as opposed to the HTTP URLs.
https://gist.github.com/x89/179b6a50fc3e4c4929fb

@tremby
Copy link

tremby commented Mar 4, 2016

The original version of this now has a new home at https://github.com/tremby/imgur.sh. Pull requests welcome.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment