From 3b1177a37575695a22d01952e99aac06b8fe0648 Mon Sep 17 00:00:00 2001 From: Sandip Sinha Date: Fri, 8 May 2015 15:43:02 -0700 Subject: [PATCH 01/12] Added run_request_campaign function to handle Request Campaign API in Marketo --- pythonmarketo/client.py | 39 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) diff --git a/pythonmarketo/client.py b/pythonmarketo/client.py index 1a3a9e7..128e934 100644 --- a/pythonmarketo/client.py +++ b/pythonmarketo/client.py @@ -47,6 +47,7 @@ def execute(self, method, *args, **kargs): 'get_email_content_by_id':self.get_email_content_by_id, 'get_email_template_content_by_id':self.get_email_template_content_by_id, 'get_email_templates':self.get_email_templates, + 'request_campaign':self.run_request_campaign, } result = method_map[method](*args,**kargs) @@ -236,7 +237,43 @@ def create_lead(self, lookupField, lookupValue, values): ] } return self.post(data) + + def run_request_campaign(self,campaignID,leadsID,values): + def add_curly(k): + return '{{'+k+'}}' + append_array={add_curly(k):v for k, v in values.items()} + leads_list=[] + token_dict={} + token_list=[] + leads_dict={} + for k,v in append_array.items(): + token_dict['name']=k + token_dict['value']=v + token_list.append(token_dict) + for rows in leadsID: + leads_dict['id']=rows + leads_list.append(leads_dict) + camp_dict={} + camp_dict['tokens']= token_list + data={ + 'input': {"leads": + leads_list + ,"tokens": + token_list + } + } + + self.authenticate() + args = { + 'access_token' : self.token + } + x="https://" + self.host + "/rest/v1/campaigns/" + str(campaignID)+ "/trigger.json" + result = HttpLib().post("https://" + self.host + "/rest/v1/campaigns/" + str(campaignID)+ "/trigger.json", args,data) + if not result['success'] : raise MarketoException(data['errors'][0]) + return result['success'] + + def post(self, data): self.authenticate() args = { @@ -245,4 +282,4 @@ def post(self, data): data = HttpLib().post("https://" + self.host + "/rest/v1/leads.json" , args, data) if not data['success'] : raise MarketoException(data['errors'][0]) return data['result'][0]['status'] - \ No newline at end of file + From d469feadbf8493be71e649cfbf5b49e51580cf9c Mon Sep 17 00:00:00 2001 From: Sandip Sinha Date: Thu, 14 May 2015 10:57:47 -0700 Subject: [PATCH 02/12] Made corrections suggested by the moderator --- pythonmarketo/client.py | 18 +++--------------- 1 file changed, 3 insertions(+), 15 deletions(-) diff --git a/pythonmarketo/client.py b/pythonmarketo/client.py index 128e934..16f9d5c 100644 --- a/pythonmarketo/client.py +++ b/pythonmarketo/client.py @@ -238,21 +238,9 @@ def create_lead(self, lookupField, lookupValue, values): } return self.post(data) - def run_request_campaign(self,campaignID,leadsID,values): - def add_curly(k): - return '{{'+k+'}}' - append_array={add_curly(k):v for k, v in values.items()} - leads_list=[] - token_dict={} - token_list=[] - leads_dict={} - for k,v in append_array.items(): - token_dict['name']=k - token_dict['value']=v - token_list.append(token_dict) - for rows in leadsID: - leads_dict['id']=rows - leads_list.append(leads_dict) + def run_request_campaign(self, campaignID, leadsID, values): + token_list = [{'name':'{{' + k + '}}', 'value':v} for k, v in values.items()] + leads_list = [{'id':items} for items in leads_list] camp_dict={} camp_dict['tokens']= token_list data={ From ab6e21de5fcc38d4e9cdd677f4c641a8198fdb30 Mon Sep 17 00:00:00 2001 From: Sandip Sinha Date: Thu, 14 May 2015 11:33:23 -0700 Subject: [PATCH 03/12] Made corrections suggested by the moderator --- pythonmarketo/client.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/pythonmarketo/client.py b/pythonmarketo/client.py index 16f9d5c..1679f33 100644 --- a/pythonmarketo/client.py +++ b/pythonmarketo/client.py @@ -241,8 +241,6 @@ def create_lead(self, lookupField, lookupValue, values): def run_request_campaign(self, campaignID, leadsID, values): token_list = [{'name':'{{' + k + '}}', 'value':v} for k, v in values.items()] leads_list = [{'id':items} for items in leads_list] - camp_dict={} - camp_dict['tokens']= token_list data={ 'input': {"leads": leads_list From 3a92f3a4295a89fb8c88f055309e6cc262c54152 Mon Sep 17 00:00:00 2001 From: Sandip Sinha Date: Fri, 15 May 2015 14:58:45 -0700 Subject: [PATCH 04/12] Minor updates --- pythonmarketo/client.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pythonmarketo/client.py b/pythonmarketo/client.py index 1679f33..27ffaea 100644 --- a/pythonmarketo/client.py +++ b/pythonmarketo/client.py @@ -243,8 +243,8 @@ def run_request_campaign(self, campaignID, leadsID, values): leads_list = [{'id':items} for items in leads_list] data={ 'input': {"leads": - leads_list - ,"tokens": + leads_list, + "tokens": token_list } } @@ -254,7 +254,7 @@ def run_request_campaign(self, campaignID, leadsID, values): 'access_token' : self.token } x="https://" + self.host + "/rest/v1/campaigns/" + str(campaignID)+ "/trigger.json" - result = HttpLib().post("https://" + self.host + "/rest/v1/campaigns/" + str(campaignID)+ "/trigger.json", args,data) + result = HttpLib().post("https://" + self.host + "/rest/v1/campaigns/" + str(campaignID)+ "/trigger.json", args, data) if not result['success'] : raise MarketoException(data['errors'][0]) return result['success'] From 866761ded15ef19f20c290125361a2148ddb8857 Mon Sep 17 00:00:00 2001 From: Sandip Sinha Date: Fri, 29 May 2015 13:25:37 -0700 Subject: [PATCH 05/12] Added 2 more API handles to the client routine. 1. Retrieve leads using a filter. 2. Merge leads --- pythonmarketo/client.py | 49 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 48 insertions(+), 1 deletion(-) diff --git a/pythonmarketo/client.py b/pythonmarketo/client.py index 27ffaea..c3af39f 100644 --- a/pythonmarketo/client.py +++ b/pythonmarketo/client.py @@ -38,6 +38,7 @@ def execute(self, method, *args, **kargs): method_map={ 'get_leads':self.get_leads, 'get_leads_by_listId':self.get_leads_by_listId, + 'get_multiple_leads_by_filter_type':self.get_multiple_leads_by_filter_type, 'get_activity_types':self.get_activity_types, 'get_lead_activity':self.get_lead_activity, 'get_paging_token':self.get_paging_token, @@ -48,6 +49,7 @@ def execute(self, method, *args, **kargs): 'get_email_template_content_by_id':self.get_email_template_content_by_id, 'get_email_templates':self.get_email_templates, 'request_campaign':self.run_request_campaign, + 'merge_leads':self.merge_leads, } result = method_map[method](*args,**kargs) @@ -162,6 +164,30 @@ def get_leads_by_listId(self, listId = None , batchSize = None, fields = []): args['nextPageToken'] = data['nextPageToken'] return result_list + def get_multiple_leads_by_filter_type(self, filterType, filterValues, fieldslist): + self.autheticate() + fieldvalstr = ','.join(filterValues) + fields = fieldliststr = None + if len(fieldslist) > 0: + fieldstr = ','.join(fieldslist) + else: + fieldstr= 'id,lastName,firstName,updatedAt,createdAt' + + args={ + 'access_token' : self.token + } + + inputp={ + 'filterType' : filterType, + 'filterValues' : fieldvalstr, + 'fields' : fieldstr + } + data = HttpLib().get("https://" + self.host + "/rest/v1/leads.json", args,inputp) + if data is None: raise Exception("Empty Response") + if not data['success'] : raise MarketoException(data['errors'][0]) + return data['result'] + + def get_activity_types(self): self.authenticate() args = { @@ -258,7 +284,28 @@ def run_request_campaign(self, campaignID, leadsID, values): if not result['success'] : raise MarketoException(data['errors'][0]) return result['success'] - + def merge_leads(win_ld, loosing_leads_list,mergeInCRM=False): + leadstr = ','.join(loosing_leads_list) + if len(loosing_leads_list) > 1: + data={ + 'leadlds' : leadstr, + 'mergeInCRM' : mergeInCRM + } + else: + data={ + 'leadld' : leadstr + } + + + self.authenticate() + args = { + 'access_token' : self.token + } + result = HttpLib().post("https://" + self.host + "/rest/v1/leads/" + str(win_ld) + "/merge.json" , args, data) + if not result['success'] : raise MarketoException(data['errors'][0]) + return result['success'] + + def post(self, data): self.authenticate() From 15ea561fae9f429ca0d495530cb01e7397d8243b Mon Sep 17 00:00:00 2001 From: Sandip Sinha Date: Fri, 29 May 2015 13:35:08 -0700 Subject: [PATCH 06/12] Added 2 more API handles to the client routine. 1. Retrieve leads using a filter. 2. Merge leads --- pythonmarketo/client.py | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/pythonmarketo/client.py b/pythonmarketo/client.py index c3af39f..15ea580 100644 --- a/pythonmarketo/client.py +++ b/pythonmarketo/client.py @@ -165,24 +165,24 @@ def get_leads_by_listId(self, listId = None , batchSize = None, fields = []): return result_list def get_multiple_leads_by_filter_type(self, filterType, filterValues, fieldslist): - self.autheticate() + self.authenticate() + args={ + 'access_token' : self.token + } fieldvalstr = ','.join(filterValues) fields = fieldliststr = None if len(fieldslist) > 0: fieldstr = ','.join(fieldslist) else: fieldstr= 'id,lastName,firstName,updatedAt,createdAt' - - args={ - 'access_token' : self.token - } - + inputp={ + 'access_token' : self.token, 'filterType' : filterType, 'filterValues' : fieldvalstr, 'fields' : fieldstr - } - data = HttpLib().get("https://" + self.host + "/rest/v1/leads.json", args,inputp) + } + data = HttpLib().get("https://" + self.host + "/rest/v1/leads.json",inputp) if data is None: raise Exception("Empty Response") if not data['success'] : raise MarketoException(data['errors'][0]) return data['result'] @@ -283,8 +283,9 @@ def run_request_campaign(self, campaignID, leadsID, values): result = HttpLib().post("https://" + self.host + "/rest/v1/campaigns/" + str(campaignID)+ "/trigger.json", args, data) if not result['success'] : raise MarketoException(data['errors'][0]) return result['success'] + - def merge_leads(win_ld, loosing_leads_list,mergeInCRM=False): + def merge_leads(winning_ld, loosing_leads_list,mergeInCRM=False): leadstr = ','.join(loosing_leads_list) if len(loosing_leads_list) > 1: data={ @@ -301,7 +302,7 @@ def merge_leads(win_ld, loosing_leads_list,mergeInCRM=False): args = { 'access_token' : self.token } - result = HttpLib().post("https://" + self.host + "/rest/v1/leads/" + str(win_ld) + "/merge.json" , args, data) + result = HttpLib().post("https://" + self.host + "/rest/v1/leads/" + str(winning_ld) + "/merge.json" , args, data) if not result['success'] : raise MarketoException(data['errors'][0]) return result['success'] From eb0b07c221f5366a86d7a0cca2e2ee8f59d8d9ed Mon Sep 17 00:00:00 2001 From: Sandip Sinha Date: Sat, 30 May 2015 13:50:53 -0700 Subject: [PATCH 07/12] Added a print for debug --- pythonmarketo/client.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pythonmarketo/client.py b/pythonmarketo/client.py index 15ea580..0ca4e36 100644 --- a/pythonmarketo/client.py +++ b/pythonmarketo/client.py @@ -297,7 +297,7 @@ def merge_leads(winning_ld, loosing_leads_list,mergeInCRM=False): 'leadld' : leadstr } - + print 'data', winning_ld, ' And ', data self.authenticate() args = { 'access_token' : self.token From 48e0b387c43d57b19a552816780250f10254ca8f Mon Sep 17 00:00:00 2001 From: Sandip Sinha Date: Sun, 31 May 2015 18:46:19 -0700 Subject: [PATCH 08/12] Added a print for debug --- pythonmarketo/client.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/pythonmarketo/client.py b/pythonmarketo/client.py index 0ca4e36..a3c1643 100644 --- a/pythonmarketo/client.py +++ b/pythonmarketo/client.py @@ -296,8 +296,6 @@ def merge_leads(winning_ld, loosing_leads_list,mergeInCRM=False): data={ 'leadld' : leadstr } - - print 'data', winning_ld, ' And ', data self.authenticate() args = { 'access_token' : self.token From 324d21041523104fd81b5c7eea2eda8bf144c858 Mon Sep 17 00:00:00 2001 From: Sandip Sinha Date: Mon, 15 Jun 2015 23:51:00 +0000 Subject: [PATCH 09/12] Changes to the client.py routine --- pythonmarketo/client.py | 38 +++++++++++++++++++++++--------------- 1 file changed, 23 insertions(+), 15 deletions(-) diff --git a/pythonmarketo/client.py b/pythonmarketo/client.py index 0ca4e36..cb1ec23 100644 --- a/pythonmarketo/client.py +++ b/pythonmarketo/client.py @@ -2,6 +2,7 @@ from pythonmarketo.helper.exceptions import MarketoException import json import time +import requests class MarketoClient: host = None @@ -285,26 +286,33 @@ def run_request_campaign(self, campaignID, leadsID, values): return result['success'] - def merge_leads(winning_ld, loosing_leads_list,mergeInCRM=False): - leadstr = ','.join(loosing_leads_list) - if len(loosing_leads_list) > 1: + def merge_leads(self, winning_ld, loosing_leads_list,mergeInCRM = False): + leadstr = str(loosing_leads_list).strip('[]') + leadsing = '&leadIds=' + leadstr + self.authenticate() + args = { + 'access_token' : self.token + } + if len(loosing_leads_list) > 1: data={ - 'leadlds' : leadstr, - 'mergeInCRM' : mergeInCRM + 'leadIds':leadstr } else: data={ - 'leadld' : leadstr + 'leadld' : leadstr, + 'mergeInCRM' : mergeInCRM } - - print 'data', winning_ld, ' And ', data - self.authenticate() - args = { - 'access_token' : self.token - } - result = HttpLib().post("https://" + self.host + "/rest/v1/leads/" + str(winning_ld) + "/merge.json" , args, data) - if not result['success'] : raise MarketoException(data['errors'][0]) - return result['success'] + + data = None + args = None + headers = {'content-type': 'application/json'} + urls = "https://" + self.host + "/rest/v1/leads/" + str(winning_ld) + "/merge.json?access_token=" + self.token + leadsing + result = requests.post(urls, headers = headers) + x = result.json() + if result.status_code != 200: + return False + else: + return x['success'] From 99b8fc58baf340768d5d7754b4f3299d40458997 Mon Sep 17 00:00:00 2001 From: Sandip Sinha Date: Tue, 16 Jun 2015 00:14:13 +0000 Subject: [PATCH 10/12] Updated client.py --- pythonmarketo/client.py | 37 ++++++++++++++++++++++--------------- 1 file changed, 22 insertions(+), 15 deletions(-) diff --git a/pythonmarketo/client.py b/pythonmarketo/client.py index 0ca4e36..cc4331a 100644 --- a/pythonmarketo/client.py +++ b/pythonmarketo/client.py @@ -2,6 +2,7 @@ from pythonmarketo.helper.exceptions import MarketoException import json import time +import requests class MarketoClient: host = None @@ -285,26 +286,32 @@ def run_request_campaign(self, campaignID, leadsID, values): return result['success'] - def merge_leads(winning_ld, loosing_leads_list,mergeInCRM=False): - leadstr = ','.join(loosing_leads_list) - if len(loosing_leads_list) > 1: + def merge_leads(self, winning_ld, loosing_leads_list,mergeInCRM = False): + leadstr = str(loosing_leads_list).strip('[]') + leadsing = '&leadIds=' + leadstr + self.authenticate() + args = { + 'access_token' : self.token + } + if len(loosing_leads_list) > 1: data={ - 'leadlds' : leadstr, - 'mergeInCRM' : mergeInCRM + 'leadIds':leadstr } else: data={ - 'leadld' : leadstr + 'leadld' : leadstr, + 'mergeInCRM' : mergeInCRM } - - print 'data', winning_ld, ' And ', data - self.authenticate() - args = { - 'access_token' : self.token - } - result = HttpLib().post("https://" + self.host + "/rest/v1/leads/" + str(winning_ld) + "/merge.json" , args, data) - if not result['success'] : raise MarketoException(data['errors'][0]) - return result['success'] + data = None + args = None + headers = {'content-type': 'application/json'} + urls = "https://" + self.host + "/rest/v1/leads/" + str(winning_ld) + "/merge.json?access_token=" + self.token + leadsing + result = requests.post(urls, headers = headers) + x = result.json() + if result.status_code != 200: + return False + else: + return x['success'] From aee7adcd5f0dd572662f0a5d84ded7376ef70cb5 Mon Sep 17 00:00:00 2001 From: Sandip Sinha Date: Tue, 21 Jul 2015 16:39:51 -0700 Subject: [PATCH 11/12] Updated request.campaign --- pythonmarketo/client.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pythonmarketo/client.py b/pythonmarketo/client.py index a3c1643..5ddd4ce 100644 --- a/pythonmarketo/client.py +++ b/pythonmarketo/client.py @@ -266,7 +266,7 @@ def create_lead(self, lookupField, lookupValue, values): def run_request_campaign(self, campaignID, leadsID, values): token_list = [{'name':'{{' + k + '}}', 'value':v} for k, v in values.items()] - leads_list = [{'id':items} for items in leads_list] + leads_list = [{'id':items} for items in leadsID] data={ 'input': {"leads": leads_list, From 10e8c1e6f519e44c1d09e488972d48df32179a3b Mon Sep 17 00:00:00 2001 From: Sandip Sinha Date: Fri, 7 Aug 2015 11:20:28 -0700 Subject: [PATCH 12/12] Updated the error handling routine --- pythonmarketo/client.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pythonmarketo/client.py b/pythonmarketo/client.py index be6571d..9576e5e 100644 --- a/pythonmarketo/client.py +++ b/pythonmarketo/client.py @@ -282,7 +282,7 @@ def run_request_campaign(self, campaignID, leadsID, values): } x="https://" + self.host + "/rest/v1/campaigns/" + str(campaignID)+ "/trigger.json" result = HttpLib().post("https://" + self.host + "/rest/v1/campaigns/" + str(campaignID)+ "/trigger.json", args, data) - if not result['success'] : raise MarketoException(data['errors'][0]) + if not result['success'] : raise MarketoException(result['errors'][0]) return result['success']