#!/usr/bin/env ruby # -*-mode: ruby; coding: utf-8;-*- # (C) Thomas Hafner 2011 # gopher://sdf-eu.org/1/users/hafner/devel/tinyurl/ $-K='U' require 'cgi' require 'mechanize' module Tinyurl def self.encode(original_url) raise 'No original URL given.' unless original_url Mechanize.new. get("http://tinyurl.com/create.php?url=#{CGI::escape(original_url)}"). link_with(:text => 'Open in new window'). href end def self.decode(tiny_url) raise 'No tiny URL given.' unless tiny_url url = tiny_url.sub(%r{^http://tinyurl.com/}i, 'http://preview.tinyurl.com/') Mechanize.new. get(url). link_with(:text => 'Proceed to this site.'). href end end if __FILE__ == $0 require 'getoptlong' options = \ [ [ '--help', '-h', GetoptLong::NO_ARGUMENT ], [ '--decode', '-d', GetoptLong::NO_ARGUMENT ], ] OPTS = Hash[*GetoptLong.new(*options).to_enum.to_a.flatten] if OPTS.has_key?('--help') b = File::basename($0) puts <<"EOS" Usage: #{b} ORIGINAL_URL #{b} --decode TINY_URL EOS else url, = ARGV method = OPTS.has_key?('--decode') ? :decode : :encode puts Tinyurl.send(method, url) end end