diff --git a/pythonmarketo/client.py b/pythonmarketo/client.py index 1a3a9e7..9576e5e 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 @@ -38,6 +39,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, @@ -47,6 +49,8 @@ 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, + 'merge_leads':self.merge_leads, } result = method_map[method](*args,**kargs) @@ -161,6 +165,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.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' + + inputp={ + 'access_token' : self.token, + 'filterType' : filterType, + 'filterValues' : fieldvalstr, + 'fields' : fieldstr + } + 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'] + + def get_activity_types(self): self.authenticate() args = { @@ -236,7 +264,57 @@ def create_lead(self, lookupField, lookupValue, values): ] } return self.post(data) - + + 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 leadsID] + 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(result['errors'][0]) + return result['success'] + + + 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={ + 'leadIds':leadstr + } + else: + data={ + 'leadld' : leadstr, + 'mergeInCRM' : mergeInCRM + } + 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'] + + + def post(self, data): self.authenticate() args = { @@ -245,4 +323,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 + diff --git a/pythonmarketo/helper/http_lib.py b/pythonmarketo/helper/http_lib.py index 53293e7..e87560b 100644 --- a/pythonmarketo/helper/http_lib.py +++ b/pythonmarketo/helper/http_lib.py @@ -36,6 +36,6 @@ def post(self, endpoint, args, data): r = requests.post(url, data=json.dumps(data), headers=headers) return r.json() except Exception as e: - print("HTTP Post Exception!!! Retrying.....") + print("HTTP Post Exception!!! Retrying....."+ str(e)) time.sleep(self.sleep_duration) retries += 1