import base64, hashlib, hmac, json, time, urllib.parse, zlib
from urllib.request import urlopen

ROOT_URL = 'https://services.uplynk.com'
USER_ID = '1234567890abcdefghijklmnopqrstu' # Replace with your user ID.
API_KEY = '1234567890abcdefghijklmnopqrstuvwxyz1234' # Replace with your API key.

def Call(uri, **msg):
    """Base method for Uplynk API (api2) calls"""
    msg['_owner'] = USER_ID
    msg['_timestamp'] = int(time.time())
    msg = json.dumps(msg)
    msg = zlib.compress(msg.encode(), level=9)
    msg = base64.b64encode(msg).strip()
    sig = hmac.new(API_KEY.encode(), msg, hashlib.sha256).hexdigest()
    body = urllib.parse.urlencode(dict(msg=msg, sig=sig)).encode('utf-8')
    return json.loads(urlopen(ROOT_URL + uri, body).read())