artsy/mrkt

Name: mrkt

Owner: Artsy

Description: This gem provides some level of abstraction to Marketo REST APIs.

Forked from: raszi/mrkt

Created: 2017-05-02 14:00:49.0

Updated: 2017-05-02 14:00:50.0

Pushed: 2017-04-28 15:20:49.0

Homepage: http://developers.marketo.com/documentation/rest

Size: 755

Language: Ruby

GitHub Committers

UserMost Recent Commit# Commits

Other Committers

UserEmailMost Recent Commit# Commits

README

Mrkt

Build Status Code Climate Test Coverage

This gem provides some level of abstraction to Marketo REST APIs. Please note that this gem is alpha quality.

Installation

Add this line to your application's Gemfile:

'mrkt'

And then execute:

$ bundle

Or install it yourself as:

$ gem install mrkt
Prerequisites

Get the following from your Marketo admin:

Usage
Create a client and authenticate
nt = Mrkt::Client.new(
st: '123-abc-123.mktorest.com', 
ient_id:  '4567e1cdf-0fae-4685-a914-5be45043f2d8', 
ient_secret: '7Gn0tuiHZiDHnzeu9P14uDQcSx9xIPPt')

If you need verbosity during troubleshooting, enable debug mode:

nt = Mrkt::Client.new(
st: '123-abc-123.mktorest.com', 
ient_id:  '4567e1cdf-0fae-4685-a914-5be45043f2d8', 
ient_secret: '7Gn0tuiHZiDHnzeu9P14uDQcSx9xIPPt',
bug: true,
gger: ::Logger.new("log/marketo.log"), # optional, defaults to Faraday default of logging to STDOUT
g_options: {bodies: true}) # optional, defaults to Faraday default of only logging headers
Retry authentication

Since the Marketo API provides API access keys with a validity of 3600 seconds, if you are running an hourly cronjob it's possible that your subsequent call receives the same key from the previous hour, which is then immediately expired. If this is the case, you can configure the client to retry until receiving a valid key:

nt = Mrkt::Client.new(
st: '123-abc-123.mktorest.com',
ient_id:  '4567e1cdf-0fae-4685-a914-5be45043f2d8',
ient_secret: '7Gn0tuiHZiDHnzeu9P14uDQcSx9xIPPt',
try_authentication: true,
try_authentication_count: 3, # default: 3
try_authentication_wait_seconds: 1, # default: 0

This is turned off by default.

Get leads matching an email, print their id and email
onse = client.get_leads(:email, ['sammy@acme.com'])
onse[:result].each do |result|
"id: #{result[:id]}, email: #{result[:email]}"

Create/Update leads
onse = client.createupdate_leads([{ email: 'sample@example.com', firstName: 'John' }], lookup_field: :email)
onse[:result].each do |result|
"id: #{result[:id]}, email: #{result[:email]}"

Run a smart campaign on existing leads
aign_id = 42        # this is the ID of the campaign
_ids    = [1, 2, 4] # these are the leads who receive the campaign
ns      = [{        # these tokens (optional) are then passed to the campaign
             name:  '{{my.message}}',
             value: 'Updated message'
           }, {
             name:  '{{my.other token}}',
             value: 'Value for other token'
           }]
nt.request_campaign(campaign_id, lead_ids, tokens) # tokens can be omited
 requestId: 'e42b#14272d07d78', success: true }
Run Tests
$ bundle exec rspec
Examples

Examples are in the spec/ directory.

Contributing
  1. Fork it ( https://github.com/raszi/mrkt/fork )
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create a new Pull Request

This work is supported by the National Institutes of Health's National Center for Advancing Translational Sciences, Grant Number U24TR002306. This work is solely the responsibility of the creators and does not necessarily represent the official views of the National Institutes of Health.