Once again I am struggling with date formatting in Rails. I am trying to compare a date from ActiveRecord to the date a tweet was created in a cron rake but I am getting errors that I don not understand.
"Wed Feb 02 23:04:18 +0000 2011"
1296687858
2009-08-31 07:00:00 UTC
1251698400
survived
"Wed Feb 02 22:31:33 +0000 2011"
1296685893
2009-08-31 07:00:00 UTC
1251698400
survived
"Wed Feb 02 22:24:00 +0000 2011"
1296685440
2009-08-31 07:00:00 UTC
1251698400
survived
"Wed Feb 02 20:40:57 +0000 2011"
1296679257
2009-08-31 07:00:00 UTC
1251698400
survived
"Fri Jan 28 22:17:23 +0000 2011"
1296253043
2009-08-31 07:00:00 UTC
1251698400
survived
rake aborted!
can't convert String into Integer
/Users/phil/Sites/travlrapp.com/lib/tasks/cron.rake:29:in `[]'
/Users/phil/Sites/travlrapp.com/lib/tasks/cron.rake:29:in `fetch_tweets'
/Users/phil/Sites/travlrapp.com/lib/tasks/cron.rake:27:in `each'
/Users/phil/Sites/travlrapp.com/lib/tasks/cron.rake:27:in `fetch_tweets'
/Users/phil/Sites/travlrapp.com/lib/tasks/cron.rake:12:in `each'
/Users/phil/Sites/travlrapp.com/lib/tasks/cron.rake:12:in `fetch_tweets'
/Users/phil/Sites/travlrapp.com/lib/tasks/cron.rake:160
/Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:636:in `call'
/Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:636:in `execute'
/Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:631:in `each'
/Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:631:in `execute'
/Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:597:in `invoke_with_call_chain'
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/monitor.rb:242:in `synchronize'
/Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:590:in `invoke_with_call_chain'
/Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:583:in `invoke'
/Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:2051:in `invoke_task'
/Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:2029:in `top_level'
/Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:2029:in `each'
/Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:2029:in `top_level'
/Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:2068:in `standard_exception_handling'
/Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:2023:in `top_level'
/Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:2001:in `run'
/Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:2068:in `standard_exception_handling'
/Library/Ruby/Gems/1.8/gems/rake-0.8.7/lib/rake.rb:1998:in `run'
/Library/Ruby/Gems/1.8/gems/rake-0.8.7/bin/rake:31
/usr/bin/rake:19:in `load'
/usr/bin/rake:19
Here line 29 is puts tweet['created_at'].inspect, but if I remove that it will fatal error on the if statement that comes shortly after it.
desc "Automated Tasks"
task :cron => :environment do
# TASK FUNCTIONS
def fetch_tweets
users = User.find(
:all,
:include => [ :authentications, :current_trip ],
:conditions => 'trips.id > 0'
)
users.each do |user|
auth = user.authentications.find(:first, :conditions => { :provider => 'twitter' })
# Only bother if they are connected to twitter
if user.current_trip and auth and auth['token'] and auth['secret'] then
# Exchange our oauth_token and oauth_token secret for the AccessToken instance.
access_token = Twitter.connect(auth['token'], auth['secret'])
# use the access token as an agent to get the home timeline
response = access_token.request(:get, "http://api.twitter.com/1/statuses/user_timeline.json")
tweets = ActiveSupport::JSON.decode(response.body)
tweets.each do |tweet|
puts tweet['created_at'].inspect
puts Chronic::parse(tweet['created_at']).to_i
puts ''
puts user.current_trip.start_date
puts Chronic::parse( user.current_trip.start_date ).to_i
# has coordinates and was tweeted since the start date
if tweet['coordinates'] != nil and (Chronic::parse(tweet['created_at']).to_i) >= (Chronic::parse(user.current_trip.start_date).to_i)
coords = tweet['coordinates']['coordinates'];
entry = Entry.new
entry.text = tweet['text']
entry.resource = "http://twitter.com/#{tweet['user']['screen_name']}/status/#{tweet['id']}"
entry.source = 'twitter'
entry.user_id = user.id
entry.trip_id = user.current_trip.id
entry.latitude = coords[1]
entry.longitude = coords[0]
entry.published_at = tweet['created_at']
entry.unique = 'twitter-' + (tweet['id']).to_s
puts entry.inspect if entry.save
end
puts 'survived'
puts ''
end
end
end # users.each
end
Now what strikes me as weird is thart it seems to convert both dates perfectly, then show the unix time for comparison. So why is it fatal erroring at a certain point?
Fixed this with:
next unless tweet and tweet.class == Hash