1 %w{rubygems sinatra json open-uri yaml fileutils}.each { |lib| require lib }
3 DEFAULT_TWEETER = 'zdrojak' unless defined? DEFAULT_TWEETER
7 attr_reader :results, :id
9 FileUtils.mkdir_p('tmp') unless File.exist?('tmp') # Vytvorime adresar pro cache, pokud neexistuje
16 if time = File.mtime(cached_file)
17 (time < Time.now-20) ? Time.now : time
22 if cached? and not stale?
25 load_remote and cache!
32 File.join('tmp', "cached_#{id}.yml")
36 puts "* Loading cached data"
37 @results = YAML.load_file( cached_file )
41 puts "* Loading data from remote service"
42 @results = JSON.parse( open("http://search.twitter.com/search.json?q=from%3A#{id}").read )['results'].collect do |r|
43 { :created_at => Time.parse(r['created_at']).strftime('%d/%m %H:%M'), :text => r['text'] }
48 File.open(cached_file, 'w') { |file| YAML.dump(@results, file) }
52 File.mtime(cached_file) < Time.now-20 # Expirace po 20 sekundach
56 File.exist?(cached_file)
62 redirect( "/#{DEFAULT_TWEETER}" )
66 @tweeter = TweetReader.new( params[:tweeter] || DEFAULT_TWEETER )
67 if time = @tweeter.last_modified # 304 Not Modified, pokud se zdroj dat nezmenil
74 use_in_file_templates!
79 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
80 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
81 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
83 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
84 <title>JSON Client</title>
87 <h1>Novinky od <em><%= @tweeter.id %></em></h1>
94 <% @tweeter.results.each do |result| %>
95 <li><em><%= result[:created_at] %>:</em> <%= result[:text] %></li>