lib/twitterscraper/query.rb in twitterscraper-ruby-0.19.0 vs lib/twitterscraper/query.rb in twitterscraper-ruby-0.20.0
- old
+ new
@@ -129,51 +129,61 @@
end
if start_date && end_date
if start_date == end_date
raise Error.new('Please specify different values for :start_date and :end_date.')
- elsif start_date > end_date
+ elsif Date.parse(start_date) > Date.parse(end_date)
raise Error.new(':start_date must occur before :end_date.')
end
end
if start_date
- if start_date < OLDEST_DATE
+ if Date.parse(start_date) < OLDEST_DATE
raise Error.new(":start_date must be greater than or equal to #{OLDEST_DATE}")
end
end
end
- def build_queries(query, start_date, end_date, threads_granularity)
+ def build_queries(query, start_date, end_date, threads_granularity, type)
+ if type.search?
+ start_date = Date.parse(start_date) if start_date.is_a?(String)
+ end_date = Date.parse(end_date) if end_date.is_a?(String)
+ elsif type.user?
+ start_date = nil
+ end_date = nil
+ end
+
if start_date && end_date
if threads_granularity == 'auto'
threads_granularity = start_date.upto(end_date - 1).to_a.size >= 28 ? 'day' : 'hour'
end
if threads_granularity == 'day'
date_range = start_date.upto(end_date - 1)
- queries = date_range.map { |date| query + " since:#{date} until:#{date + 1}" }
+ queries = date_range.map { |date| query + " since:#{date}_00:00:00_UTC until:#{date + 1}_00:00:00_UTC" }
elsif threads_granularity == 'hour'
time = Time.utc(start_date.year, start_date.month, start_date.day, 0, 0, 0)
end_time = Time.utc(end_date.year, end_date.month, end_date.day, 0, 0, 0)
queries = []
while true
if time < Time.now.utc
- queries << (query + " since:#{time.strftime('%Y-%m-%d_%H:00:00')}_UTC until:#{(time + 3600).strftime('%Y-%m-%d_%H:00:00')}_UTC")
+ queries << (query + " since:#{time.strftime('%Y-%m-%d_%H')}:00:00_UTC until:#{(time + 3600).strftime('%Y-%m-%d_%H')}:00:00_UTC")
end
time += 3600
break if time >= end_time
end
+ else
+ raise Error.new("Invalid :threads_granularity value=#{threads_granularity}")
end
@queries = queries
elsif start_date
- [query + " since:#{start_date}"]
+ [query + " since:#{start_date}_00:00:00_UTC"]
elsif end_date
- [query + " until:#{end_date}"]
+ [query + " until:#{end_date}_00:00:00_UTC"]
else
[query]
end
end
@@ -212,18 +222,10 @@
@stop_requested
end
def query_tweets(query, type: 'search', start_date: nil, end_date: nil, lang: nil, limit: 100, daily_limit: nil, order: 'desc', threads: 10, threads_granularity: 'auto')
type = Type.new(type)
- if type.search?
- start_date = Date.parse(start_date) if start_date && start_date.is_a?(String)
- end_date = Date.parse(end_date) if end_date && end_date.is_a?(String)
- elsif type.user?
- start_date = nil
- end_date = nil
- end
-
- queries = build_queries(query, start_date, end_date, threads_granularity)
+ queries = build_queries(query, start_date, end_date, threads_granularity, type)
if threads > queries.size
threads = queries.size
end
logger.debug "Cache #{cache_enabled? ? 'enabled' : 'disabled'}"