A Script to take Screenshots and upload them.

Requirements:

  • scrot
  • zenity
  • ruby
  • curl
  • omploader script – listed below

Yeah looking at that list, it doesn’t seem as lightweight as a CLI script should, but I think I had everything installed anyway when I put it together.

Script in action:

Call the script...

Call the script...


Choose whether to \'ompload\' or not...

Choose whether to 'ompload' or not...


Screen shot is taken and is uploaded...

Screen shot is taken and is uploaded...


All done! Link is shown in console...

All done! Link is shown in console...


This is the script which takes the screenshot, asks whether to upload, and moves shots to ~/Pictures/Screens/

#!/bin/bash

zenity --question --title "Omploader" --text "Upload to Omploader?"
# automatically.
if [ "$?" = "0" ]; then
   echo 'uploading to omploader'
   scrot '%d-%m-%Y-%T_$wx$h.png' -e '~/Scripts/omploader.sh $f && mv $f ~/Pictures/Screens/' -c -d 5
else
   scrot '%d-%m-%Y-%T_$wx$h.png' -e 'mv $f ~/Pictures/Screens/' -c -d 5
fi

This is the script which actually does the uploading. It is from the website omploader. The script can be used to upload any file, but I mainly use it for uploading screenshots.

I have placed this script in ~/Scripts/omploader.sh (yeah I know it’s not a shell script, not sure why I named it that)

#!/usr/bin/env ruby
#
# $Id: ompload 226 2007-10-31 03:07:43Z brenden $
#
# Copyright 2007 David Shakaryan <omp @gentoo.org>
# Copyright 2007 Brenden Matthews <brenden @rty.ca>
#
# Distributed under the terms of the GNU General Public License v3
#

require 'tempfile'

argv = Array.new

quiet = false
help = false
skip = false
filename = 'pasta'

$stdin.fcntl(4, File::NONBLOCK)
stdin = $stdin.read if !$stdin.eof
unless stdin.nil?
	argv < < ''
end

ARGV.each_index do |i|
	if skip
		skip = false
		next
	end
	if ARGV[i] =~ /-q|--queit/
		quiet = true
	elsif ARGV[i] =~ /-h|--help/
		help = true
	elsif ARGV[i] =~ /-f|--filename/
		filename = ARGV[i + 1]
		skip = true
	else
		argv << ARGV[i]
	end
end

nocurl = false
curl = %x{curl --version 2> /dev/null}
if curl.empty?
	nocurl = true
	$stderr.puts 'Error: curl missing or not in path.  Cannot continue.'
	$stderr.puts 
end

if (ARGV.size < 1 and (stdin.nil? or stdin.empty?)) or help or nocurl
	$stderr.puts 'Usage:  ompload [-h|--help] [options] [file(s)]'
	$stderr.puts '  -q, --quiet     Only output errors and warnings'
	$stderr.puts '  -f, --filename  Filename to use when posting data'
	$stderr.puts '                  from stdin'
	$stderr.puts 
	$stderr.puts '  You can supply a list of files or data via stdin (or both)'
	$stderr.puts 
	$stderr.puts '  This script requires a copy of cURL in the path.'
	Process.exit
end

errors = 0

wait = 15
old_poop = Time.now - wait
new_poop = Time.now

Url = 'http://omploader.org/'

used_stdin = false

argv.each do |arg|

	if stdin.nil? and !used_stdin and !File.exists?(arg)
		$stderr.puts "Invalid argument '#{arg}': file does not exist"
		errors += 1
		next
	end

	# no more than 1 every 15 seconds is common courtesy
	turd = new_poop - old_poop
	if turd < wait
		puts 'Sleeping for ' + (wait - turd).to_s if !quiet
		sleep(wait - turd)
	end
	old_poop = new_poop

	tmp = Tempfile.new(filename)
	if !stdin.nil? and !used_stdin
		# upload from stdin
		puts "Progress for '#{arg}'" if !quiet
		if quiet
			p = IO.popen("curl -s -F 'file1=@-;filename=\"#{filename}\"' #{Url}upload -o '#{tmp.path}'", "w+")
		else
			p = IO.popen("curl -# -F 'file1=@-;filename=\"#{filename}\"' #{Url}upload -o '#{tmp.path}'", "w+")
		end
		p.puts stdin
		p.close_write
		Process.wait
		used_stdin = true
	else
		# upload file
		puts "Progress for '#{arg}'" if !quiet
		if quiet
			%x{curl -s -F file1=@"#{arg}" #{Url}upload -o '#{tmp.path}'}
		else
			%x{curl -# -F file1=@"#{arg}" #{Url}upload -o '#{tmp.path}'}
		end
	end
	if !File.size?(tmp.path)
		$stderr.puts "Error omploading '#{arg}'"
		errors += 1
		new_poop = Time.now
		next
	end
	output = IO.read(tmp.path)

	# parse for an ID
	if output =~ /View file: <a href="v([A-Za-z0-9+\/]+)">/
		id = $1
		puts "Omploaded '#{arg}' to #{Url}v#{id}" if !quiet
	elsif output =~ /Slow down there, cowboy\./
		wait += 5
		argv << arg
		$stderr.puts "Got throttled when trying to ompload '#{arg}'"
		$stderr.puts "Increasing wait and attempting to continue..."
		errors += 1
	else
		$stderr.puts "Error omploading '#{arg}'"
		errors += 1
	end

	new_poop = Time.now
end

if !quiet
	if errors < 1
		puts "Success."
	else
		puts "Finished with #{errors} errors."
	end

About these ads

3 thoughts on “A Script to take Screenshots and upload them.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s