RTwitter 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 96b404ddc6ef515acdeb28262a93c33d9094a60e
4
- data.tar.gz: bd338fc5accfd0f75b0d81501263f54537faf7f5
3
+ metadata.gz: ab110e49d14b4ef6e13816e0395a5c61686e1d66
4
+ data.tar.gz: e6a0318dde783f2904fc19e9e0244f21cfa29392
5
5
  SHA512:
6
- metadata.gz: 36f9e66987d6698b9d14ecf970f6e46f51dd3cad5d7963709b216cbc54442300bcdbb3075eace9dc6f956a57abe322eba2f37148bb3b845e1c911e1648a6637c
7
- data.tar.gz: 8ab3a89014c7068b67358116c346cd043b9b5dbbf4bfd3ec5a73211b3176c4192cb569c55999ed32e2e39d6fe31d2df45fc5b0d67b4d6d958e5e220cf4cc02b8
6
+ metadata.gz: df12b3155ab1b75648430f23727c688a4103e7bbea580f8b3cf7165cfdb0ae9481e17782c68005bb7222ffcd1f190939b9e72358f2bdf7ac841f9d434f93ce86
7
+ data.tar.gz: f2490455e60ac9c9514c4908df0d9e0b0fdf648cf95e553d8cc5003ea0b2d1e1be629185d29a78517c904abfcac00f067351220e6ac35bb9d1fc8631006feced
@@ -1,3 +1,3 @@
1
1
  module RTwitter
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
@@ -1,3 +1,3 @@
1
1
  module RTwitter
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
data/lib/RTwitter.rb CHANGED
@@ -18,8 +18,6 @@ module RTwitter
18
18
  @access_token_secret = ats
19
19
  @userAgent = 'RTwitter'
20
20
  end
21
-
22
-
23
21
  def request_token
24
22
 
25
23
  oauth_params = oauth
@@ -216,7 +214,9 @@ module RTwitter
216
214
  end
217
215
 
218
216
  def url(endpoint)
219
-
217
+ if /^https:/ =~ endpoint
218
+ return endpoint
219
+ end
220
220
  list = {
221
221
  'media/upload' => 'https://upload.twitter.com/1.1/media/upload.json',
222
222
  'statuses/filter' => 'https://stream.twitter.com/1.1/statuses/filter.json',
data/lib/RTwitter.rb~ ADDED
@@ -0,0 +1,265 @@
1
+ require "RTwitter/version"
2
+
3
+ require'base64'
4
+ require'openssl'
5
+ require'uri'
6
+ require'json'
7
+ require'net/http'
8
+
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
261
+
262
+ class RTwitterException < RuntimeError; end
263
+ end
264
+
265
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: RTwitter
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
  - Seurix
@@ -52,6 +52,7 @@ files:
52
52
  - RTwitter.gemspec
53
53
  - Rakefile
54
54
  - lib/RTwitter.rb
55
+ - lib/RTwitter.rb~
55
56
  - lib/RTwitter/version.rb
56
57
  - lib/RTwitter/version.rb~
57
58
  homepage: ''