@@ -15,6 +15,8 @@ module Agents |
||
| 15 | 15 |
|
| 16 | 16 |
Set `result_type` to specify which [type of search results](https://dev.twitter.com/rest/reference/get/search/tweets) you would prefer to receive. Options are "mixed", "recent", and "popular". (default: `mixed`) |
| 17 | 17 |
|
| 18 |
+ Set `max_results` to limit the amount of results to retrieve per run(default: `500`. The API rate limit is ~18,000 per 15 minutes. [Click here to learn more about rate limits](https://dev.twitter.com/rest/public/rate-limiting). |
|
| 19 |
+ |
|
| 18 | 20 |
Set `expected_update_period_in_days` to the maximum amount of time that you'd expect to pass between Events being created by this Agent. |
| 19 | 21 |
|
| 20 | 22 |
Set `starting_at` to the date/time (eg. `Mon Jun 02 00:38:12 +0000 2014`) you want to start receiving tweets from (default: agent's `created_at`) |
@@ -74,20 +76,28 @@ module Agents |
||
| 74 | 76 |
end |
| 75 | 77 |
end |
| 76 | 78 |
|
| 79 |
+ def max_results |
|
| 80 |
+ if interpolated['max_results'].present? |
|
| 81 |
+ interpolated['max_results'].to_i |
|
| 82 |
+ else |
|
| 83 |
+ 500 |
|
| 84 |
+ end |
|
| 85 |
+ end |
|
| 86 |
+ |
|
| 77 | 87 |
def check |
| 78 | 88 |
since_id = memory['since_id'] || nil |
| 79 | 89 |
opts = {include_entities: true}
|
| 80 | 90 |
opts.merge! result_type: interpolated[:result_type] if interpolated[:result_type].present? |
| 81 |
- opts.merge! :since_id => since_id unless since_id.nil? |
|
| 91 |
+ opts.merge! since_id: since_id unless since_id.nil? |
|
| 82 | 92 |
|
| 83 | 93 |
# http://www.rubydoc.info/gems/twitter/Twitter/REST/Search |
| 84 |
- tweets = twitter.search(interpolated['search'], opts).to_a |
|
| 94 |
+ tweets = twitter.search(interpolated['search'], opts).take(max_results) |
|
| 85 | 95 |
|
| 86 | 96 |
tweets.each do |tweet| |
| 87 |
- if tweet.created_at >= starting_at |
|
| 97 |
+ if (tweet.created_at >= starting_at) |
|
| 88 | 98 |
memory['since_id'] = tweet.id if !memory['since_id'] || (tweet.id > memory['since_id']) |
| 89 | 99 |
|
| 90 |
- create_event :payload => tweet.attrs |
|
| 100 |
+ create_event payload: tweet.attrs |
|
| 91 | 101 |
end |
| 92 | 102 |
end |
| 93 | 103 |
|
@@ -3,35 +3,39 @@ require 'spec_helper' |
||
| 3 | 3 |
describe Agents::TwitterSearchAgent do |
| 4 | 4 |
before do |
| 5 | 5 |
# intercept the twitter API request |
| 6 |
- stub_request(:any, /freebandnames/).to_return(:body => File.read(Rails.root.join("spec/data_fixtures/search_tweets.json")), :status => 200)
|
|
| 6 |
+ stub_request(:any, /freebandnames/).to_return(body: File.read(Rails.root.join("spec/data_fixtures/search_tweets.json")), status: 200)
|
|
| 7 | 7 |
|
| 8 | 8 |
@opts = {
|
| 9 |
- :search => "freebandnames", |
|
| 10 |
- :expected_update_period_in_days => "2", |
|
| 11 |
- :starting_at => "Jan 01 00:00:01 +0000 2000", |
|
| 12 |
- :consumer_key => "---", |
|
| 13 |
- :consumer_secret => "---", |
|
| 14 |
- :oauth_token => "---", |
|
| 15 |
- :oauth_token_secret => "---" |
|
| 9 |
+ search: "freebandnames", |
|
| 10 |
+ expected_update_period_in_days: "2", |
|
| 11 |
+ starting_at: "Jan 01 00:00:01 +0000 2000", |
|
| 12 |
+ max_results: '3', |
|
| 13 |
+ consumer_key: "---", |
|
| 14 |
+ consumer_secret: "---", |
|
| 15 |
+ oauth_token: "---", |
|
| 16 |
+ oauth_token_secret: "---" |
|
| 16 | 17 |
} |
| 17 | 18 |
|
| 18 |
- @checker = Agents::TwitterSearchAgent.new(:name => "search freebandnames", :options => @opts) |
|
| 19 |
- @checker.service = services(:generic) |
|
| 20 |
- @checker.user = users(:bob) |
|
| 21 |
- @checker.save! |
|
| 22 | 19 |
end |
| 20 |
+ let(:checker) {
|
|
| 21 |
+ _checker = Agents::TwitterSearchAgent.new(name: "search freebandnames", options: @opts) |
|
| 22 |
+ _checker.service = services(:generic) |
|
| 23 |
+ _checker.user = users(:bob) |
|
| 24 |
+ _checker.save! |
|
| 25 |
+ _checker |
|
| 26 |
+ } |
|
| 23 | 27 |
|
| 24 | 28 |
describe "#check" do |
| 25 | 29 |
it "should check for changes" do |
| 26 |
- expect { @checker.check }.to change { Event.count }.by(100)
|
|
| 30 |
+ expect { checker.check }.to change { Event.count }.by(3)
|
|
| 27 | 31 |
end |
| 28 | 32 |
end |
| 29 | 33 |
|
| 30 | 34 |
describe "#check with starting_at=future date" do |
| 31 | 35 |
it "should check for changes starting_at a future date, thus not find any" do |
| 32 |
- opts = @opts.merge({ :starting_at => "Jan 01 00:00:01 +0000 2999" })
|
|
| 36 |
+ opts = @opts.merge({ starting_at: "Jan 01 00:00:01 +0000 2999" })
|
|
| 33 | 37 |
|
| 34 |
- checker = Agents::TwitterSearchAgent.new(:name => "searching freebandnames", :options => opts) |
|
| 38 |
+ checker = Agents::TwitterSearchAgent.new(name: "search freebandnames", options: opts) |
|
| 35 | 39 |
checker.service = services(:generic) |
| 36 | 40 |
checker.user = users(:bob) |
| 37 | 41 |
checker.save! |