grepdata_client 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -1,29 +1,156 @@
1
1
  # GrepdataClient
2
2
 
3
- TODO: Write a gem description
3
+ Official Ruby client for Grepdata API
4
4
 
5
5
  ## Installation
6
6
 
7
- Add this line to your application's Gemfile:
7
+ gem install grepdata_client
8
+
9
+ or if you use a Gemfile:
8
10
 
9
11
  gem 'grepdata_client'
12
+
13
+ ## Publishing Events
14
+
15
+ require 'rubygems'
16
+ require 'grepdata_client'
17
+
18
+ client = GrepdataClient::Client.new(token: "054a9c9ade7dcf325a3aab542ebd73b5", default_endpoint: 'demonstration')
19
+ client.track 'play', data: { age: 18 }
20
+
21
+ ## Querying Data
22
+
23
+ require 'rubygems'
24
+ require 'grepdata_client'
25
+
26
+ client = GrepdataClient::Client.new(:api_key => "0ac15f3688987af763c67412066e3378")
27
+
28
+ #Query
29
+ params = {
30
+ :datamart => "user_info",
31
+ :dimensions => %w(country),
32
+ :metrics => %w(Count),
33
+ :filters => { :country => %w(US) },
34
+ :time_interval => "h",
35
+ :start_date => "201306110800",
36
+ :end_date => "201306110900"
37
+ }
38
+ req = client.query params
39
+ puts req.get_result
40
+
41
+ #Funneling
42
+ params = {
43
+ :datamart => 'demonstration',
44
+ :funnel_dimension => 'event',
45
+ :time_interval => 'd',
46
+ :dimensions => %w(event country),
47
+ :metrics => %w(Count),
48
+ :start_date => "201306120000",
49
+ :end_date => "201306190000",
50
+ :steps => [
51
+ { :name => "step1: play", :value => "play" },
52
+ { :name => "step2: pause", :value => "pause" },
53
+ { :name => "step3: seek", :value => "seek" },
54
+ { :name => "step2: stop", :value => "stop" }
55
+ ],
56
+ :filters => { :country => %w(US) },
57
+ :only_totals => false
58
+ }
59
+ req = client.funneling params
60
+ puts req.get_result
61
+
62
+ ## Generating access key
63
+
64
+ require 'rubygems'
65
+ require 'grepdata_client'
66
+
67
+ client = GrepdataClient::Client.new(:api_key => "0ac15f3688987af763c67412066e3378")
68
+
69
+ params = {
70
+ :datamart => "user_info",
71
+ :dimensions => %w(country),
72
+ :metrics => %w(Count),
73
+ :filters => { :country => %w(US) },
74
+ :time_interval => "h",
75
+ :start_date => "201306110800",
76
+ :end_date => "201306110900"
77
+ }
78
+
79
+ access_key = client.generate_access_key api_key,
80
+ params: params,
81
+ restricted: ['dimensions', 'filters.country'],
82
+ expiration: '201306220100'
83
+
84
+ puts access_key
85
+
86
+ ## Querying with access key
87
+
88
+ require 'rubygems'
89
+ require 'grepdata_client'
90
+
91
+ client = GrepdataClient::Client.new(:token => "054a9c9ade7dcf325a3aab542ebd73b5")
92
+
93
+ #acquired via generate_access_key
94
+ access_key = {
95
+ :signature=>"0xBBKoaUe6RZSLM//6yqzbYelmI=",
96
+ :restricted=>"dimensions,filters.country",
97
+ :expiration=>"201306220100",
98
+ }
99
+
100
+ params = {
101
+ :datamart => "user_info",
102
+ :dimensions => %w(country),
103
+ :metrics => %w(Count),
104
+ :filters => { :country => %w(US) },
105
+ :time_interval => "h",
106
+ :start_date => "201306110800",
107
+ :end_date => "201306110900"
108
+ }
10
109
 
11
- And then execute:
110
+ req = client.query_with_token params, access_key
111
+ puts req.get_result
112
+
113
+ #get url of the request
114
+ puts req.get_url
12
115
 
13
- $ bundle
116
+ ## Running Request in Parallel
14
117
 
15
- Or install it yourself as:
118
+ require 'rubygems'
119
+ require 'grepdata_client'
16
120
 
17
- $ gem install grepdata_client
121
+ #set parallel to true
122
+ client = GrepdataClient::Client.new(
123
+ :default_endpoint => 'demonstration',
124
+ :token => "054a9c9ade7dcf325a3aab542ebd73b5",
125
+ :api_key => "0ac15f3688987af763c67412066e3378",
126
+ :parallel => true)
127
+
128
+ # query or publish data. Requests will be queued up
129
+ ...
130
+
131
+ # execute the queued requests and run them in parallel
132
+ client.run_requests
133
+
134
+ We use Typhoeus to handle parallel requests. You can also pass in your own hydra queue
18
135
 
19
- ## Usage
136
+ require 'rubygems'
137
+ require 'grepdata_client'
20
138
 
21
- TODO: Write usage instructions here
139
+ #set parallel to true and pass in hydra queue
140
+ hydra = ::Typhoeus::Hydra.new
141
+ client = GrepdataClient::Client.new(
142
+ :default_endpoint => 'demonstration',
143
+ :token => "054a9c9ade7dcf325a3aab542ebd73b5",
144
+ :api_key => "0ac15f3688987af763c67412066e3378",
145
+ :parallel => true,
146
+ :parallel_manager => hydra)
147
+
148
+ # query or publish data. Requests will be queued up
149
+ ...
150
+
151
+ # this will execute the queued requests as well
152
+ hydra.run
22
153
 
23
- ## Contributing
154
+ ## Copyright
24
155
 
25
- 1. Fork it
26
- 2. Create your feature branch (`git checkout -b my-new-feature`)
27
- 3. Commit your changes (`git commit -am 'Add some feature'`)
28
- 4. Push to the branch (`git push origin my-new-feature`)
29
- 5. Create new Pull Request
156
+ Copyright (c) 2013+ Grepdata. See LICENSE for details.
@@ -1,20 +1,24 @@
1
1
  module GrepdataClient
2
2
  class DataRequest
3
- attr_reader :request, :url, :params, :headers, :action
3
+ attr_reader :request, :base_url, :params, :headers, :action
4
4
 
5
5
  def initialize(action, options)
6
6
  @action = action.to_s
7
- @url = "#{options[:url]}/#{@action}"
7
+ @base_url = "#{options[:url]}/#{@action}"
8
8
  @params = options[:params] || {}
9
9
  @headers = options[:headers] || {}
10
10
 
11
11
  params = Utils.format_params @action, @params
12
12
 
13
- @request = ::Typhoeus::Request.new(@url, params: params, headers: @headers)
13
+ @request = ::Typhoeus::Request.new(@base_url, params: params, headers: @headers)
14
14
  end
15
15
 
16
16
  def get_result
17
17
  return @request.response.body
18
18
  end
19
+
20
+ def get_url
21
+ return @request.url
22
+ end
19
23
  end
20
24
  end
@@ -4,6 +4,10 @@ module GrepdataClient
4
4
  "%Y%m%d%H%M"
5
5
  end
6
6
 
7
+ def self.cache_buster
8
+ Time.now.getutc.to_i.to_s
9
+ end
10
+
7
11
  def self.default_expiration
8
12
  (Time.now.utc + (24*60*60)).strftime Utils.date_format
9
13
  end
@@ -64,6 +68,10 @@ module GrepdataClient
64
68
 
65
69
  result[:api_key] = params[:api_key] if params[:api_key]
66
70
  result[:token] = params[:token] if params[:token]
71
+
72
+ result[:signature] = params[:signature] if params[:signature]
73
+ result[:restricted] = params[:restricted] if params[:restricted]
74
+ result[:expiration] = params[:expiration] if params[:expiration]
67
75
  result
68
76
  end
69
77
  end
@@ -1,3 +1,3 @@
1
1
  module GrepdataClient
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -11,20 +11,74 @@ require "grepdata_client/utils"
11
11
  module GrepdataClient
12
12
  class Client
13
13
 
14
- attr_accessor :api_url, :api_key, :token, :parallel, :parallel_manager
14
+ attr_accessor :api_url, :api_key, :token, :send_with_headers,
15
+ :default_endpoint, :endpoint_map,
16
+ :parallel, :parallel_manager
15
17
 
16
18
  CONFIG = {
17
19
  :api_url => "https://api.grepdata.com/v1",
20
+ :beacon_url => "https://beacon.grepdata.com/v1"
18
21
  }
19
22
 
20
23
  def initialize(config)
21
- @api_key, @token = config.values_at(:api_key, :token)
24
+ @api_key, @token, @default_endpoint =
25
+ config.values_at(:api_key, :token, :default_endpoint)
26
+
27
+ @send_with_headers = config[:send_with_headers] || false
28
+ @endpoint_map = config[:endpoint_map] || {}
22
29
  @api_url = config[:api_url] || CONFIG[:api_url]
30
+ @beacon_url = config[:beacon_url] || CONFIG[:beacon_url]
31
+
23
32
  @parallel = config[:parallel] || false
33
+
24
34
  if config[:parallel_manager]
25
35
  @parallel_manager = config[:parallel_manager]
26
36
  end
27
37
  end
38
+
39
+ def track(event, options)
40
+ token = options[:token] || @token
41
+ endpoint = @endpoint_map[event.to_sym] || @endpoint_map[event] || @default_endpoint
42
+ data = options[:data]
43
+
44
+ Utils.check_attributes "Request",
45
+ params: { token: token, endpoint: endpoint, data: data},
46
+ required: {
47
+ token: String,
48
+ endpoint: String,
49
+ data: Hash
50
+ }
51
+
52
+ params = {
53
+ event: event,
54
+ q: data.to_json,
55
+ cb: Utils.cache_buster,
56
+ token: token
57
+ }
58
+
59
+ params[:t] = options[:timestamp] if options[:timestamp]
60
+ params[:domain] = options[:domain] if options[:domain]
61
+ params[:ua] = options[:user_agent] if options[:user_agent]
62
+ params[:r] = options[:referer] if options[:referer]
63
+ params[:ip] = options[:ip] if options[:ip]
64
+ params[:visitor] = options[:visitor] if options[:visitor]
65
+ params[:session] = options[:session] if options[:session]
66
+
67
+ url = "#{@beacon_url}/#{endpoint}"
68
+
69
+ request = Typhoeus::Request.new url, params: params, timeout: 5
70
+
71
+ if @parallel
72
+ unless @parallel_manager
73
+ @parallel_manager = ::Typhoeus::Hydra.new
74
+ end
75
+ @parallel_manager.queue request
76
+ else
77
+ request.run
78
+ end
79
+
80
+ request
81
+ end
28
82
 
29
83
  def query(params)
30
84
  params[:api_key] = params[:api_key] || @api_key
@@ -32,7 +86,7 @@ module GrepdataClient
32
86
 
33
87
  Utils.preprocess_dates params, [:start_date, :end_date]
34
88
 
35
- Utils.check_attributes "params",
89
+ Utils.check_attributes "Request",
36
90
  params: params,
37
91
  required: {
38
92
  api_key: String,
@@ -55,7 +109,7 @@ module GrepdataClient
55
109
 
56
110
  Utils.preprocess_dates params, [:start_date, :end_date]
57
111
 
58
- Utils.check_attributes "params",
112
+ Utils.check_attributes "Request",
59
113
  params: params,
60
114
  required: {
61
115
  api_key: String,
@@ -76,7 +130,7 @@ module GrepdataClient
76
130
  def dimensions(params)
77
131
  params[:api_key] = params[:api_key] || @api_key
78
132
 
79
- Utils.check_attributes "params",
133
+ Utils.check_attributes "Request",
80
134
  params: params,
81
135
  required: {
82
136
  api_key: String,
@@ -93,7 +147,7 @@ module GrepdataClient
93
147
  Utils.preprocess_dates params, [:start_date, :end_date]
94
148
  Utils.preprocess_dates access_key, [:expiration]
95
149
 
96
- Utils.check_attributes "params",
150
+ Utils.check_attributes "Request",
97
151
  params: params,
98
152
  required: {
99
153
  token: String,
@@ -113,8 +167,17 @@ module GrepdataClient
113
167
  restricted: String,
114
168
  expiration: String
115
169
  }
170
+
171
+ headers = {}
172
+ if @send_with_headers
173
+ headers = access_key
174
+ else
175
+ params[:signature] = access_key[:signature]
176
+ params[:restricted] = access_key[:restricted]
177
+ params[:expiration] = access_key[:expiration]
178
+ end
116
179
 
117
- request('fetch', params: params, headers: access_key)
180
+ request('fetch', params: params, headers: headers)
118
181
  end
119
182
 
120
183
  def run_requests
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: grepdata_client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors: