RTwitter 0.0.7 → 0.0.8

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 (4) hide show
  1. checksums.yaml +4 -4
  2. data/lib/RTwitter.rb +255 -253
  3. data/lib/RTwitter/version.rb +1 -1
  4. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0eeb177ecf0330576c28c598483a5208b9270f4b
4
- data.tar.gz: 82dcae2a75ca9c55796728441cc0b13ce8ba734f
3
+ metadata.gz: b81417e68608d69cff2db081f404408db52f1215
4
+ data.tar.gz: 081b5c45b66a168a00229e1dfa70ec4331997d77
5
5
  SHA512:
6
- metadata.gz: dfd14bbc07adb5aa509b2b4f905c6ebcb0c2ff8897e32a25c78a5dc6bc2d0c6fff197dace1eea089ad709f7af8e2292743d1df188b5f299c79d02c59e547bbe8
7
- data.tar.gz: df0730b7b097834b2af79d1e8c44f888f1d3acee27279d678dd68b14e980c1b394875c0014a566b0d2e256fa27b90c42cd35964d1fe45a8fa1821aee94ae6e63
6
+ metadata.gz: fbb05d5385bf47779a71f807e13c410afa11df8d84d4eb87ba1d89887e7c5f96c63bda4958405c62e9dc60906922d1399079b36b112f0dc6b75ee67ba9298cef
7
+ data.tar.gz: 75fc34a0d7d99f507c8407708ce281a55dac4684baf94c32b27b1282a7669b5edf462ecfc7445acd9b3b3668c76c2ed6616a702cb553c97157299dce3ca333f2
data/lib/RTwitter.rb CHANGED
@@ -7,259 +7,261 @@ require'json'
7
7
  require'net/http'
8
8
 
9
9
  module RTwitter
10
- class OAuth
11
-
12
- attr_reader :consumer_key,:consumer_key_secret,:access_token,:access_token_secret,:user_id,:screen_name
13
- attr_accessor :userAgent
14
- def initialize(ck ,cks ,at = nil ,ats = nil)
15
- @consumer_key = ck
16
- @consumer_key_secret = cks
17
- @access_token = at
18
- @access_token_secret = ats
19
- @userAgent = 'RTwitter'
20
- end
21
- def request_token
22
-
23
- oauth_params = oauth
24
- oauth_params.delete('oauth_token')
25
- oauth_params['oauth_callback'] = 'oob'
26
- base_params = Hash[oauth_params.sort]
27
- query = build_query(base_params)
28
- url = 'https://api.twitter.com/oauth/request_token'
29
- base = 'POST&' + escape(url) + '&' + escape(query)
30
- key = @consumer_key_secret + '&'
31
- oauth_params['oauth_signature'] = Base64.encode64(OpenSSL::HMAC.digest("sha1",key, base)).chomp
32
- header = {'Authorization' => 'OAuth ' + build_header(oauth_params),'User-Agent' => @userAgent}
33
- response = post_request(url,'',header)
34
-
35
- items = response.body.split('&')
36
- @request_token = items[0].split('=')[1]
37
- @request_token_secret = items[1].split('=')[1]
38
- return "https://api.twitter.com/oauth/authenticate?oauth_token=#{@request_token}"
39
-
40
- end
41
-
42
- def access_token(pin)
43
-
44
- oauth_params = oauth
45
- oauth_params.delete('oauth_token')
46
- oauth_params['oauth_verifier'] = pin.chomp
47
- oauth_params['oauth_token'] = @request_token
48
- base_params = Hash[oauth_params.sort]
49
- query = build_query(base_params)
50
- url = 'https://api.twitter.com/oauth/access_token'
51
- base = 'POST&' + escape(url) + '&' + escape(query)
52
- key = @consumer_key_secret + '&' + @request_token_secret
53
- oauth_params['oauth_signature'] = Base64.encode64(OpenSSL::HMAC.digest("sha1",key, base)).chomp
54
- header = {'Authorization' => 'OAuth ' + build_header(oauth_params),'User-Agent' => @userAgent}
55
- body = ''
56
- response = post_request(url,body,header)
57
-
58
- access_tokens = response.body.split('&')
59
- @access_token = access_tokens[0].split('=')[1]
60
- @access_token_secret = access_tokens[1].split('=')[1]
61
- @user_id = access_tokens[2].split('=')[1]
62
- @screen_name = access_tokens[3].split('=')[1]
63
- end
64
-
65
-
66
- def post(endpoint,additional_params = Hash.new)
67
-
68
- url = url(endpoint)
69
- header = signature('POST',url,additional_params)
70
- body = build_body(additional_params)
71
- response = post_request(url,body,header)
72
- return decode(response)
73
-
74
- end
75
-
76
- def get(endpoint,additional_params = Hash.new)
77
-
78
- url = url(endpoint)
79
- header = signature('GET',url,additional_params)
80
- body = build_body(additional_params)
81
- response = get_request(url,body,header)
82
- return decode(response)
83
-
84
- end
85
-
86
- def streaming(endpoint,additional_params = Hash.new)
87
-
88
- url = url(endpoint)
89
- header = signature('GET',url,additional_params)
90
- body = build_body(additional_params)
91
- buffer = ''
92
- streaming_request(url,body,header){|chunk|
93
- if buffer != ''
94
- chunk = buffer + chunk
95
- buffer = ''
96
- end
97
- begin
98
- status = JSON.parse(chunk)
99
- rescue
100
- buffer << chunk
101
- next
102
- end
103
-
104
- yield status
105
- }
106
-
107
- end
108
-
109
- private
110
- def signature(method,url,additional_params)
111
- oauth_params = oauth
112
- base_params = oauth_params.merge(additional_params)
113
- base_params = Hash[base_params.sort]
114
- query = build_query(base_params)
115
- base = method + '&' + escape(url) + '&' + escape(query)
116
- key = @consumer_key_secret + '&' + @access_token_secret
117
- oauth_params['oauth_signature'] = Base64.encode64(OpenSSL::HMAC.digest("sha1",key, base)).chomp
118
- header = {'Authorization' => 'OAuth ' + build_header(oauth_params),'User-Agent' => @userAgent}
119
- return header
120
- end
121
-
122
- def oauth
123
- {
124
- 'oauth_consumer_key' => @consumer_key,
125
- 'oauth_signature_method' => 'HMAC-SHA1',
126
- 'oauth_timestamp' => Time.now.to_i.to_s,
127
- 'oauth_version' => '1.0',
128
- 'oauth_nonce' => Random.new_seed.to_s,
129
- 'oauth_token' => @access_token
130
- }
131
- end
132
-
133
- def decode(response)
134
- if response.body == nil
135
- raise RTwitterException,'Failed to receive response.'
136
- end
137
- if response.body == ''
138
- raise RTwitterException,'Empty response.'
139
- end
140
- begin
141
- obj = JSON.parse(response.body)
142
- rescue
143
- return response.body
144
- end
145
- if obj.include?('error')
146
- raise RTwitterException,obj['error']
147
- end
148
- if obj.include?('errors')
149
- if obj['errors'].kind_of?(String)
150
- raise RTwitterException,obj['errors']
151
- else
152
- messages = []
153
- obj['errors'].each{|errors|
154
- messages << errors['message']
155
- }
156
- raise RTwitterException,messages.join("\n")
157
- end
158
- end
159
- return obj
160
- end
161
-
162
-
163
- def escape(value)
164
-
165
- URI.escape(value.to_s,/[^a-zA-Z0-9\-\.\_\~]/)
166
-
167
- end
168
-
169
- def post_request(url,body,header)
170
-
171
- uri = URI.parse(url)
172
- https = Net::HTTP.new(uri.host, uri.port)
173
- if uri.port == 443
174
- https.use_ssl = true
175
- https.verify_mode = OpenSSL::SSL::VERIFY_NONE
176
- end
177
- response = https.start{|https|
178
- https.post(uri.request_uri,body,header)
179
- }
180
- return response
181
-
182
- end
183
-
184
- def get_request(url,body,header)
185
-
186
- uri = URI.parse(url)
187
- https = Net::HTTP.new(uri.host, uri.port)
188
- if uri.port == 443
189
- https.use_ssl = true
190
- https.verify_mode = OpenSSL::SSL::VERIFY_NONE
191
- end
192
- response = https.start{|https|
193
- https.get(uri.request_uri + '?' + body, header)
194
- }
195
- return response
196
-
197
- end
198
-
199
- def streaming_request(url,body,header)
200
-
201
- uri = URI.parse(url)
202
- https = Net::HTTP.new(uri.host, uri.port)
203
- if uri.port == 443
204
- https.use_ssl = true
205
- https.verify_mode = OpenSSL::SSL::VERIFY_NONE
206
- end
207
- request = Net::HTTP::Get.new(uri.request_uri + '?' + body,header)
208
- https.request(request){|response|
209
- response.read_body{|chunk|
210
- yield chunk
211
- }
212
- }
213
-
214
- end
215
-
216
- def url(endpoint)
217
- if /^https:/ =~ endpoint
218
- return endpoint
219
- end
220
- list = {
221
- 'media/upload' => 'https://upload.twitter.com/1.1/media/upload.json',
222
- 'statuses/filter' => 'https://stream.twitter.com/1.1/statuses/filter.json',
223
- 'statuses/sample' => 'https://stream.twitter.com/1.1/statuses/sample.json',
224
- 'user' => 'https://userstream.twitter.com/1.1/user.json',
225
- 'site' => 'https://sitestream.twitter.com/1.1/site.json'
226
- }
227
- if list.include?(endpoint)
228
- return list[endpoint]
229
- else
230
- return "https://api.twitter.com/1.1/#{endpoint}.json"
231
- end
232
-
233
- end
234
-
235
- def build_query(params)
236
-
237
- query = params.map{|key,value|
238
- "#{escape(key)}=#{escape(value)}"
239
- }.join('&')
240
- return query
241
-
242
- end
243
-
244
- def build_header(params)
245
-
246
- header = params.map{|key,value|
247
- "#{escape(key)}=\"#{escape(value)}\""
248
- }.join(',')
249
- return header
250
-
251
- end
252
-
253
- def build_body(params)
254
-
255
- body = params.map{|key,value|
256
- "#{escape(key)}=#{escape(value)}"
257
- }.join('&')
258
- return body
259
-
260
- end
10
+ class OAuth
11
+
12
+ attr_reader :consumer_key,:consumer_key_secret,:access_token,:access_token_secret,:user_id,:screen_name
13
+ attr_accessor :userAgent
14
+ def initialize(ck ,cks ,at = nil ,ats = nil)
15
+ @consumer_key = ck
16
+ @consumer_key_secret = cks
17
+ @access_token = at
18
+ @access_token_secret = ats
19
+ @userAgent = 'RTwitter'
20
+ end
21
+ def request_token
22
+
23
+ oauth_params = oauth
24
+ oauth_params.delete('oauth_token')
25
+ oauth_params['oauth_callback'] = 'oob'
26
+ base_params = Hash[oauth_params.sort]
27
+ query = build_query(base_params)
28
+ url = 'https://api.twitter.com/oauth/request_token'
29
+ base = 'POST&' + escape(url) + '&' + escape(query)
30
+ key = @consumer_key_secret + '&'
31
+ oauth_params['oauth_signature'] = Base64.encode64(OpenSSL::HMAC.digest("sha1",key, base)).chomp
32
+ header = {'Authorization' => 'OAuth ' + build_header(oauth_params),'User-Agent' => @userAgent}
33
+ response = post_request(url,'',header)
34
+
35
+ items = response.body.split('&')
36
+ @request_token = items[0].split('=')[1]
37
+ @request_token_secret = items[1].split('=')[1]
38
+ return [@request_token,@request_token_secret]
39
+
40
+ end
41
+
42
+ def access_token(verifier)
43
+
44
+ oauth_params = oauth
45
+ oauth_params.delete('oauth_token')
46
+ oauth_params['oauth_verifier'] = verifier
47
+ oauth_params['oauth_token'] = @request_token
48
+ base_params = Hash[oauth_params.sort]
49
+ query = build_query(base_params)
50
+ url = 'https://api.twitter.com/oauth/access_token'
51
+ base = 'POST&' + escape(url) + '&' + escape(query)
52
+ key = @consumer_key_secret + '&' + @request_token_secret
53
+ oauth_params['oauth_signature'] = Base64.encode64(OpenSSL::HMAC.digest("sha1",key, base)).chomp
54
+ header = {'Authorization' => 'OAuth ' + build_header(oauth_params),'User-Agent' => @userAgent}
55
+ body = ''
56
+ response = post_request(url,body,header)
57
+
58
+ access_tokens = response.body.split('&')
59
+ @access_token = access_tokens[0].split('=')[1]
60
+ @access_token_secret = access_tokens[1].split('=')[1]
61
+ @user_id = access_tokens[2].split('=')[1]
62
+ @screen_name = access_tokens[3].split('=')[1]
63
+
64
+ return [@access_token,@access_token_secret,@user_id,@screen_name]
65
+ end
66
+
67
+
68
+ def post(endpoint,additional_params = Hash.new)
69
+
70
+ url = url(endpoint)
71
+ header = signature('POST',url,additional_params)
72
+ body = build_body(additional_params)
73
+ response = post_request(url,body,header)
74
+ return decode(response)
75
+
76
+ end
77
+
78
+ def get(endpoint,additional_params = Hash.new)
79
+
80
+ url = url(endpoint)
81
+ header = signature('GET',url,additional_params)
82
+ body = build_body(additional_params)
83
+ response = get_request(url,body,header)
84
+ return decode(response)
85
+
86
+ end
87
+
88
+ def streaming(endpoint,additional_params = Hash.new)
89
+
90
+ url = url(endpoint)
91
+ header = signature('GET',url,additional_params)
92
+ body = build_body(additional_params)
93
+ buffer = ''
94
+ streaming_request(url,body,header){|chunk|
95
+ if buffer != ''
96
+ chunk = buffer + chunk
97
+ buffer = ''
98
+ end
99
+ begin
100
+ status = JSON.parse(chunk)
101
+ rescue
102
+ buffer << chunk
103
+ next
104
+ end
105
+
106
+ yield status
107
+ }
108
+
109
+ end
110
+
111
+ private
112
+ def signature(method,url,additional_params)
113
+ oauth_params = oauth
114
+ base_params = oauth_params.merge(additional_params)
115
+ base_params = Hash[base_params.sort]
116
+ query = build_query(base_params)
117
+ base = method + '&' + escape(url) + '&' + escape(query)
118
+ key = @consumer_key_secret + '&' + @access_token_secret
119
+ oauth_params['oauth_signature'] = Base64.encode64(OpenSSL::HMAC.digest("sha1",key, base)).chomp
120
+ header = {'Authorization' => 'OAuth ' + build_header(oauth_params),'User-Agent' => @userAgent}
121
+ return header
122
+ end
123
+
124
+ def oauth
125
+ {
126
+ 'oauth_consumer_key' => @consumer_key,
127
+ 'oauth_signature_method' => 'HMAC-SHA1',
128
+ 'oauth_timestamp' => Time.now.to_i.to_s,
129
+ 'oauth_version' => '1.0',
130
+ 'oauth_nonce' => Random.new_seed.to_s,
131
+ 'oauth_token' => @access_token
132
+ }
133
+ end
134
+
135
+ def decode(response)
136
+ if response.body == nil
137
+ raise RTwitterException,'Failed to receive response.'
138
+ end
139
+ if response.body == ''
140
+ raise RTwitterException,'Empty response.'
141
+ end
142
+ begin
143
+ obj = JSON.parse(response.body)
144
+ rescue
145
+ return response.body
146
+ end
147
+ if obj.include?('error')
148
+ raise RTwitterException,obj['error']
149
+ end
150
+ if obj.include?('errors')
151
+ if obj['errors'].kind_of?(String)
152
+ raise RTwitterException,obj['errors']
153
+ else
154
+ messages = []
155
+ obj['errors'].each{|errors|
156
+ messages << errors['message']
157
+ }
158
+ raise RTwitterException,messages.join("\n")
159
+ end
160
+ end
161
+ return obj
162
+ end
163
+
164
+
165
+ def escape(value)
166
+
167
+ URI.escape(value.to_s,/[^a-zA-Z0-9\-\.\_\~]/)
168
+
169
+ end
170
+
171
+ def post_request(url,body,header)
172
+
173
+ uri = URI.parse(url)
174
+ https = Net::HTTP.new(uri.host, uri.port)
175
+ if uri.port == 443
176
+ https.use_ssl = true
177
+ https.verify_mode = OpenSSL::SSL::VERIFY_NONE
178
+ end
179
+ response = https.start{|https|
180
+ https.post(uri.request_uri,body,header)
181
+ }
182
+ return response
183
+
184
+ end
185
+
186
+ def get_request(url,body,header)
187
+
188
+ uri = URI.parse(url)
189
+ https = Net::HTTP.new(uri.host, uri.port)
190
+ if uri.port == 443
191
+ https.use_ssl = true
192
+ https.verify_mode = OpenSSL::SSL::VERIFY_NONE
193
+ end
194
+ response = https.start{|https|
195
+ https.get(uri.request_uri + '?' + body, header)
196
+ }
197
+ return response
198
+
199
+ end
200
+
201
+ def streaming_request(url,body,header)
202
+
203
+ uri = URI.parse(url)
204
+ https = Net::HTTP.new(uri.host, uri.port)
205
+ if uri.port == 443
206
+ https.use_ssl = true
207
+ https.verify_mode = OpenSSL::SSL::VERIFY_NONE
208
+ end
209
+ request = Net::HTTP::Get.new(uri.request_uri + '?' + body,header)
210
+ https.request(request){|response|
211
+ response.read_body{|chunk|
212
+ yield chunk
213
+ }
214
+ }
215
+
216
+ end
217
+
218
+ def url(endpoint)
219
+ if /^https:/ =~ endpoint
220
+ return endpoint
221
+ end
222
+ list = {
223
+ 'media/upload' => 'https://upload.twitter.com/1.1/media/upload.json',
224
+ 'statuses/filter' => 'https://stream.twitter.com/1.1/statuses/filter.json',
225
+ 'statuses/sample' => 'https://stream.twitter.com/1.1/statuses/sample.json',
226
+ 'user' => 'https://userstream.twitter.com/1.1/user.json',
227
+ 'site' => 'https://sitestream.twitter.com/1.1/site.json'
228
+ }
229
+ if list.include?(endpoint)
230
+ return list[endpoint]
231
+ else
232
+ return "https://api.twitter.com/1.1/#{endpoint}.json"
233
+ end
234
+
235
+ end
236
+
237
+ def build_query(params)
238
+
239
+ query = params.map{|key,value|
240
+ "#{escape(key)}=#{escape(value)}"
241
+ }.join('&')
242
+ return query
243
+
244
+ end
245
+
246
+ def build_header(params)
247
+
248
+ header = params.map{|key,value|
249
+ "#{escape(key)}=\"#{escape(value)}\""
250
+ }.join(',')
251
+ return header
252
+
253
+ end
254
+
255
+ def build_body(params)
256
+
257
+ body = params.map{|key,value|
258
+ "#{escape(key)}=#{escape(value)}"
259
+ }.join('&')
260
+ return body
261
+
262
+ end
261
263
 
262
- class RTwitterException < RuntimeError; end
263
- end
264
+ class RTwitterException < RuntimeError; end
265
+ end
264
266
 
265
267
  end
@@ -1,3 +1,3 @@
1
1
  module RTwitter
2
- VERSION = "0.0.7"
2
+ VERSION = "0.0.8"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: RTwitter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.7
4
+ version: 0.0.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Seurix
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-02-01 00:00:00.000000000 Z
11
+ date: 2015-02-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler