yatc 0.0.3 → 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/yatc.rb +33 -10
  3. metadata +3 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: fdde419625a0f9898f99ad2f1d0f9be5426ad0ac
4
- data.tar.gz: 17b81c837d586085388cdf83a3a97a6efef58c52
3
+ metadata.gz: d61ced35adbe95b56b233d432850d038a039de8a
4
+ data.tar.gz: 8e1b6ad6ad0d5193a881e78380ef1e4b3b0da5df
5
5
  SHA512:
6
- metadata.gz: c715c88addf673087eb41951e642d4586f3c152c20256473686c9394b5f368efd6b30e580f904d4094b98180237386e9f57b76d73ed6cebe23ec633764dba12a
7
- data.tar.gz: b689adc5683c4e60b1ac3c215b797973185c5cbcac42bfc5a62251f159d69cc277a828d79f2ac53b18d3514f7aaf4060bfc4fec2f33182e66b3b4e5356bc65cc
6
+ metadata.gz: 5d0927f46470f12604c590f2067a8d3be7cc42389f3cec2874f0d23669f52b77959d4c18788ee4b675a154b2db3353d1c68f819ab194847c278485f10aa216e4
7
+ data.tar.gz: 5cd2c262e9900126a2f0e6bd232ddfe38c3e3c9b3625cce6159dce763fd6cebc1011eb5d5d9195d462b937b11c99a98583795ed028598b235200f2389ccefe9a
@@ -14,12 +14,14 @@ class TwitterClient
14
14
  attr_accessor :should_wait
15
15
  attr_accessor :access_token
16
16
  attr_accessor :force_retrieval
17
+ attr_accessor :credentials
17
18
 
18
19
  def test_access(ck, cs)
19
20
  !request_access_token(ck, cs).empty?
20
21
  end
21
22
 
22
23
  def followers_ids(user, count = 5000)
24
+ retrieved = 0
23
25
  params = {}
24
26
  if user.class == Fixnum
25
27
  params[:user_id] = user
@@ -38,9 +40,10 @@ class TwitterClient
38
40
 
39
41
  encoded_params = encode_params(params)
40
42
  url = "#{BASE_URL}/followers/ids.json?#{encoded_params}"
41
- data = JSON.parse(execute(:get, url, access_token))
43
+ data = JSON.parse(execute(:get, url))
42
44
  ids += data['ids']
43
45
  cursor = data['next_cursor']
46
+ retrieved += params[:count]
44
47
  break if cursor == 0
45
48
  end
46
49
  force_retrieval = false
@@ -65,7 +68,7 @@ class TwitterClient
65
68
 
66
69
  encoded_params = encode_params(params)
67
70
  url = "#{BASE_URL}/friends/ids.json?#{encoded_params}"
68
- data = JSON.parse(execute(:get, url, access_token))
71
+ data = JSON.parse(execute(:get, url))
69
72
  ids += data['ids']
70
73
  cursor = data['next_cursor']
71
74
  end
@@ -81,7 +84,7 @@ class TwitterClient
81
84
  end
82
85
  params = encode_params(params)
83
86
  url = "#{BASE_URL}/users/show.json?#{params}"
84
- JSON.parse(execute(:get, url, access_token))
87
+ JSON.parse(execute(:get, url))
85
88
  end
86
89
 
87
90
  def statuses_user_timeline(user, count = 200)
@@ -101,7 +104,7 @@ class TwitterClient
101
104
  end
102
105
  encoded_params = encode_params(params)
103
106
  url = "#{BASE_URL}/statuses/user_timeline.json?#{encoded_params}"
104
- t = JSON.parse(execute(:get, url, access_token))
107
+ t = JSON.parse(execute(:get, url))
105
108
  unless t.empty?
106
109
  max_id = t.map{ |tweet| tweet['id'] }.min - 1
107
110
  end
@@ -110,12 +113,15 @@ class TwitterClient
110
113
  tweets
111
114
  end
112
115
 
113
- def initialize(ck, cs, wait = false)
114
- @consumer_key = ck
115
- @consumer_secret = cs
116
- @access_token = request_access_token(consumer_key, consumer_secret)
116
+
117
+ def initialize(credentials, wait = false, force_retrieval = false)
118
+ raise ArgumentError unless credentials.class == Array
119
+ raise 'Must provide at least one credential' if credentials.empty?
120
+ @credentials = credentials
121
+ @credential_index = 0
122
+ activate_next_credential
117
123
  @should_wait = wait
118
- @force_retrieval = false
124
+ @force_retrieval = force_retrieval
119
125
  end
120
126
 
121
127
  def bearer_token(ck, cs)
@@ -150,7 +156,20 @@ class TwitterClient
150
156
  params.map { |k, v| "#{k}=#{v}" }.join('&')
151
157
  end
152
158
 
153
- def execute(method, url, access_token)
159
+ def activate_next_credential
160
+ return false if @credential_index >= credentials.length
161
+ @consumer_key = credentials[@credential_index][:consumer_key]
162
+ @consumer_secret = credentials[@credential_index][:consumer_secret]
163
+ @credential_index += 1
164
+ begin
165
+ @access_token = request_access_token(consumer_key, consumer_secret)
166
+ rescue => e
167
+ return false
168
+ end
169
+ true
170
+ end
171
+
172
+ def execute(method, url)
154
173
  tries = 0
155
174
  begin
156
175
  RestClient::Request.execute(
@@ -163,6 +182,10 @@ class TwitterClient
163
182
  }
164
183
  )
165
184
  rescue RestClient::TooManyRequests => e
185
+ if activate_next_credential
186
+ retry
187
+ end
188
+
166
189
  limit_reset = e.response.headers[:x_rate_limit_reset]
167
190
  if should_wait && limit_reset && (tries == 0 || force_retrieval)
168
191
  tries += 1
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: yatc
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rafael Rendón Pablo
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-10-16 00:00:00.000000000 Z
11
+ date: 2015-10-17 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Twitter client.
14
14
  email: rafaelrendonpablo@gmail.com
@@ -39,7 +39,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
39
39
  version: '0'
40
40
  requirements: []
41
41
  rubyforge_project:
42
- rubygems_version: 2.4.8
42
+ rubygems_version: 2.4.3
43
43
  signing_key:
44
44
  specification_version: 4
45
45
  summary: Yet Another Twitter Client