From 0b64c140a5798e53201d5e7e9e9f3cdccf7c50bb Mon Sep 17 00:00:00 2001 From: John Firebaugh Date: Tue, 13 Sep 2011 08:03:37 -0700 Subject: [PATCH] Convert to webapp --- twitter-search.rb | 63 ++++++++++++++++++++++++++++++++--------------- 1 file changed, 43 insertions(+), 20 deletions(-) diff --git a/twitter-search.rb b/twitter-search.rb index 207d423..d003c12 100755 --- a/twitter-search.rb +++ b/twitter-search.rb @@ -3,35 +3,59 @@ require 'rubygems' require 'sinatra' require 'twitter' +require 'date' require 'cgi' require 'csv' +QUERIES = ['toothache', 'tooth ache', 'dental pain', 'tooth pain'] + +FIELDS = [ + ['id', lambda {|s| s}], + ['from_user', lambda {|s| s}], + ['created_at', lambda {|s| DateTime.parse(s).strftime('%F %T')}], + ['geo', lambda {|s| s['coordinates'].join(', ') rescue ''}], + ['text', lambda {|s| CGI.unescapeHTML(s)}] +] + get "/" do - "Hello World!" +<<-HTML + + + + + + +
+

Enter twitter search terms, separated by commas:

+ + +

Search for tweets on this day:

+ + + +
+ + +HTML end post "/" do - QUERIES = ['toothache', 'tooth ache', 'dental pain', 'tooth pain'] - - FIELDS = [ - ['id', lambda {|s| s}], - ['from_user', lambda {|s| s}], - ['created_at', lambda {|s| DateTime.parse(s).strftime('%F %T')}], - ['geo', lambda {|s| s['coordinates'].join(', ') rescue ''}], - ['text', lambda {|s| CGI.unescapeHTML(s)}] - ] - - yesterday = Date.today - 1 + date = Date.parse(params[:d]) results = {} - QUERIES.each do |query| - puts "Searching for '#{query}' on #{yesterday.strftime('%a, %x')}" + params[:q].split(",").each do |query| + query.strip! + + puts "Searching for '#{query}' on #{date.strftime('%a, %x')}" search = Twitter::Search.new. containing(query). result_type(:recent). - since_date(yesterday). - until_date(yesterday + 1). + since_date(date). + until_date(date + 1). per_page(50) page = 0 @@ -45,15 +69,14 @@ end while search.fetch_next_page end + puts "Finished #{results.size} tweets" - filename = "#{yesterday.to_s}.csv" + attachment "#{params[:q]} (#{date.to_s}).csv" - CSV.open(filename, 'wb') do |csv| + CSV.generate do |csv| csv << FIELDS.map(&:first) results.each do |id, result| csv << FIELDS.map {|name, formatter| formatter.call(result[name])} end end - - puts "Finished. #{results.size} tweets written to #{filename}" end