RTwitter 0.0.2 → 0.0.3

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 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: []