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.
- checksums.yaml +4 -4
- data/lib/yatc.rb +33 -10
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d61ced35adbe95b56b233d432850d038a039de8a
|
4
|
+
data.tar.gz: 8e1b6ad6ad0d5193a881e78380ef1e4b3b0da5df
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5d0927f46470f12604c590f2067a8d3be7cc42389f3cec2874f0d23669f52b77959d4c18788ee4b675a154b2db3353d1c68f819ab194847c278485f10aa216e4
|
7
|
+
data.tar.gz: 5cd2c262e9900126a2f0e6bd232ddfe38c3e3c9b3625cce6159dce763fd6cebc1011eb5d5d9195d462b937b11c99a98583795ed028598b235200f2389ccefe9a
|
data/lib/yatc.rb
CHANGED
@@ -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
|
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
|
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
|
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
|
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
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
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 =
|
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
|
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.
|
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-
|
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.
|
42
|
+
rubygems_version: 2.4.3
|
43
43
|
signing_key:
|
44
44
|
specification_version: 4
|
45
45
|
summary: Yet Another Twitter Client
|