datasift 1.3.1 → 1.4.0
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.
- data/Gemfile +2 -0
- data/README.md +10 -0
- data/VERSION +1 -1
- data/config.yml +2 -2
- data/datasift.gemspec +1 -1
- data/lib/DataSift/apiclient.rb +3 -2
- data/lib/DataSift/mockapiclient.rb +1 -1
- data/lib/DataSift/stream_consumer_http.rb +24 -13
- data/lib/DataSift/user.rb +10 -4
- metadata +10 -9
data/Gemfile
ADDED
data/README.md
CHANGED
@@ -18,6 +18,10 @@ If you're using the source you'll need to install the dependencies.
|
|
18
18
|
|
19
19
|
sudo gem install yajl-ruby rest-client
|
20
20
|
|
21
|
+
The library will use SSL connections by default. While we recommend using SSL
|
22
|
+
you may disable it if required by passing false as the third parameter when
|
23
|
+
creating a user, or by calling user.enableSSL(false) on the user object.
|
24
|
+
|
21
25
|
Simple example
|
22
26
|
--------------
|
23
27
|
|
@@ -52,6 +56,12 @@ more details.
|
|
52
56
|
Changelog
|
53
57
|
---------
|
54
58
|
|
59
|
+
* v.1.4.0 Added SSL support (2012-05-15)
|
60
|
+
|
61
|
+
This is enabled by default and can be disabled by passing false as the third
|
62
|
+
parameter to the User constructor, or calling enableSSL(false) on the User
|
63
|
+
object.
|
64
|
+
|
55
65
|
* v.1.3.1 Exposed compile failures when getting the stream hash (2012-04-20)
|
56
66
|
|
57
67
|
* v.1.3.0 Improved error handling (2012-03-08)
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.
|
1
|
+
1.4.0
|
data/config.yml
CHANGED
@@ -1,2 +1,2 @@
|
|
1
|
-
username:
|
2
|
-
api_key:
|
1
|
+
username: YOUR_USERNAME_HERE
|
2
|
+
api_key: YOUR_API_KEY_HERE
|
data/datasift.gemspec
CHANGED
@@ -16,7 +16,7 @@ Gem::Specification.new do |s|
|
|
16
16
|
s.required_rubygems_version = Gem::Requirement.new(">= 1.3.6") if s.respond_to? :required_rubygems_version=
|
17
17
|
|
18
18
|
s.add_runtime_dependency('rest-client', '~> 1.6.3')
|
19
|
-
s.add_runtime_dependency('yajl-ruby', '~>
|
19
|
+
s.add_runtime_dependency('yajl-ruby', '~> 1.1.0')
|
20
20
|
s.add_development_dependency('rdoc', '~> 0')
|
21
21
|
s.add_development_dependency('shoulda', '~> 2.11.3')
|
22
22
|
s.add_development_dependency('rspec', '~> 2.6.0')
|
data/lib/DataSift/apiclient.rb
CHANGED
@@ -27,9 +27,9 @@ module DataSift
|
|
27
27
|
# * +params+ - The parameters to be passed along with the request.
|
28
28
|
# * +username+ - The username for the Auth header
|
29
29
|
# * +api_key+ - The API key for the Auth header
|
30
|
-
def call(username, api_key, endpoint, params = {}, user_agent = 'DataSiftPHP/0.0')
|
30
|
+
def call(username, api_key, endpoint, params = {}, user_agent = 'DataSiftPHP/0.0', ssl = true)
|
31
31
|
# Build the full endpoint URL
|
32
|
-
url = 'http://' + User::API_BASE_URL + endpoint
|
32
|
+
url = 'http' + (ssl ? 's' : '') + '://' + User::API_BASE_URL + endpoint
|
33
33
|
|
34
34
|
retval = {
|
35
35
|
'response_code' => 500,
|
@@ -47,6 +47,7 @@ module DataSift
|
|
47
47
|
|
48
48
|
# Parse the JSON response
|
49
49
|
retval['data'] = Yajl::Parser.parse(res)
|
50
|
+
|
50
51
|
# Rate limit headers
|
51
52
|
if (res.headers[:x_ratelimit_limit])
|
52
53
|
retval['rate_limit'] = res.headers[:x_ratelimit_limit]
|
@@ -45,7 +45,7 @@ module DataSift
|
|
45
45
|
# * +params+ - The parameters to be passed along with the request.
|
46
46
|
# * +username+ - The username for the Auth header
|
47
47
|
# * +api_key+ - The API key for the Auth header
|
48
|
-
def call(username, api_key, endpoint, params = {}, user_agent = 'DataSiftPHP/0.0')
|
48
|
+
def call(username, api_key, endpoint, params = {}, user_agent = 'DataSiftPHP/0.0', use_ssl = true)
|
49
49
|
if !@response
|
50
50
|
raise StandardError, 'Expected response not set in mock object'
|
51
51
|
end
|
@@ -85,9 +85,10 @@ module DataSift
|
|
85
85
|
onStop(@stop_reason)
|
86
86
|
end
|
87
87
|
|
88
|
+
private
|
89
|
+
|
88
90
|
def reconnect()
|
89
|
-
uri = URI.parse('http://' + User::STREAM_BASE_URL + @definition.hash
|
90
|
-
'?username=' + CGI.escape(@user.username) + '&api_key=' + CGI.escape(@user.api_key))
|
91
|
+
uri = URI.parse('http' + (@user.use_ssl ? 's' : '') + '://' + User::STREAM_BASE_URL + @definition.hash)
|
91
92
|
|
92
93
|
user_agent = @user.getUserAgent()
|
93
94
|
|
@@ -95,6 +96,7 @@ module DataSift
|
|
95
96
|
request << "Host: #{uri.host}\r\n"
|
96
97
|
request << "User-Agent: #{user_agent}\r\n"
|
97
98
|
request << "Accept: */*\r\n"
|
99
|
+
request << "Auth: #{@user.username}:#{@user.api_key}\r\n"
|
98
100
|
request << "\r\n"
|
99
101
|
|
100
102
|
connection_delay = 0
|
@@ -107,7 +109,13 @@ module DataSift
|
|
107
109
|
sleep(connection_delay) if connection_delay > 0
|
108
110
|
|
109
111
|
begin
|
110
|
-
@
|
112
|
+
@raw_socket = TCPSocket.new(uri.host, uri.port)
|
113
|
+
if @user.use_ssl
|
114
|
+
@socket = OpenSSL::SSL::SSLSocket.new(@raw_socket)
|
115
|
+
@socket.connect
|
116
|
+
else
|
117
|
+
@socket = @raw_socket
|
118
|
+
end
|
111
119
|
|
112
120
|
@socket.write(request)
|
113
121
|
@response_head = {}
|
@@ -130,10 +138,12 @@ module DataSift
|
|
130
138
|
end
|
131
139
|
end
|
132
140
|
|
133
|
-
if @response_head[:code]
|
141
|
+
if @response_head[:code].nil?
|
142
|
+
raise StreamError, 'Socket connection refused'
|
143
|
+
elsif @response_head[:code] == 200
|
134
144
|
# Success!
|
135
145
|
@state = StreamConsumer::STATE_RUNNING
|
136
|
-
elsif @response_head[:code] >=
|
146
|
+
elsif @response_head[:code] >= 399 && @response_head[:code] < 500 && @response_head[:code] != 420
|
137
147
|
line = ''
|
138
148
|
while !@socket.eof? && line.length < 10
|
139
149
|
line = @socket.gets
|
@@ -153,20 +163,21 @@ module DataSift
|
|
153
163
|
raise StreamError, 'Connection refused: ' + @response_head[:code] + ' ' + @response_head[:msg]
|
154
164
|
end
|
155
165
|
end
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
166
|
+
rescue
|
167
|
+
if connection_delay == 0
|
168
|
+
connection_delay = 1
|
169
|
+
elsif connection_delay <= 16
|
170
|
+
connection_delay += 1
|
171
|
+
else
|
172
|
+
raise StreamError, 'Connection failed due to a network error'
|
173
|
+
end
|
164
174
|
end
|
165
175
|
end while @state != StreamConsumer::STATE_RUNNING
|
166
176
|
end
|
167
177
|
|
168
178
|
def disconnect()
|
169
179
|
@socket.close if !@socket.nil? and !@socket.closed?
|
180
|
+
@raw_socket.close if !@raw_socket.nil? and !@raw_socket.closed?
|
170
181
|
end
|
171
182
|
|
172
183
|
end
|
data/lib/DataSift/user.rb
CHANGED
@@ -19,11 +19,11 @@ module DataSift
|
|
19
19
|
# provides factory methods for all of the functionality in the API.
|
20
20
|
#
|
21
21
|
class User
|
22
|
-
USER_AGENT = 'DataSiftRuby/
|
22
|
+
USER_AGENT = 'DataSiftRuby/' + File.open(File.dirname(File.dirname(File.dirname(__FILE__))) + '/VERSION').first;
|
23
23
|
API_BASE_URL = 'api.datasift.com/';
|
24
24
|
STREAM_BASE_URL = 'stream.datasift.com/';
|
25
25
|
|
26
|
-
attr_reader :username, :api_key, :rate_limit, :rate_limit_remaining, :api_client
|
26
|
+
attr_reader :username, :api_key, :rate_limit, :rate_limit_remaining, :api_client, :use_ssl
|
27
27
|
|
28
28
|
# Constructor. A username and API key are required when constructing an
|
29
29
|
# instance of this class.
|
@@ -31,7 +31,7 @@ module DataSift
|
|
31
31
|
#
|
32
32
|
# * +username+ - The user's username
|
33
33
|
# * +api_key+ - The user's API key
|
34
|
-
def initialize(username, api_key)
|
34
|
+
def initialize(username, api_key, use_ssl = true)
|
35
35
|
username.strip!
|
36
36
|
api_key.strip!
|
37
37
|
|
@@ -41,6 +41,7 @@ module DataSift
|
|
41
41
|
@api_key = api_key
|
42
42
|
@rate_limit = -1;
|
43
43
|
@rate_limit_remaining = -1
|
44
|
+
@use_ssl = use_ssl
|
44
45
|
end
|
45
46
|
|
46
47
|
# Creates and returns a definition object.
|
@@ -87,6 +88,11 @@ module DataSift
|
|
87
88
|
@api_client = client
|
88
89
|
end
|
89
90
|
|
91
|
+
# Sets whether to use SSL for API and stream communication
|
92
|
+
def enableSSL(use_ssl = true)
|
93
|
+
@use_ssl = use_ssl
|
94
|
+
end
|
95
|
+
|
90
96
|
# Make a call to a DataSift API endpoint.
|
91
97
|
# === Parameters
|
92
98
|
#
|
@@ -97,7 +103,7 @@ module DataSift
|
|
97
103
|
@api_client = ApiClient.new()
|
98
104
|
end
|
99
105
|
|
100
|
-
res = @api_client.call(@username, @api_key, endpoint, params)
|
106
|
+
res = @api_client.call(@username, @api_key, endpoint, params, getUserAgent(), @use_ssl)
|
101
107
|
|
102
108
|
# Set up the return value
|
103
109
|
retval = res['data']
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: datasift
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 7
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 1
|
8
|
-
-
|
9
|
-
-
|
10
|
-
version: 1.
|
8
|
+
- 4
|
9
|
+
- 0
|
10
|
+
version: 1.4.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- DataSift
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2012-
|
18
|
+
date: 2012-05-15 00:00:00 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
name: rest-client
|
@@ -41,12 +41,12 @@ dependencies:
|
|
41
41
|
requirements:
|
42
42
|
- - ~>
|
43
43
|
- !ruby/object:Gem::Version
|
44
|
-
hash:
|
44
|
+
hash: 19
|
45
45
|
segments:
|
46
|
+
- 1
|
47
|
+
- 1
|
46
48
|
- 0
|
47
|
-
|
48
|
-
- 2
|
49
|
-
version: 0.8.2
|
49
|
+
version: 1.1.0
|
50
50
|
type: :runtime
|
51
51
|
version_requirements: *id002
|
52
52
|
- !ruby/object:Gem::Dependency
|
@@ -106,6 +106,7 @@ extra_rdoc_files: []
|
|
106
106
|
|
107
107
|
files:
|
108
108
|
- .gitignore
|
109
|
+
- Gemfile
|
109
110
|
- LICENSE
|
110
111
|
- README.md
|
111
112
|
- Rakefile
|