lib/chatterbot/search.rb in chatterbot-1.0.2 vs lib/chatterbot/search.rb in chatterbot-2.0.0.pre
- old
+ new
@@ -2,56 +2,66 @@
#
# handle Twitter searches
module Search
+ # set a reasonable limit on the maximum number of tweets we will
+ # ever return. otherwise it is possible to exceed Twitter's rate limits
MAX_SEARCH_TWEETS = 1000
@skip_retweets = true
#
- # modify a query string to exclude retweets from searches
+ # exclude retweets from searches
#
def exclude_retweets
@skip_retweets = true
end
+ #
+ # include retweets from searches
+ #
def include_retweets
@skip_retweets = false
end
+
+ #
+ # check if this is a retweet that we want to skip
+ #
def skippable_retweet?(t)
@skip_retweets && t.retweeted_status?
end
# internal search code
def search(queries, opts = {}, &block)
debug "check for tweets since #{since_id}"
-
+
max_tweets = opts.delete(:limit) || MAX_SEARCH_TWEETS
if queries.is_a?(String)
queries = [queries]
end
+ query = queries.join(" OR ")
+
#
# search twitter
#
- queries.each { |query|
- debug "search: #{query} #{default_opts.merge(opts)}"
- @current_tweet = nil
- client.search( query, default_opts.merge(opts) ).take(max_tweets).each { |s|
- update_since_id(s)
- debug s.text
- if has_whitelist? && !on_whitelist?(s)
- debug "skipping because user not on whitelist"
- elsif block_given? && !on_blacklist?(s) && !skip_me?(s) && !skippable_retweet?(s)
- @current_tweet = s
- yield s
- end
- }
- @current_tweet = nil
+
+ debug "search: #{query} #{default_opts.merge(opts)}"
+ @current_tweet = nil
+ client.search( query, default_opts.merge(opts) ).take(max_tweets).each { |s|
+ update_since_id(s)
+ debug s.text
+
+ if block_given? && valid_tweet?(s)
+ @current_tweet = s
+ yield s
+ end
}
+ @current_tweet = nil
+
end
end
end