#!/usr/bin/python import os import sys import urllib import urllib2 import cookielib import urlparse import hashlib import hmac import base64 import json import random headers = {"Accept":"application/json","Content-type":"application/json","User_Agent":"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US; rv:1.9.1) Gecko/20090624 Firefox/3.5"} serviceUrl = 'http://services.bluekai.com/Services/WS/sites/{YOUR_SITE_ID}' # Add your user id and key bkuid = '{YOUR_WEB_SERVICE_USER_KEY}' bksecretkey = '{YOUR_WEB_SERVICE_PRIVATE_KEY}' # Enter list of allowed redirect domains # Example: data = ["www.google.com", "www.oracle.com", "www.facebook.com", "www.twitter.com"] data = [{YOUR_REDIRECT_DOMAINS}] def signatureInputBuilder(url, method, data): stringToSign = method parsedUrl = urlparse.urlparse(url) print parsedUrl stringToSign += parsedUrl.path # first split the query into array of parameters separted by the '&' character print parsedUrl.query qP = parsedUrl.query.split('&') print qP if len(qP) > 0: for qS in qP: qP2 = qS.split('=', 1) #print qP2 if len(qP2) > 1: stringToSign += qP2[1] print stringToSign if data != None : stringToSign += data print stringToSign h = hmac.new(bksecretkey, stringToSign, hashlib.sha256) s = base64.standard_b64encode(h.digest()) print s u = urllib.quote_plus(s) print u newUrl = url if url.find('?') == -1 : newUrl += '?' else: newUrl += '&' newUrl += 'bkuid=' + bkuid + '&bksig=' + u return newUrl def doRequest(url, method, data): 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 : request = urllib2.Request(url, data, headers) else: request = urllib2.Request(url, None, headers) # request.add_header('If-Modified-Since' , 'Fri, 31 Aug 2012 14:01:51 PDT') opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cJ)) u = opener.open(request) rawData = u.read() print rawData print "200 ok" return rawData except urllib2.HTTPError, e: print "HTTP 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 # Comment and uncomment both lines for your request def main(argv=None): #newUrl = signatureInputBuilder(serviceUrl, 'GET', None) #newUrl = signatureInputBuilder(serviceUrl, 'POST', data) #newUrl = signatureInputBuilder(serviceUrl, 'PUT', data) #print newUrl #doRequest(newUrl, 'GET', None) #doRequest(newUrl, 'POST', data) #doRequest(newUrl, 'PUT', data) # GET container details newUrl = signatureInputBuilder(serviceUrl, 'GET', None) print newUrl rawData = doRequest(newUrl, 'GET', None) # Update redirect_domains in response body site = json.loads(rawData) print "old redirect domains: " + json.dumps(site["redirect_domains"]) site["redirect_domains"] = data print "new redirect domains: " + json.dumps(site["redirect_domains"]) site.pop("created_at") site.pop("updated_at") site.pop("partner") site.pop("group_id") site.pop("type") site.pop("id") allowed_buyers = site["allowed_buyers"] allowed_buyers_int = [] for a in allowed_buyers: allowed_buyers_int.append(a["id"]) site["allowed_buyers"] = allowed_buyers_int # PUT updated response body newUrl = signatureInputBuilder(serviceUrl, 'PUT', json.dumps(site)) print newUrl doRequest(newUrl, 'PUT', json.dumps(site)) if __name__ == "__main__": main()