datasift 1.5.0 → 2.0.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.
Files changed (47) hide show
  1. data/.gitignore +1 -0
  2. data/LICENSE +1 -1
  3. data/README.md +6 -4
  4. data/VERSION +1 -1
  5. data/config.yml +2 -2
  6. data/datasift.gemspec +11 -11
  7. data/examples/historics.sh +2 -0
  8. data/examples/historics/create-from-csdl.rb +71 -0
  9. data/examples/historics/create-from-hash.rb +65 -0
  10. data/examples/historics/delete.rb +30 -0
  11. data/examples/historics/env.rb +37 -0
  12. data/examples/historics/list.rb +30 -0
  13. data/examples/historics/start.rb +30 -0
  14. data/examples/historics/stop.rb +30 -0
  15. data/examples/historics/view.rb +28 -0
  16. data/examples/push.sh +2 -0
  17. data/examples/push/delete.rb +33 -0
  18. data/examples/push/env.rb +53 -0
  19. data/examples/push/list.rb +30 -0
  20. data/examples/push/pause.rb +33 -0
  21. data/examples/push/push-from-hash.rb +72 -0
  22. data/examples/push/push-historic-from-csdl.rb +98 -0
  23. data/examples/push/push-stream-from-csdl.rb +70 -0
  24. data/examples/push/resume.rb +33 -0
  25. data/examples/push/stop.rb +33 -0
  26. data/examples/push/view-log.rb +45 -0
  27. data/examples/push/view.rb +31 -0
  28. data/lib/DataSift/apiclient.rb +20 -25
  29. data/lib/DataSift/definition.rb +97 -57
  30. data/lib/DataSift/exceptions.rb +25 -8
  31. data/lib/DataSift/historic.rb +321 -0
  32. data/lib/DataSift/mockapiclient.rb +23 -34
  33. data/lib/DataSift/push_definition.rb +115 -0
  34. data/lib/DataSift/push_subscription.rb +330 -0
  35. data/lib/DataSift/stream_consumer.rb +53 -70
  36. data/lib/DataSift/stream_consumer_http.rb +11 -15
  37. data/lib/DataSift/user.rb +189 -61
  38. data/lib/datasift.rb +5 -10
  39. data/test/helper.rb +80 -6
  40. data/test/test_definition.rb +0 -9
  41. data/test/test_historics.rb +233 -0
  42. data/test/test_pushdefinition.rb +92 -0
  43. data/test/test_pushsubscription.rb +17 -0
  44. data/test/test_user.rb +0 -6
  45. data/test/testdata.yml +26 -0
  46. metadata +38 -23
  47. data/test/test_live_api.rb +0 -100
data/.gitignore CHANGED
@@ -1,3 +1,4 @@
1
1
  .DS_Store
2
2
  sftp-config.json
3
3
  .idea/
4
+ rdoc/
data/LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2011 MediaSift Ltd
1
+ Copyright (c) 2011-2012 MediaSift Ltd
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining a copy
4
4
  of this software and associated documentation files (the "Software"), to deal
data/README.md CHANGED
@@ -2,9 +2,9 @@ DataSift
2
2
  ========
3
3
 
4
4
  The official Ruby library for accessing the DataSift API. See
5
- http://datasift.net for full details and to sign up for an account.
5
+ http://datasift.com/ for full details and to sign up for an account.
6
6
 
7
- The examples and tests use the username and API key in config.yml.
7
+ The examples use the username and API key in config.yml unless otherwise noted.
8
8
 
9
9
  Install Instructions
10
10
  --------------------
@@ -19,7 +19,7 @@ If you're using the source you'll need to install the dependencies.
19
19
  sudo gem install yajl-ruby rest-client
20
20
 
21
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
22
+ you may disable it if r§equired by passing false as the third parameter when
23
23
  creating a user, or by calling user.enableSSL(false) on the user object.
24
24
 
25
25
  Simple example
@@ -56,7 +56,9 @@ more details.
56
56
  Changelog
57
57
  ---------
58
58
 
59
- * v.1.5.0 Added getBalance to the User class [joncooper] (2012-05-24)
59
+ * v.2.0.0 Added support for Historics queries and Push delivery (2012-08-31)
60
+
61
+ * v.1.5.0 Added getBalance to the User class [joncooper](https://github.com/joncooper) (2012-05-24)
60
62
 
61
63
  * v.1.4.1 Fixed a minor bug in the SSL support (2012-05-15)
62
64
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.5.0
1
+ 2.0.0
data/config.yml CHANGED
@@ -1,2 +1,2 @@
1
- username: YOUR_USERNAME_HERE
2
- api_key: YOUR_API_KEY_HERE
1
+ username: 3ft9
2
+ api_key: 584b068700b016093686a8d3f95696ac
data/datasift.gemspec CHANGED
@@ -2,17 +2,17 @@
2
2
  $:.push File.expand_path("../lib", __FILE__)
3
3
 
4
4
  Gem::Specification.new do |s|
5
- s.name = 'datasift'
6
- s.version = File.open('VERSION').first
5
+ s.name = 'datasift'
6
+ s.version = File.open('VERSION').first
7
7
 
8
- s.authors = ['DataSift']
9
- s.email = ['support@datasift.net']
10
- s.description = %q{The official Ruby library for accessing the DataSift API. See http://datasift.com/ for full details and to sign up for an account.}
11
- s.summary = %q{DataSift is a simple wrapper for the DataSift API.}
12
- s.homepage = 'http://github.com/datasift/datasift-ruby'
8
+ s.authors = ['DataSift']
9
+ s.email = ['support@datasift.net']
10
+ s.description = %q{The official Ruby library for accessing the DataSift API. See http://datasift.com/ for full details and to sign up for an account.}
11
+ s.summary = %q{DataSift is a simple wrapper for the DataSift API.}
12
+ s.homepage = 'http://github.com/datasift/datasift-ruby'
13
13
 
14
- s.platform = Gem::Platform::RUBY
15
- s.rubygems_version = %q{1.3.6}
14
+ s.platform = Gem::Platform::RUBY
15
+ s.rubygems_version = %q{1.3.6}
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')
@@ -21,7 +21,7 @@ Gem::Specification.new do |s|
21
21
  s.add_development_dependency('shoulda', '~> 2.11.3')
22
22
  s.add_development_dependency('rspec', '~> 2.6.0')
23
23
 
24
- s.files = `git ls-files`.split("\n")
25
- s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
24
+ s.files = `git ls-files`.split("\n")
25
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
26
26
  s.require_paths = ["lib"]
27
27
  end
@@ -0,0 +1,2 @@
1
+ #!/bin/bash
2
+ ruby historics/$3.rb $1 $2 ${@:4}
@@ -0,0 +1,71 @@
1
+ # This script creates a new Historics query from a file containing CSDL.
2
+ #
3
+ # NB: Most of the error handling (exception catching) has been removed for
4
+ # the sake of simplicity. Nearly everything in this library may throw
5
+ # exceptions, and production code should catch them. See the documentation
6
+ # for full details.
7
+ #
8
+
9
+ # Function to display usage instructions with an optional error message.
10
+ def usage(message = '', end_of_story = true)
11
+ puts message + '\n' unless message.length() == 0
12
+ puts
13
+ puts 'Usage: create-from-csdl <username> <api_key> \\'
14
+ puts ' <csdl_filename> <start> <end> <sources> <name> <sample>'
15
+ puts
16
+ puts 'Where: csdl_filename = the stream hash the query should run'
17
+ puts ' start = the start date for the query (YYYYMMDDHHMMSS)'
18
+ puts ' end = the end date for the query (YYYYMMDDHHMMSS)'
19
+ puts ' sources = comma separated list of data sources (e.g. twitter)'
20
+ puts ' name = a friendly name for the query'
21
+ puts ' sample = the sample rate'
22
+ puts
23
+ puts 'Example'
24
+ puts ' create-from-csdl csdl.txt 20120101000000 20120101235959 \\'
25
+ puts ' twitter HistoricsQuery123 100'
26
+ puts
27
+ exit 1 unless not end_of_story
28
+ end
29
+
30
+ # Include the shared Env class
31
+ require File.dirname(__FILE__) + '/env'
32
+
33
+ # Create the env object. This reads the command line arguments, creates the
34
+ # user object, and provides access to both along with helper functions.
35
+ env = Env.new()
36
+
37
+ # Check that we have enough arguments
38
+ usage() unless env.args.size() == 6
39
+
40
+ # Read the arguments
41
+ csdl_filename = env.args[0]
42
+ start_date = env.args[1]
43
+ end_date = env.args[2]
44
+ sources = env.args[3].split(',')
45
+ name = env.args[4]
46
+ sample = env.args[5]
47
+
48
+ # Parse the dates
49
+ start_date = DateTime.strptime(start_date, '%Y%m%d%H%M%S')
50
+ end_date = DateTime.strptime(end_date, '%Y%m%d%H%M%S')
51
+
52
+ # Read the CSDL
53
+ csdl = File.open(csdl_filename, 'r').read
54
+
55
+ begin
56
+ # Create the definition
57
+ definition = env.user.createDefinition(csdl)
58
+
59
+ # Create the Historics query
60
+ historic = definition.createHistoric(start_date, end_date, sources, name, sample)
61
+
62
+ # Prepare the query
63
+ historic.prepare()
64
+
65
+ # Display the details
66
+ env.displayHistoricDetails(historic)
67
+
68
+ puts 'Rate limit remainining: ' + String(env.user.rate_limit_remaining)
69
+ rescue DataSift::DataSiftError => err
70
+ puts 'ERR: [' + err.class.name + '] ' + err.message
71
+ end
@@ -0,0 +1,65 @@
1
+ # This script creates a new Historics query from a stream hash.
2
+ #
3
+ # NB: Most of the error handling (exception catching) has been removed for
4
+ # the sake of simplicity. Nearly everything in this library may throw
5
+ # exceptions, and production code should catch them. See the documentation
6
+ # for full details.
7
+ #
8
+
9
+ # Function to display usage instructions with an optional error message.
10
+ def usage(message = '', end_of_story = true)
11
+ puts message + '\n' unless message.length() == 0
12
+ puts
13
+ puts 'Usage: create-from-hash \\'
14
+ puts ' <username> <api_key> <hash> <start> <end> <sources> <name> <sample>'
15
+ puts
16
+ puts 'Where: hash = the stream hash the query should run'
17
+ puts ' start = the start date for the query (YYYYMMDDHHMMSS)'
18
+ puts ' end = the end date for the query (YYYYMMDDHHMMSS)'
19
+ puts ' sources = comma separated list of data sources (e.g. twitter)'
20
+ puts ' name = a friendly name for the query'
21
+ puts ' sample = the sample rate'
22
+ puts
23
+ puts 'Example'
24
+ puts ' create-from-hash <hash> 20120101000000 20120101235959 \\'
25
+ puts ' twitter HistoricsQuery123 100'
26
+ puts
27
+ exit 1 unless not end_of_story
28
+ end
29
+
30
+ # Include the shared Env class
31
+ require File.dirname(__FILE__) + '/env'
32
+
33
+ # Create the env object. This reads the command line arguments, creates the
34
+ # user object, and provides access to both along with helper functions.
35
+ env = Env.new()
36
+
37
+ # Check that we have enough arguments
38
+ usage() unless env.args.size() == 6
39
+
40
+ # Read the arguments
41
+ stream_hash = env.args[0]
42
+ start_date = env.args[1]
43
+ end_date = env.args[2]
44
+ sources = env.args[3].split(',')
45
+ name = env.args[4]
46
+ sample = env.args[5]
47
+
48
+ # Parse the dates
49
+ start_date = DateTime.strptime(start_date, '%Y%m%d%H%M%S')
50
+ end_date = DateTime.strptime(end_date, '%Y%m%d%H%M%S')
51
+
52
+ begin
53
+ # Create the Historics query
54
+ historic = env.user.createHistoric(stream_hash, start_date, end_date, sources, name, sample)
55
+
56
+ # Prepare the query
57
+ historic.prepare()
58
+
59
+ # Display the details
60
+ env.displayHistoricDetails(historic)
61
+
62
+ puts 'Rate limit remainining: ' + String(env.user.rate_limit_remaining)
63
+ rescue DataSift::DataSiftError => err
64
+ puts 'ERR: [' + err.class.name + '] ' + err.message
65
+ end
@@ -0,0 +1,30 @@
1
+ # This script deletes Historics queries from your account.
2
+ #
3
+ # NB: Most of the error handling (exception catching) has been removed for
4
+ # the sake of simplicity. Nearly everything in this library may throw
5
+ # exceptions, and production code should catch them. See the documentation
6
+ # for full details.
7
+ #
8
+
9
+ # Include the shared Env class
10
+ require File.dirname(__FILE__) + '/env'
11
+
12
+ # Create the env object. This reads the command line arguments, creates the
13
+ # user object, and provides access to both along with helper functions.
14
+ env = Env.new()
15
+
16
+ # Make sure we have something to do
17
+ abort('Please specify one or more playback IDs') unless env.args.size() > 0
18
+
19
+ begin
20
+ for playback_id in env.args
21
+ historic = env.user.getHistoric(playback_id)
22
+ print 'Deleting ' + playback_id + ', "' + historic.name + '"...'
23
+ historic.delete()
24
+ puts 'done'
25
+ end
26
+
27
+ puts 'Rate limit remainining: ' + String(env.user.rate_limit_remaining)
28
+ rescue DataSift::DataSiftError => err
29
+ puts 'ERR: [' + err.class.name + '] ' + err.message
30
+ end
@@ -0,0 +1,37 @@
1
+ # This class is used by the Historics examples to remove the noise of
2
+ # dealing with command line arguments.
3
+ #
4
+
5
+ # Include the DataSift library
6
+ require File.dirname(__FILE__) + '/../../lib/datasift'
7
+
8
+ class Env
9
+ attr_reader :user, :args
10
+
11
+ def initialize(args = false)
12
+ if args === false
13
+ args = ARGV
14
+ end
15
+
16
+ abort('Please specify your DataSift username and API key as the first two command line arguments!') unless args.size() >= 2
17
+
18
+ username = args.shift
19
+ api_key = args.shift
20
+ @user = DataSift::User.new(username, api_key)
21
+
22
+ @args = args
23
+ end
24
+
25
+ def displayHistoricDetails(historic)
26
+ puts 'Playback ID: ' + historic.hash
27
+ puts 'Stream hash: ' + historic.stream_hash
28
+ puts 'Name: ' + historic.name
29
+ puts 'Start time: ' + historic.start_date.strftime('%Y-%m-%d %H:%M:%S')
30
+ puts 'End time: ' + historic.end_date.strftime('%Y-%m-%d %H:%M:%S')
31
+ puts 'Sources: ' + historic.sources.join(', ')
32
+ puts 'Sample: ' + String(historic.sample)
33
+ puts 'Created at: ' + (historic.created_at.nil? ? 'None' : historic.created_at.strftime('%Y-%m-%d %H:%M:%S'))
34
+ puts 'Status: ' + historic.status
35
+ puts '--'
36
+ end
37
+ end
@@ -0,0 +1,30 @@
1
+ # This script lists Historics queries in your account.
2
+ #
3
+ # NB: Most of the error handling (exception catching) has been removed for
4
+ # the sake of simplicity. Nearly everything in this library may throw
5
+ # exceptions, and production code should catch them. See the documentation
6
+ # for full details.
7
+ #
8
+
9
+ # Include the shared Env class
10
+ require File.dirname(__FILE__) + '/env'
11
+
12
+ # Create the env object. This reads the command line arguments, creates the
13
+ # user object, and provides access to both along with helper functions.
14
+ env = Env.new()
15
+
16
+ begin
17
+ historics = env.user.listHistorics()
18
+
19
+ if historics['historics'].size() == 0
20
+ puts 'No Historics queries exist in your account.'
21
+ else
22
+ for historic in historics['historics']
23
+ env.displayHistoricDetails(historic)
24
+ end
25
+ end
26
+
27
+ puts 'Rate limit remainining: ' + String(env.user.rate_limit_remaining)
28
+ rescue DataSift::DataSiftError => err
29
+ puts 'ERR: [' + err.class.name + '] ' + err.message
30
+ end
@@ -0,0 +1,30 @@
1
+ # This script starts Historics queries in your account.
2
+ #
3
+ # NB: Most of the error handling (exception catching) has been removed for
4
+ # the sake of simplicity. Nearly everything in this library may throw
5
+ # exceptions, and production code should catch them. See the documentation
6
+ # for full details.
7
+ #
8
+
9
+ # Include the shared Env class
10
+ require File.dirname(__FILE__) + '/env'
11
+
12
+ # Create the env object. This reads the command line arguments, creates the
13
+ # user object, and provides access to both along with helper functions.
14
+ env = Env.new()
15
+
16
+ # Make sure we have something to do
17
+ abort('Please specify one or more playback IDs') unless env.args.size() > 0
18
+
19
+ begin
20
+ for playback_id in env.args
21
+ historic = env.user.getHistoric(playback_id)
22
+ print 'Starting ' + playback_id + ', "' + historic.name + '"...'
23
+ historic.start()
24
+ puts 'done'
25
+ end
26
+
27
+ puts 'Rate limit remainining: ' + String(env.user.rate_limit_remaining)
28
+ rescue DataSift::DataSiftError => err
29
+ puts 'ERR: [' + err.class.name + '] ' + err.message
30
+ end
@@ -0,0 +1,30 @@
1
+ # This script stops Historics queries in your account.
2
+ #
3
+ # NB: Most of the error handling (exception catching) has been removed for
4
+ # the sake of simplicity. Nearly everything in this library may throw
5
+ # exceptions, and production code should catch them. See the documentation
6
+ # for full details.
7
+ #
8
+
9
+ # Include the shared Env class
10
+ require File.dirname(__FILE__) + '/env'
11
+
12
+ # Create the env object. This reads the command line arguments, creates the
13
+ # user object, and provides access to both along with helper functions.
14
+ env = Env.new()
15
+
16
+ # Make sure we have something to do
17
+ abort('Please specify one or more playback IDs') unless env.args.size() > 0
18
+
19
+ begin
20
+ for playback_id in env.args
21
+ historic = env.user.getHistoric(playback_id)
22
+ print 'Stopping ' + playback_id + ', "' + historic.name + '"...'
23
+ historic.stop()
24
+ puts 'done'
25
+ end
26
+
27
+ puts 'Rate limit remainining: ' + String(env.user.rate_limit_remaining)
28
+ rescue DataSift::DataSiftError => err
29
+ puts 'ERR: [' + err.class.name + '] ' + err.message
30
+ end
@@ -0,0 +1,28 @@
1
+ # This script views Historics queries in your account.
2
+ #
3
+ # NB: Most of the error handling (exception catching) has been removed for
4
+ # the sake of simplicity. Nearly everything in this library may throw
5
+ # exceptions, and production code should catch them. See the documentation
6
+ # for full details.
7
+ #
8
+
9
+ # Include the shared Env class
10
+ require File.dirname(__FILE__) + '/env'
11
+
12
+ # Create the env object. This reads the command line arguments, creates the
13
+ # user object, and provides access to both along with helper functions.
14
+ env = Env.new()
15
+
16
+ # Make sure we have something to do
17
+ abort('Please specify one or more playback IDs') unless env.args.size() > 0
18
+
19
+ begin
20
+ for playback_id in env.args
21
+ historic = env.user.getHistoric(playback_id)
22
+ env.displayHistoricDetails(historic)
23
+ end
24
+
25
+ puts 'Rate limit remainining: ' + String(env.user.rate_limit_remaining)
26
+ rescue DataSift::DataSiftError => err
27
+ puts 'ERR: [' + err.class.name + '] ' + err.message
28
+ end
data/examples/push.sh ADDED
@@ -0,0 +1,2 @@
1
+ #!/bin/bash
2
+ ruby push/$3.rb $1 $2 ${@:4}
@@ -0,0 +1,33 @@
1
+ # This script deletes Push subscriptions from your account.
2
+ #
3
+ # NB: Most of the error handling (exception catching) has been removed for
4
+ # the sake of simplicity. Nearly everything in this library may throw
5
+ # exceptions, and production code should catch them. See the documentation
6
+ # for full details.
7
+ #
8
+
9
+ # Include the shared Env class
10
+ require File.dirname(__FILE__) + '/env'
11
+
12
+ # Create the env object. This reads the command line arguments, creates the
13
+ # user object, and provides access to both along with helper functions.
14
+ env = Env.new()
15
+
16
+ # Make sure we have something to do
17
+ abort('Please specify one or more subscription IDs') unless env.args.size() > 0
18
+
19
+ for sub_id in env.args
20
+ begin
21
+ sub = env.user.getPushSubscription(sub_id)
22
+ print 'Deleting ' + sub_id + ', "' + sub.name + '"...'
23
+ sub.delete()
24
+ rescue DataSift::DataSiftError => err
25
+ puts 'ERR: [' + err.class.name + '] ' + err.message
26
+ else
27
+ puts 'done'
28
+ end
29
+ end
30
+
31
+ if env.user.rate_limit_remaining != -1
32
+ puts 'Rate limit remainining: ' + String(env.user.rate_limit_remaining)
33
+ end