RTwitter 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 96b404ddc6ef515acdeb28262a93c33d9094a60e
4
+ data.tar.gz: bd338fc5accfd0f75b0d81501263f54537faf7f5
5
+ SHA512:
6
+ metadata.gz: 36f9e66987d6698b9d14ecf970f6e46f51dd3cad5d7963709b216cbc54442300bcdbb3075eace9dc6f956a57abe322eba2f37148bb3b845e1c911e1648a6637c
7
+ data.tar.gz: 8ab3a89014c7068b67358116c346cd043b9b5dbbf4bfd3ec5a73211b3176c4192cb569c55999ed32e2e39d6fe31d2df45fc5b0d67b4d6d958e5e220cf4cc02b8
@@ -1,3 +1,3 @@
1
1
  module RTwitter
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
@@ -0,0 +1,3 @@
1
+ module RTwitter
2
+ VERSION = "0.0.2"
3
+ end
data/lib/RTwitter.rb CHANGED
@@ -7,261 +7,259 @@ 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
+
22
+
23
+ def request_token
24
+
25
+ oauth_params = oauth
26
+ oauth_params.delete('oauth_token')
27
+ oauth_params['oauth_callback'] = 'oob'
28
+ base_params = Hash[oauth_params.sort]
29
+ query = build_query(base_params)
30
+ url = 'https://api.twitter.com/oauth/request_token'
31
+ base = 'POST&' + escape(url) + '&' + escape(query)
32
+ key = @consumer_key_secret + '&'
33
+ oauth_params['oauth_signature'] = Base64.encode64(OpenSSL::HMAC.digest("sha1",key, base)).chomp
34
+ header = {'Authorization' => 'OAuth ' + build_header(oauth_params),'User-Agent' => @userAgent}
35
+ response = post_request(url,'',header)
36
+
37
+ items = response.body.split('&')
38
+ @request_token = items[0].split('=')[1]
39
+ @request_token_secret = items[1].split('=')[1]
40
+ return "https://api.twitter.com/oauth/authenticate?oauth_token=#{@request_token}"
41
+
42
+ end
43
+
44
+ def access_token(pin)
45
+
46
+ oauth_params = oauth
47
+ oauth_params.delete('oauth_token')
48
+ oauth_params['oauth_verifier'] = pin.chomp
49
+ oauth_params['oauth_token'] = @request_token
50
+ base_params = Hash[oauth_params.sort]
51
+ query = build_query(base_params)
52
+ url = 'https://api.twitter.com/oauth/access_token'
53
+ base = 'POST&' + escape(url) + '&' + escape(query)
54
+ key = @consumer_key_secret + '&' + @request_token_secret
55
+ oauth_params['oauth_signature'] = Base64.encode64(OpenSSL::HMAC.digest("sha1",key, base)).chomp
56
+ header = {'Authorization' => 'OAuth ' + build_header(oauth_params),'User-Agent' => @userAgent}
57
+ body = ''
58
+ response = post_request(url,body,header)
59
+
60
+ access_tokens = response.body.split('&')
61
+ @access_token = access_tokens[0].split('=')[1]
62
+ @access_token_secret = access_tokens[1].split('=')[1]
63
+ @user_id = access_tokens[2].split('=')[1]
64
+ @screen_name = access_tokens[3].split('=')[1]
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
+
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
10
259
 
11
- class OAuth
12
-
13
- attr_reader :consumer_key,:consumer_key_secret,:access_token,:access_token_secret,:user_id,:screen_name
14
- attr_accessor :userAgent
15
- def initialize(ck ,cks ,at = nil ,ats = nil)
16
- @consumer_key = ck
17
- @consumer_key_secret = cks
18
- @access_token = at
19
- @access_token_secret = ats
20
- @userAgent = 'RTwitter'
21
- end
22
-
23
-
24
- def request_token
25
-
26
- oauth_params = oauth
27
- oauth_params.delete('oauth_token')
28
- oauth_params['oauth_callback'] = 'oob'
29
- base_params = Hash[oauth_params.sort]
30
- query = build_query(base_params)
31
- url = 'https://api.twitter.com/oauth/request_token'
32
- base = 'POST&' + escape(url) + '&' + escape(query)
33
- key = @consumer_key_secret + '&'
34
- oauth_params['oauth_signature'] = Base64.encode64(OpenSSL::HMAC.digest("sha1",key, base)).chomp
35
- header = {'Authorization' => 'OAuth ' + build_header(oauth_params),'User-Agent' => @userAgent}
36
- response = post_request(url,'',header)
37
-
38
- items = response.body.split('&')
39
- @request_token = items[0].split('=')[1]
40
- @request_token_secret = items[1].split('=')[1]
41
- return "https://api.twitter.com/oauth/authenticate?oauth_token=#{@request_token}"
42
-
43
- end
44
-
45
- def access_token(pin)
46
-
47
- oauth_params = oauth
48
- oauth_params.delete('oauth_token')
49
- oauth_params['oauth_verifier'] = pin.chomp
50
- oauth_params['oauth_token'] = @request_token
51
- base_params = Hash[oauth_params.sort]
52
- query = build_query(base_params)
53
- url = 'https://api.twitter.com/oauth/access_token'
54
- base = 'POST&' + escape(url) + '&' + escape(query)
55
- key = @consumer_key_secret + '&' + @request_token_secret
56
- oauth_params['oauth_signature'] = Base64.encode64(OpenSSL::HMAC.digest("sha1",key, base)).chomp
57
- header = {'Authorization' => 'OAuth ' + build_header(oauth_params),'User-Agent' => @userAgent}
58
- body = ''
59
- response = post_request(url,body,header)
60
-
61
- access_tokens = response.body.split('&')
62
- @access_token = access_tokens[0].split('=')[1]
63
- @access_token_secret = access_tokens[1].split('=')[1]
64
- @user_id = access_tokens[2].split('=')[1]
65
- @screen_name = access_tokens[3].split('=')[1]
66
- end
67
-
68
-
69
- def post(endpoint,additional_params = Hash.new)
70
-
71
- url = url(endpoint)
72
- header = signature('POST',url,additional_params)
73
- body = build_body(additional_params)
74
- response = post_request(url,body,header)
75
- return decode(response)
76
-
77
- end
78
-
79
- def get(endpoint,additional_params = Hash.new)
80
-
81
- url = url(endpoint)
82
- header = signature('GET',url,additional_params)
83
- body = build_body(additional_params)
84
- response = get_request(url,body,header)
85
- return decode(response)
86
-
87
- end
88
-
89
- def streaming(endpoint,additional_params = Hash.new)
90
-
91
- url = url(endpoint)
92
- header = signature('GET',url,additional_params)
93
- body = build_body(additional_params)
94
- buffer = ''
95
- streaming_request(url,body,header){|chunk|
96
- if buffer != ''
97
- chunk = buffer + chunk
98
- buffer = ''
99
- end
100
-
101
- begin
102
- status = JSON.parse(chunk)
103
- rescue
104
- buffer << chunk
105
- next
106
- end
107
-
108
- yield status
109
- }
260
+ end
110
261
 
111
- end
112
-
113
- private
114
- def signature(method,url,additional_params)
115
- oauth_params = oauth
116
- base_params = oauth_params.merge(additional_params)
117
- base_params = Hash[base_params.sort]
118
- query = build_query(base_params)
119
- base = method + '&' + escape(url) + '&' + escape(query)
120
- key = @consumer_key_secret + '&' + @access_token_secret
121
- oauth_params['oauth_signature'] = Base64.encode64(OpenSSL::HMAC.digest("sha1",key, base)).chomp
122
- header = {'Authorization' => 'OAuth ' + build_header(oauth_params),'User-Agent' => @userAgent}
123
- return header
124
- end
125
-
126
- def oauth
127
- {
128
- 'oauth_consumer_key' => @consumer_key,
129
- 'oauth_signature_method' => 'HMAC-SHA1',
130
- 'oauth_timestamp' => Time.now.to_i.to_s,
131
- 'oauth_version' => '1.0',
132
- 'oauth_nonce' => Random.new_seed.to_s,
133
- 'oauth_token' => @access_token
134
- }
135
- end
136
-
137
- def decode(response)
138
- if response.body == nil
139
- raise RTwitterException,'Failed to receive response.'
140
- end
141
- if response.body == ''
142
- raise RTwitterException,'Empty response.'
143
- end
144
- begin
145
- obj = JSON.parse(response.body)
146
- rescue
147
- return response.body
148
- end
149
- if obj.include?('error')
150
- raise RTwitterException,obj['error']
151
- end
152
- if obj.include?('errors')
153
- if obj['errors'].kind_of?(String)
154
- raise RTwitterException,obj['errors']
155
- else
156
- messages = []
157
- obj['errors'].each{|errors|
158
- messages << errors['message']
159
- }
160
- raise RTwitterException,messages.join("\n")
161
- end
162
- end
163
- return obj
164
- end
165
-
166
-
167
- def escape(value)
168
-
169
- URI.escape(value.to_s,/[^a-zA-Z0-9\-\.\_\~]/)
170
-
171
- end
172
-
173
- def post_request(url,body,header)
174
-
175
- uri = URI.parse(url)
176
- https = Net::HTTP.new(uri.host, uri.port)
177
- if uri.port == 443
178
- https.use_ssl = true
179
- https.verify_mode = OpenSSL::SSL::VERIFY_NONE
180
- end
181
- response = https.start{|https|
182
- https.post(uri.request_uri,body,header)
183
- }
184
- return response
185
-
186
- end
187
-
188
- def get_request(url,body,header)
189
-
190
- uri = URI.parse(url)
191
- https = Net::HTTP.new(uri.host, uri.port)
192
- if uri.port == 443
193
- https.use_ssl = true
194
- https.verify_mode = OpenSSL::SSL::VERIFY_NONE
195
- end
196
- response = https.start{|https|
197
- https.get(uri.request_uri + '?' + body, header)
198
- }
199
- return response
200
-
201
- end
202
-
203
- def streaming_request(url,body,header)
204
-
205
- uri = URI.parse(url)
206
- https = Net::HTTP.new(uri.host, uri.port)
207
- if uri.port == 443
208
- https.use_ssl = true
209
- https.verify_mode = OpenSSL::SSL::VERIFY_NONE
210
- end
211
- request = Net::HTTP::Get.new(uri.request_uri + '?' + body,header)
212
- https.request(request){|response|
213
- response.read_body{|chunk|
214
- yield chunk
215
- }
216
- }
217
-
218
- end
219
-
220
- def url(endpoint)
221
-
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
263
-
264
- class RTwitterException < RuntimeError; end
265
- end
262
+ class RTwitterException < RuntimeError; end
263
+ end
266
264
 
267
265
  end
metadata CHANGED
@@ -1,46 +1,41 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: RTwitter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
5
- prerelease:
4
+ version: 0.0.3
6
5
  platform: ruby
7
6
  authors:
8
7
  - Seurix
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2015-01-30 00:00:00.000000000 Z
11
+ date: 2015-02-01 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: bundler
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ~>
17
+ - - "~>"
20
18
  - !ruby/object:Gem::Version
21
19
  version: '1.3'
22
20
  type: :development
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ~>
24
+ - - "~>"
28
25
  - !ruby/object:Gem::Version
29
26
  version: '1.3'
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: rake
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - ! '>='
31
+ - - ">="
36
32
  - !ruby/object:Gem::Version
37
33
  version: '0'
38
34
  type: :development
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
- - - ! '>='
38
+ - - ">="
44
39
  - !ruby/object:Gem::Version
45
40
  version: '0'
46
41
  description: Twitter OAuth Library for Ruby
@@ -50,7 +45,7 @@ executables: []
50
45
  extensions: []
51
46
  extra_rdoc_files: []
52
47
  files:
53
- - .gitignore
48
+ - ".gitignore"
54
49
  - Gemfile
55
50
  - LICENSE.txt
56
51
  - README.md
@@ -58,35 +53,29 @@ files:
58
53
  - Rakefile
59
54
  - lib/RTwitter.rb
60
55
  - lib/RTwitter/version.rb
56
+ - lib/RTwitter/version.rb~
61
57
  homepage: ''
62
58
  licenses:
63
59
  - MIT
60
+ metadata: {}
64
61
  post_install_message:
65
62
  rdoc_options: []
66
63
  require_paths:
67
64
  - lib
68
65
  required_ruby_version: !ruby/object:Gem::Requirement
69
- none: false
70
66
  requirements:
71
- - - ! '>='
67
+ - - ">="
72
68
  - !ruby/object:Gem::Version
73
69
  version: '0'
74
- segments:
75
- - 0
76
- hash: -2960072803349443897
77
70
  required_rubygems_version: !ruby/object:Gem::Requirement
78
- none: false
79
71
  requirements:
80
- - - ! '>='
72
+ - - ">="
81
73
  - !ruby/object:Gem::Version
82
74
  version: '0'
83
- segments:
84
- - 0
85
- hash: -2960072803349443897
86
75
  requirements: []
87
76
  rubyforge_project:
88
- rubygems_version: 1.8.23
77
+ rubygems_version: 2.2.2
89
78
  signing_key:
90
- specification_version: 3
79
+ specification_version: 4
91
80
  summary: Twitter OAuth Library for Ruby
92
81
  test_files: []