Hi,
here is a shorter version ;-)
require "net/http"
require "cgi"
class ShortURL
def self.web(server, action, code)
Net::HTTP.start(server, 80) { |http|
response = http.instance_eval action
response.code == code ? yield(response.read_body) : nil
}
end
def self.rubyurl(url)
web("rubyurl.com",'get("/rubyurl/create?rubyurl[website_url]='+CGI.escape(url)+'")',"302")
{ |body|
/<a href="(.+)">/.match(body)[1]
}
end
def self.tinyurl(url)
web("tinyurl.com",'post("/create.php", "url='+url+'")',"200")
{ |body|
/hidden name=tinyurl value="(.+)"/.match(body)[1]
}
end
end
Dominik
On Thu, 02 Jun 2005 02:39:34 +0200, Devin Mullins <twifkak / comcast.net>
wrote:
> Noob, here, just playing around with Ruby (if this is spam, please let
> me know). For the heck of it, I decided to refactor the duplication out
> of the ShortURL class. Just to spite me, the resulting code is actually
> bigger, but here you go...
>
> require "net/http"
> require "cgi"
>
> class ShortURL
> def self.web(server, action, code)
> Net::HTTP.start(server, 80) { |http|
> response = http.instance_eval action
> if response.code == code
> yield response.read_body
> end
> }
> end
>
> def self.rubyurl(url)
> ret = nil
>
> web("rubyurl.com",'get("/rubyurl/create?rubyurl[website_url]='+CGI.escape(url)+'")',"302")
> { |body|
> regex = /<a href="(.+)">/
> ret = regex.match(body)[1]
> }
> ret
> end
>
>
> def self.tinyurl(url)
> ret = nil
> web("tinyurl.com",'post("/create.php", "url='+url+'")',"200")
> { |body|
> line = body.split("\n").find { |l| l =~ /hidden name=tinyurl/ }
> i1 = line.index("http")
> i2 = line.rindex("\"")
> ret = line[i1...i2]
> }
> ret
> end
> end
>
> Devin