-
-
Save Harshakvarma/8e75285aded615f13bdbc212d2942ad3 to your computer and use it in GitHub Desktop.
MixPanel Export API in Python 3
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
I got it working | |
```python | |
import base64 | |
import urllib.request | |
import ssl | |
try: | |
import json | |
except ImportError: | |
import simplejson as json | |
class Mixpanel(object): | |
ENDPOINT = 'https://mixpanel.com/api' | |
VERSION = '2.0' | |
def __init__(self, api_secret): | |
self.api_secret = api_secret | |
def request(self, methods, params, http_method='GET', format='json'): | |
""" | |
methods - List of methods to be joined, e.g. ['events', 'properties', 'values'] | |
will give us http://mixpanel.com/api/2.0/events/properties/values/ | |
params - Extra parameters associated with method | |
""" | |
params['format'] = format | |
# print(base64.b64encode(self.api_secret).decode("ascii")) | |
request_url = '/'.join([self.ENDPOINT, str(self.VERSION)] + methods) | |
if http_method == 'GET': | |
data = None | |
request_url = request_url + '/?' + self.unicode_urlencode(params) | |
else: | |
data = self.unicode_urlencode(params) | |
auth = base64.b64encode(self.api_secret).decode("ascii") | |
headers = {'Authorization': 'Basic {encoded_secret}'.format(encoded_secret=auth)} | |
request = urllib.request.Request(request_url, data, headers) | |
# print(request) | |
context = ssl._create_unverified_context() | |
response = urllib.request.urlopen(request, context=context, timeout=120) | |
str_response = response.read().decode('utf8') | |
lines = str_response.splitlines(True) | |
records = [] | |
for line in lines: | |
obj = json.loads(line) | |
records.append(obj) | |
return records | |
def unicode_urlencode(self, params): | |
""" | |
Convert lists to JSON encoded strings, and correctly handle any | |
unicode URL parameters. | |
""" | |
if isinstance(params, dict): | |
params = list(params.items()) | |
for i,param in enumerate(params): | |
if isinstance(param[1], list): | |
params.remove(param) | |
params.append ((param[0], json.dumps(param[1]),)) | |
return urllib.parse.urlencode( | |
[(k, v) for k, v in params] | |
) | |
if __name__ == '__main__': | |
encoded_secret = b'SECRET_KEY' | |
# byteAPISecret = bytes(encoded_secret + ':', "utf-8") | |
api = Mixpanel(api_secret=encoded_secret) | |
data = api.request(['events'], { | |
'event': ['Free Tab'], | |
'unit': 'hour', | |
'interval': 24, | |
'type': 'general' | |
}) | |
# data = api.request(['export'], { | |
# 'event': ['Event Name'], | |
# 'to_date': "2018-04-16", | |
# 'from_date': "2018-05-31" | |
# }) | |
print (json.dumps(data, indent=4)) | |
``` |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment