datasift 3.1.0 → 3.1.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: dac333f752e67d6791b6bc3936553e01ab09f2c6
4
- data.tar.gz: 7f02d47c1cb8103e1f7315a10365c21c512e8521
3
+ metadata.gz: fa899a750cdf5d358c93ab071c4dc35c796f3114
4
+ data.tar.gz: 2d2a1b150ec62f0e689be3ebf48749183e5d5fba
5
5
  SHA512:
6
- metadata.gz: 2cbf887afc303ce2f470d1beaa3adf92f010b46b9abc58025769ca5828acf542efdf85e343a0b51af39a62fca73e6637a6403f2a43322c3a3a756b2e27ba3933
7
- data.tar.gz: 0033b783f9dc01b1f846be11fbb751c335274bd896198584c9b900fa338d9b5e07fd85686eee90404fc61749f49f54431cbe070d402213ae7b547a0356c6b4d6
6
+ metadata.gz: 7931605c899901c11f9563d31b695a1b41f8dc9fe3d5c7de8204e06eb272620502064ea212cb620586f2da80507b12ab85d1c6e892e1b6a3102d86e3e1bba28b
7
+ data.tar.gz: 5ad02f8dd35ca6f4bd6230087a70d5145482f2778d9b9fe86e335cca5703afad257ca28395bc7fe0642c91bccc4e22ec98a5e650ab47db17a5238249c4d8090c
@@ -1,6 +1,12 @@
1
1
  CHANGELOG
2
2
  ================================
3
3
 
4
+ v.3.1.1 (2014-08-14)
5
+ --------------------
6
+
7
+ ####Fixes
8
+ Resolves [#59](https://github.com/datasift/datasift-ruby/issues/59); we now use CGI.escape rather than URI.escape to ensure special characters such as '+' or '\' are escaped correctly when submitted.
9
+
4
10
  v.3.1.0 (2014-07-30)
5
11
  --------------------
6
12
 
data/README.md CHANGED
@@ -1,20 +1,31 @@
1
1
  DataSift
2
2
  ========
3
3
 
4
+ [![Gem Version](http://img.shields.io/gem/v/datasift.svg)][gem]
5
+ [![Build Status](http://img.shields.io/travis/datasift/datasift-ruby.svg)][travis]
6
+
7
+ [gem]: https://rubygems.org/gems/datasift
8
+ [travis]: https://travis-ci.org/datasift/datasift-ruby
9
+
10
+
4
11
  The official Ruby library for accessing the DataSift API. See
5
- http://datasift.com/ for full details and to sign up for an account.
12
+ [datasift.com](http://datasift.com/) for full details and to sign up for an account.
6
13
 
7
14
  Install Instructions
8
15
  --------------------
9
16
 
17
+ ```
10
18
  sudo gem install datasift
19
+ ```
11
20
 
12
21
  Dependencies
13
22
  ------------
14
23
 
15
24
  If you're using the source you'll need to install the dependencies.
16
25
 
26
+ ```
17
27
  sudo gem install rest-client multi_json websocket-td
28
+ ```
18
29
 
19
30
  The library will use SSL connections by default. While we recommend using SSL
20
31
  you may disable it if required by passing ':enable_ssl => false' as the third
@@ -24,7 +35,7 @@ Getting Started
24
35
  ---------------
25
36
  Before you can begin using this library, you will need to have an active [DataSift](http://datasift.com) account - you can sign up for a new account at [datasift.com/get-started](http://datasift.com/get-started/).
26
37
 
27
- Many of the examples and API endpoints used in this library require you have enabled certain data sources before you can receive any data (you should do this at [datasift.com/source](https://datasift.com/source)). Certain API features, such as [Historics](http://datasift.com/platform/historics/) and [Managed Sources](http://datasift.com/platform/datasources/) will require you have signed up to a monthly subscription before you can access them.
38
+ Many of the examples and API endpoints used in this library require you have enabled certain data sources before you can receive any data (you should do this at [datasift.com/source](https://datasift.com/source)). Certain API features, such as [Historics](http://datasift.com/platform/historics/) and [Managed Sources](http://datasift.com/platform/datasources/) will require you have signed up to a monthly subscription before you can access them.
28
39
 
29
40
  If you are interested in using these features, or would like more information about DataSift, please [get in touch](http://datasift.com/contact-us/)!
30
41
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 3.1.0
1
+ 3.1.1
@@ -15,12 +15,12 @@ Gem::Specification.new do |s|
15
15
  s.add_runtime_dependency('multi_json', '~> 1.8.0')
16
16
  s.add_runtime_dependency('websocket-td', '~> 0.0.4')
17
17
 
18
- s.add_development_dependency('rdoc', '~> 0')
18
+ s.add_development_dependency('rdoc', '>= 0')
19
19
  s.add_development_dependency('webmock', '~> 1.17.1')
20
20
  s.add_development_dependency('shoulda', '~> 2.11.3')
21
21
  s.add_development_dependency('minitest', '~> 5.0')
22
- s.add_development_dependency('rake', '~> 0')
23
- s.add_development_dependency('simplecov', '~> 0')
22
+ s.add_development_dependency('rake', '>= 0')
23
+ s.add_development_dependency('simplecov', '>= 0')
24
24
 
25
25
  s.files = `git ls-files`.split("\n")
26
26
  s.test_files = `git ls-files -- {test}/*`.split("\n")
@@ -6,19 +6,25 @@ class DataSiftExample
6
6
  @api_key = 'DATASIFT_API_KEY'
7
7
  @config = {:username => @username, :api_key => @api_key, :enable_ssl => true}
8
8
  @params = {
9
- :output_type => 's3',
10
- 'output_params.bucket' => 'YOUR_BUCKET_NAME',
11
- 'output_params.directory' => 'ruby',
12
- 'output_params.acl' => 'private',
13
- 'output_params.auth.access_key' => 'ADD_YOUR_ACCESS_KEY',
14
- 'output_params.auth.secret_key' => 'ADD_YOUR_SECRET_KEY',
15
- 'output_params.delivery_frequency' => 0,
16
- 'output_params.max_size' => 104857600,
17
- 'output_params.file_prefix' => 'DataSift',
9
+ :output_type => 's3',
10
+ :output_params => {
11
+ :bucket => 'YOUR_BUCKET_NAME',
12
+ :directory => 'ruby',
13
+ :acl => 'private',
14
+ :delivery_frequency => 0,
15
+ :max_size => 104857600,
16
+ :file_prefix => 'DataSift',
17
+ :auth => {
18
+ :access_key => 'ADD_YOUR_ACCESS_KEY',
19
+ :secret_key => 'ADD_YOUR_SECRET_KEY',
20
+ }
21
+ }
18
22
  }
19
23
  @pull_params = {
20
24
  :output_type => 'pull',
21
- 'output_params.max_size' => 52428800
25
+ :output_params => {
26
+ :max_size => 52428800
27
+ }
22
28
  }
23
29
  @datasift = DataSift::Client.new(@config)
24
30
  end
@@ -1,6 +1,7 @@
1
1
  dir = File.dirname(__FILE__)
2
2
  #
3
3
  require 'uri'
4
+ require 'cgi'
4
5
  require 'rest_client'
5
6
  require 'multi_json'
6
7
  require 'websocket_td'
@@ -134,9 +135,9 @@ module DataSift
134
135
  url = build_url(path, config)
135
136
 
136
137
  headers.update ({
137
- :user_agent => "DataSift/#{config[:api_version]} Ruby/v#{VERSION}",
138
- :authorization => "#{config[:username]}:#{config[:api_key]}",
139
- :content_type => 'application/x-www-form-urlencoded'
138
+ :user_agent => "DataSift/#{config[:api_version]} Ruby/v#{VERSION}",
139
+ :authorization => "#{config[:username]}:#{config[:api_key]}",
140
+ :content_type => 'application/x-www-form-urlencoded'
140
141
  })
141
142
 
142
143
  case method.to_s.downcase.to_sym
@@ -144,19 +145,18 @@ module DataSift
144
145
  url += "#{URI.parse(url).query ? '&' : '?'}#{encode params}"
145
146
  payload = nil
146
147
  else
147
- #payload = encode params
148
148
  payload = MultiJson.dump(params)
149
149
  headers.update ({ :content_type => 'application/json' })
150
150
  end
151
151
 
152
152
  options.update(
153
- :headers => headers,
154
- :method => method,
155
- :open_timeout => open_timeout,
156
- :timeout => timeout,
157
- :payload => payload,
158
- :url => url,
159
- :ssl_version => 'TLSv1'
153
+ :headers => headers,
154
+ :method => method,
155
+ :open_timeout => open_timeout,
156
+ :timeout => timeout,
157
+ :payload => payload,
158
+ :url => url,
159
+ :ssl_version => 'TLSv1'
160
160
  )
161
161
 
162
162
  begin
@@ -179,16 +179,16 @@ module DataSift
179
179
  data = {}
180
180
  end
181
181
  {
182
- :data => data,
183
- :datasift => {
184
- :x_ratelimit_limit => response.headers[:x_ratelimit_limit],
185
- :x_ratelimit_remaining => response.headers[:x_ratelimit_remaining],
186
- :x_ratelimit_cost => response.headers[:x_ratelimit_cost]
187
- },
188
- :http => {
189
- :status => response.code,
190
- :headers => response.headers
191
- }
182
+ :data => data,
183
+ :datasift => {
184
+ :x_ratelimit_limit => response.headers[:x_ratelimit_limit],
185
+ :x_ratelimit_remaining => response.headers[:x_ratelimit_remaining],
186
+ :x_ratelimit_cost => response.headers[:x_ratelimit_cost]
187
+ },
188
+ :http => {
189
+ :status => response.code,
190
+ :headers => response.headers
191
+ }
192
192
  }
193
193
  rescue MultiJson::DecodeError => de
194
194
  raise DataSiftError.new response
@@ -228,7 +228,7 @@ module DataSift
228
228
  end
229
229
 
230
230
  def self.encode params
231
- URI.escape(params.collect { |k, v| "#{k}=#{v}" }.join('&'))
231
+ params.collect { |param, value| [param, CGI.escape(value.to_s)].join('=') }.join('&')
232
232
  end
233
233
 
234
234
  def self.handle_api_error(code, body)
@@ -282,7 +282,7 @@ module DataSift
282
282
  stream.on_ping = lambda { |data|
283
283
  KNOWN_SOCKETS[connection] = Time.new.to_i
284
284
  }
285
- stream.on_open =lambda {
285
+ stream.on_open = lambda {
286
286
  connection.connected = true
287
287
  connection.retry_timeout = 0
288
288
  on_open.call(connection) if on_open != nil
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: datasift
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.1.0
4
+ version: 3.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - DataSift
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-08-13 00:00:00.000000000 Z
11
+ date: 2014-08-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rest-client
@@ -56,14 +56,14 @@ dependencies:
56
56
  name: rdoc
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - "~>"
59
+ - - ">="
60
60
  - !ruby/object:Gem::Version
61
61
  version: '0'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - "~>"
66
+ - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  - !ruby/object:Gem::Dependency
@@ -112,28 +112,28 @@ dependencies:
112
112
  name: rake
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
- - - "~>"
115
+ - - ">="
116
116
  - !ruby/object:Gem::Version
117
117
  version: '0'
118
118
  type: :development
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
- - - "~>"
122
+ - - ">="
123
123
  - !ruby/object:Gem::Version
124
124
  version: '0'
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: simplecov
127
127
  requirement: !ruby/object:Gem::Requirement
128
128
  requirements:
129
- - - "~>"
129
+ - - ">="
130
130
  - !ruby/object:Gem::Version
131
131
  version: '0'
132
132
  type: :development
133
133
  prerelease: false
134
134
  version_requirements: !ruby/object:Gem::Requirement
135
135
  requirements:
136
- - - "~>"
136
+ - - ">="
137
137
  - !ruby/object:Gem::Version
138
138
  version: '0'
139
139
  description: The official Ruby library for accessing the DataSift API. See http://datasift.com/
@@ -165,7 +165,6 @@ files:
165
165
  - examples/managed_source_eg.rb
166
166
  - examples/pull.rb
167
167
  - examples/push_eg.rb
168
- - lib/DataSift/managed_source.rb
169
168
  - lib/api/api_resource.rb
170
169
  - lib/cli.rb
171
170
  - lib/datasift.rb
@@ -1,263 +0,0 @@
1
- require 'yajl/json_gem'
2
- ### Usage ###
3
- # user = DataSift::User.new(config['username'], config['api_key'])
4
- # user.createManagedSource(:token => "CAAIUKbXn8xsBAILlxGCZADEZAM87tRqJXo9OqWskCs6jej3wfQ1LRRZAgHJQEZCHU0ABBXDwiq9o7D4uytC5LpsAcx7oiDusagsJiKtmPaZBeMkuGh4jYt1zsXo4EQuZCWPcZAIdQQLZBtjTpQlbbAZCTuJ4SSrlmOPQZD", :source_type => "facebook_page", :name => "test", :parameters=> {:likes => true, :posts_by_others => true, :comments => true}, :resources => [{ :url => "http://www.facebook.com/theguardian", :title => "The Guardian", :id => 10513336322 } ] )
5
-
6
- module DataSift
7
- #The ManagedSource class represents a ManagedSource query.
8
- class ManagedSource
9
- #The ID of this Managed Source
10
- attr_reader :managed_source_id
11
- #The Managed Source type
12
- attr_reader :source_type
13
- #The current status of this Managed Source.
14
- attr_reader :status
15
- #The title for this Managed Source.
16
- attr_reader :name
17
- #The date/time when this Managed Source was created.
18
- attr_reader :created_at
19
- #The Managed Source source_type
20
- attr_reader :source_type
21
- #The Managed Source parameters
22
- attr_reader :parameters
23
- #The Managed Source resources
24
- attr_reader :resources
25
- #The Managed Source token
26
- attr_reader :token
27
- #The Managed Source auth
28
- attr_reader :auth
29
- #Api raw response
30
- attr_reader :raw_attributes
31
-
32
- #Constructor. Pass all parameters to create a new Managed Source, or provide a User object and a managed_source_id to load an existing Managed Source from the API.
33
- #=== Parameters
34
- #* +user+ - The DataSift::User object.
35
- def initialize(user, hash)
36
- raise InvalidDataError, 'Please supply a valid User object when creating a Managed Source object.' unless user.is_a? DataSift::User
37
- @user = user
38
-
39
- if hash.kind_of?(Hash)
40
- if hash.has_key?('id')
41
- # Initialising from an array
42
- @managed_source_id = hash['id']
43
- initFromArray(hash)
44
- else
45
- @source_type = hash[:source_type]
46
- @name = hash[:name]
47
- @parameters = hash[:parameters]
48
- @resources = hash[:resources]
49
- @auth = hash[:auth]
50
- end
51
- else
52
- # Fetching from the API
53
- @managed_source_id = hash
54
- reloadData()
55
- end
56
- end
57
-
58
- #Get a single Managed Source by ID.
59
- #=== Parameters
60
- #* +id+ - The Managed Source ID.
61
- #=== Returns
62
- #A ManagedSource object
63
- def self.get(user, managed_source_id)
64
- return new(user, user.callAPI('source/get', { 'id' => managed_source_id }))
65
- end
66
-
67
- def self.list(user, page = 1, per_page = 20, source_type = '')
68
- begin
69
- res = user.callAPI(
70
- 'source/get', {
71
- 'page' => page,
72
- 'per_page' => per_page,
73
- 'source_type' => source_type
74
- })
75
- retval = { 'count' => res['count'], 'managed_sources' => [] }
76
- for source in res['sources']
77
- retval['managed_sources'].push(new(user, source))
78
- end
79
- retval
80
- rescue APIError => err
81
- case err.http_code
82
- when 400
83
- #Missing or invalid parameters
84
- raise InvalidDataError, err
85
- else
86
- raise APIError.new(err.http_code), 'Unexpected APIError code: ' + err.http_code.to_s + ' [' + err.message + ']'
87
- end
88
- end
89
- end
90
-
91
- #Call the DataSift API to create the Managed Source
92
- def create()
93
- raise InvalidDataError, 'This Managed Source has already been created' unless not @managed_source_id
94
-
95
- begin
96
- res = @user.callAPI(
97
- 'source/create', {
98
- 'source_type' => @source_type,
99
- 'name' => @name,
100
- 'parameters' => @parameters.to_json,
101
- 'resources' => @resources.to_json,
102
- 'auth' => @auth.to_json
103
- })
104
- raise InvalidDataError, 'Prepared successfully but no managed_source_id ID in the response' unless res.has_key?('id')
105
- @managed_source_id = res['id']
106
-
107
- rescue APIError => err
108
- case err.http_code
109
- when 400
110
- raise InvalidDataError, err
111
- else
112
- raise APIError.new(err.http_code), 'Unexpected APIError code: ' + err.http_code.to_s + ' [' + err.message + ']'
113
- end
114
- end
115
-
116
- # Reload the data so we get the created_at date, initial status and the rest.
117
- reloadData()
118
- end
119
-
120
- #Reload the data for this object from the API.
121
- def reloadData()
122
- #Can't do this without a playback ID
123
- raise InvalidDataError, 'Cannot reload the data with a Managed Source with no Managed Source ID' unless @managed_source_id
124
-
125
- begin
126
- initFromArray(@user.callAPI('source/get', { 'id' => @managed_source_id }))
127
- rescue APIError => err
128
- case err.http_code
129
- when 400
130
- raise InvalidDataError, err
131
- else
132
- raise APIError.new(err.http_code), 'Unexpected APIError code: ' + err.http_code.to_s + ' [' + err.message + ']'
133
- end
134
- end
135
- end
136
-
137
- #Initialise this object from the data in a Hash.
138
- #=== Parameters
139
- #* +data+ - The Hash containing the data.
140
- def initFromArray(data)
141
- raise APIError, 'No managed source ID in the response' unless data.has_key?('id')
142
- raise APIError, 'Incorrect managed source ID in the response' unless not @managed_source_id or data['id'] == @managed_source_id
143
- @managed_source_id = data['id']
144
-
145
- raise APIError, 'No name in the response' unless data.has_key?('name')
146
- @name = data['name']
147
-
148
- raise APIError, 'No auth in the response' unless data.has_key?('auth')
149
- @auth = data['auth']
150
-
151
- raise APIError, 'No created at timstamp in the response' unless data.has_key?('created_at')
152
- @created_at = DateTime.strptime(String(data['created_at']), '%s')
153
-
154
- raise APIError, 'No status in the response' unless data.has_key?('status')
155
- @status = data['status']
156
-
157
- raise APIError, 'No source_type in the response' unless data.has_key?('source_type')
158
- @source_type = data['source_type']
159
-
160
- raise APIError, 'No parameters in the response' unless data.has_key?('parameters')
161
- @parameters = data['parameters']
162
-
163
- raise APIError, 'No resources in the response' unless data.has_key?('resources')
164
- @resources = data['resources']
165
-
166
- @raw_attributes = data
167
-
168
- return true
169
- end
170
-
171
- #Start this Managed Source query.
172
- def start()
173
- raise InvalidDataError, 'Cannot start a Managed souce query that hasn\'t been created' unless @managed_source_id
174
-
175
- begin
176
- res = @user.callAPI('source/start', { 'id' => @managed_source_id })
177
- rescue APIError => err
178
- case err.http_code
179
- when 400
180
- # Missing or invalid parameters
181
- raise InvalidDataError, err
182
- when 404
183
- # Managed Source not found
184
- raise InvalidDataError, err
185
- else
186
- raise APIError.new(err.http_code), 'Unexpected APIError code: ' + err.http_code.to_s + ' [' + err.message + ']'
187
- end
188
- end
189
- end
190
-
191
- #Stop this Managed Source
192
- def stop()
193
- raise InvalidDataError, 'Cannot stop a Managed Source query that hasn\'t been prepared' unless @managed_source_id
194
-
195
- begin
196
- res = @user.callAPI('source/stop', { 'id' => @managed_source_id })
197
- rescue APIError => err
198
- case err.http_code
199
- when 400
200
- # Missing or invalid parameters
201
- raise InvalidDataError, err
202
- when 404
203
- # Managed Source not found
204
- raise InvalidDataError, err
205
- else
206
- raise APIError.new(err.http_code), 'Unexpected APIError code: ' + err.http_code.to_s + ' [' + err.message + ']'
207
- end
208
- end
209
- end
210
-
211
- #Delete this Managed Source
212
- def delete()
213
- raise InvalidDataError, 'Cannot delete a Managed source query that hasn\'t been prepared' unless @managed_source_id
214
-
215
- begin
216
- @user.callAPI('source/delete', { 'id' => @managed_source_id })
217
- rescue APIError => err
218
- case err.http_code
219
- when 400
220
- # Missing or invalid parameters
221
- raise InvalidDataError, err
222
- when 404
223
- # Managed Source not found
224
- raise InvalidDataError, err
225
- else
226
- raise APIError.new(err.http_code), 'Unexpected APIError code: ' + err.http_code.to_s + ' [' + err.message + ']'
227
- end
228
- end
229
- end
230
-
231
- #Page through recent Managed Sources log entries
232
- #=== Parameters
233
- #* +page+ - The page number to get.
234
- #* +per_page+ - The number of items per page.
235
- #=== Returns
236
- #A Hash containing...
237
- #* +count+ - The total number of matching log entries.
238
- #* +log_entries+ - An array of Hashes where each Hash is a log entry.
239
- def getLogs(page = 1, per_page = 20)
240
- begin
241
- raise InvalidDataError, 'The specified page number is invalid' unless page >= 1
242
- raise InvalidDataError, 'The specified per_page value is invalid' unless per_page >= 1
243
-
244
- params = {
245
- 'id' => @managed_source_id,
246
- 'page' => page,
247
- 'per_page' => per_page
248
- }
249
-
250
- return @user.callAPI('source/log', params)
251
- rescue APIError => err
252
- case err.http_code
253
- when 400
254
- # Missing or invalid parameters
255
- raise InvalidDataError, err
256
- else
257
- raise APIError.new(err.http_code), 'Unexpected APIError code: ' + err.http_code.to_s + ' [' + err.message + ']'
258
- end
259
- end
260
- end
261
-
262
- end
263
- end