Class: AmplitudeAPI

Inherits:
Object
  • Object
show all
Defined in:
lib/amplitude_api.rb,
lib/amplitude_api/event.rb,
lib/amplitude_api/config.rb,
lib/amplitude_api/version.rb,
lib/amplitude_api/identification.rb

Overview

AmplitudeAPI

Defined Under Namespace

Classes: Config, Event, Identification

Constant Summary

TRACK_URI_STRING =
'https://api.amplitude.com/httpapi'.freeze
IDENTIFY_URI_STRING =
'https://api.amplitude.com/identify'.freeze
SEGMENTATION_URI_STRING =
'https://amplitude.com/api/2/events/segmentation'.freeze
USER_WITH_NO_ACCOUNT =
"user who doesn't have an account".freeze
VERSION =
'0.0.10'.freeze

Class Method Summary collapse

Class Method Details

.api_keyObject



25
26
27
# File 'lib/amplitude_api.rb', line 25

def api_key
  config.api_key
end

.configObject



17
18
19
# File 'lib/amplitude_api.rb', line 17

def config
  Config.instance
end

.configure {|config| ... } ⇒ Object

Yields:



21
22
23
# File 'lib/amplitude_api.rb', line 21

def configure
  yield config
end

.identify(identification) ⇒ Typhoeus::Response .identify([identifications]) ⇒ Typhoeus::Response

Send one or more Identifications to the Amplitude Identify API



128
129
130
# File 'lib/amplitude_api.rb', line 128

def identify(*identifications)
  Typhoeus.post(IDENTIFY_URI_STRING, body: identify_body(identifications))
end

.identify_body(identification) ⇒ Hash .identify_body([identifications]) ⇒ Hash

Converts a series of AmplitudeAPI::Identification objects into a body suitable for the Amplitude Identify API



110
111
112
113
114
115
116
117
# File 'lib/amplitude_api.rb', line 110

def identify_body(*identifications)
  identification_body = identifications.flatten.map(&:to_hash)

  {
    api_key: api_key,
    identification: JSON.generate(identification_body)
  }
end

.secret_keyObject



29
30
31
# File 'lib/amplitude_api.rb', line 29

def secret_key
  config.secret_key
end

.segmentation(e, start_time, end_time, **options) ⇒ Typhoeus::Response

Get metrics for an event with segmentation.

For non-property metrics: "uniques", "totals", "pct_dau", or "average" (default: "uniques"). For property metrics: "histogram", "sums", or "value_avg" (note: a valid "group_by" value is required in parameter e). Set to -300000, -3600000, 1, 7, or 30 for realtime, hourly, daily, weekly, and monthly counts, respectively (default: 1). Realtime segmentation is capped at 2 days, hourly segmentation is capped at 7 days, and daily at 365 days. returned (default: 100). The maximum limit is 1000.



153
154
155
156
157
158
159
160
161
162
163
164
# File 'lib/amplitude_api.rb', line 153

def segmentation(e, start_time, end_time, **options)
  Typhoeus.get SEGMENTATION_URI_STRING, userpwd: "#{api_key}:#{secret_key}", params: {
    e:     e.to_json,
    m:     options[:m],
    start: start_time.strftime('%Y%m%d'),
    end:   end_time.strftime('%Y%m%d'),
    i:     options[:i],
    s:     (options[:s] || []).map(&:to_json),
    g:     options[:g],
    limit: options[:limit]
  }.delete_if { |_, value| value.nil? }
end

.send_event(event_name, user, device, options = {}) ⇒ Typhoeus::Response

Send a single event immediately to the AmplitudeAPI

and can contain any other property to be stored on the Event and contains user properties to be associated with the user



46
47
48
49
50
51
52
53
54
55
# File 'lib/amplitude_api.rb', line 46

def send_event(event_name, user, device, options = {})
  event = AmplitudeAPI::Event.new(
    user_id: user,
    device_id: device,
    event_type: event_name,
    event_properties: options.fetch(:event_properties, {}),
    user_properties: options.fetch(:user_properties, {})
  )
  track(event)
end

.send_identify(user_id, device_id, user_properties = {}) ⇒ Object

==== Identification related methods



91
92
93
94
95
96
97
98
# File 'lib/amplitude_api.rb', line 91

def send_identify(user_id, device_id, user_properties = {})
  identification = AmplitudeAPI::Identification.new(
    user_id: user_id,
    device_id: device_id,
    user_properties: user_properties
  )
  identify(identification)
end

.track(event) ⇒ Typhoeus::Response .track([events]) ⇒ Typhoeus::Response

Send one or more Events to the Amplitude API



85
86
87
# File 'lib/amplitude_api.rb', line 85

def track(*events)
  Typhoeus.post(TRACK_URI_STRING, body: track_body(events))
end

.track_body(event) ⇒ Hash .track_body([events]) ⇒ Hash

Converts a series of AmplitudeAPI::Event objects into a body suitable for the Amplitude API



67
68
69
70
71
72
73
74
# File 'lib/amplitude_api.rb', line 67

def track_body(*events)
  event_body = events.flatten.map(&:to_hash)

  {
    api_key: api_key,
    event: JSON.generate(event_body)
  }
end