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:
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




3 comments
Comments feed for this article
Saturday 2nd August, 2008 at 8:46 pm
waelnasreddine
Nice script ardoris :D but if you also would like to do everything from the command line, check my screenshot script, it’s quite old but it does the job very well, although I just added the ompload option I used to use imageshack via the shag script didn’t know about ompload :D, thx for the tip
http://wael.nasreddine.com/cgi-bin/viewvc.cgi/wael/trunk/bin/screenshot?view=markup
Sunday 3rd August, 2008 at 2:59 pm
jebavarde
@waelnasreddine: Have taken a look – is a nice script :D and will probably put it to some use.
Monday 4th August, 2008 at 9:20 am
waelnasreddine
@jebavarde You will also need the functions http://wael.nasreddine.com/cgi-bin/viewvc.cgi/wael/trunk/lib/functions/ and the sound from the sounds folder http://wael.nasreddine.com/cgi-bin/viewvc.cgi/wael/trunk/lib/sounds/ everything you need for my scripts are in my repo, check this page too http://wael.nasreddine.com/my-configs :)