require 'net/http'
class Site
def initialize(stat, title, url, uri, reg, blk, port)
@stat, @title, @url, @uri, @reg, @blk, @port = stat, title, url, uri, reg, blk, port
end
def run()
resp = ""
if @stat > 0
request = Net::HTTP.new(@url, @port)
response = request.get(@uri)
if response.body =~ @reg
val = @blk.call($1)
resp = "#{@title}:\n#{val}\n\n"
end
end
return resp
end
end
loop do
word = `zenity --entry --text="Please enter the word to translate:" --title="Dictionary"`.split();
break if word.length == 0
sites = [Site.new(1,
'Babylon',
'online.babylon.com',
"/cgi-bin/trans.cgi?layout=uol.txt&lang=ptg&word=#{word}",
/.*?<div style="margin: 5px;">.*?<B>.*?<\/B><HR WIDTH=.*?>(.*?)<\/div>/ums,
lambda {|s| s.strip().gsub(/<.*?>/,'').gsub(/^\n/,'; ').gsub(/\n/,'')},
80),
Site.new(1,
'Urban Dictionary',
'www.urbandictionary.com',
"/define.php?term=#{word}",
/.*?<div class='definition'>(.*?)<\/div>/ums,
lambda {|s| s.strip().gsub(/<.*?>/,'')},
80)]
resp = ""
sites.each do |site|
resp += site.run()
end
`echo "#{resp}" | zenity --title="Dictionary [#{word}]" --text-info`
end