roshanoracle
11/7/2019 - 1:20 PM

Campaigns API

import os
import sys
import urllib
import urllib2
import cookielib
import urlparse
import hashlib 
import hmac
import base64
import json
import random
from datetime import datetime
import time

headers = {"Content-Type": "multipart/form-data; boundary=a8d84ae2e7db4676843c7df172b68bfc","Accept": "application/json","User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:22.0) Gecko/20100101 Firefox/22.0"}

# 1. Enter your BlueKai developer keys

bkuid = 'ENTERPUBLICKEY' #Web Service User Key
bksecretkey = 'ENTERPRIVATEKEY' #Web Service Private Key

# 2.  Specify the partner ID

partner_id = 3247

# 3. For POST and PUT requests, uncomment the "data" variable and enter the JSON body


# DO NOT EDIT BELOW THIS LINE

Url = 'http://services.bluekai.com/rest/campaigns?partner_id=' + str(partner_id)

#Creating the method signature
def signatureInputBuilder(url, method, data):
    stringToSign = method
    parsedUrl = urlparse.urlparse(url)
    print parsedUrl
    stringToSign += parsedUrl.path
    
    # splitting the query into array of parameters separated by the '&' character
    #print parsedUrl.query
    qP = parsedUrl.query.split('&')
    #print qP

    if len(qP) > 0:
        for  qS in qP:
            qP2 = qS.split('=')
            #print qP2
            if len(qP2) > 1:
                stringToSign += qP2[1]
    
    #print stringToSign
    if data != None :
    	#data = json.dumps(data)
        stringToSign += data 
    print "\nString to be Signed:\n" + stringToSign
    
    h = hmac.new(bksecretkey, stringToSign, hashlib.sha256)

    s = base64.standard_b64encode(h.digest())
    print "\nRaw Method Signature:\n" + s 
    
    u = urllib.quote_plus(s)
    print "\nURL Encoded Method Signature (bksig):\n" + u

    newUrl = url 
    if url.find('?') == -1 :
        newUrl += '?'
    else:
        newUrl += '&'
        
    newUrl += 'bkuid=' + bkuid + '&bksig=' + u 

    return newUrl

#Generating  the method request 
def doRequest(url, method, data):
    
    print "\ndoRequest : API Call : URL\n" + url
    print "\ndoRequest : API Call : Method\n" + method    
    try:
        cJ = cookielib.CookieJar()
        request = None
        if method == 'PUT': 
            request = urllib2.Request(url, data, headers)
            request.get_method = lambda: 'PUT'
        elif  method == 'DELETE' :
            request = urllib2.Request(url, data, headers)
            request.get_method = lambda: 'DELETE'
        elif data != None :            
            print "\ndoRequest : Calling API now..."
            request = urllib2.Request(url, data, headers)
            response = urllib2.urlopen(request)
            html = response.read()            
            print "Response received. See below:"
            print html
        else:
            print "Else"
            request = urllib2.Request(url, None, headers)  
            opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cJ))
            u = opener.open(request)
            rawData = u.read()
            print "\nResponse Code: 200"
            print "\nAPI Response:\n" + rawData + "\n"
            return rawData

    except urllib2.HTTPError, e:
        print "\nHTTP error: %d %s" % (e.code, str(e)) 
        print "ERROR: ", e.read()
        return None
    except urllib2.URLError, e:
        print "Network error: %s" % e.reason.args[1]
        print "ERROR: ", e.read()
        return None

#4. Specify the API request method 
def main(argv=None):
    
    # Select the API Method by uncommenting the newUrl reference variable and doRequest() method
    
    # GET
    newUrl = signatureInputBuilder(Url, 'GET', None)
    doRequest(newUrl, 'GET', None)
    
    # POST
    #newUrl = signatureInputBuilder(Url, 'POST', data)    
    #doRequest(newUrl, 'POST', data)    
    #doRequest(Url, 'POST', data)    
    
    # PUT
    #newUrl = signatureInputBuilder(Url, 'PUT', data)
    #doRequest(newUrl, 'PUT', data)
    
    #DELETE
    #newUrl = signatureInputBuilder(Url, 'DELETE', None)
    #doRequest(newUrl, 'DELETE', None)
    
    

if __name__ == "__main__":
   main()