-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathmain.py
150 lines (114 loc) · 7.29 KB
/
main.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
# -*- coding: utf-8 -*-
## OpenKit Exporter
## Created by Peter Willemsen <[email protected]>
from requests_oauthlib import OAuth1Session
import json
class bcolors:
HEADER = '\033[95m'
OKBLUE = '\033[94m'
OKGREEN = '\033[92m'
WARNING = '\033[93m'
FAIL = '\033[91m'
ENDC = '\033[0m'
GREY = '\033[37m'
BOLD = '\033[1m'
def intro():
print """
Proudly built by%s
███████████
█████████████████
█████████████████
███ ███
███ ███
█████████████████
███████████████████████████
█████████████████████████████████████
█████████████████████████████████████
██████████████░░░░░█████░░░░░██████████████
█████████████████░░░░░█████░░░░░████████░░░██████
██████████████░░░░░███████████░░░░░████████░░░███
██████████████░░░░░███████████░░░░░████████░░░███
█████████████████░░░░░███████████░░░░░████████░░░░░░███
█████████████████░░░░░███████████░░░░░████████░░░░░░███
████████████████████░░░░░█████░░░░░███████████░░░░░░███
██████████████████████░░░░░█████░░░░░██████████████░░░░░░███
███████████████████████████████████████████████████░░░░░░███
███████████████████████████████████████████████████░░░░░░███
███████████████████████████████████████████████████░░░░░░███
███████████████████████████████████████████████████░░░░░░███
███████████████████████████████████████████████████░░░░░░███%s
""" % (bcolors.GREY, bcolors.ENDC)
print """
Welcome to the Export tool for OpenKit!
This tool allows you to locally store all the data we can get from OpenKit, so you can keep it safe after the 1 December deadline.
After Gameeso is done, I (or we depending on how the community grows :)) will allow you to import that data again in Gameeso to continue your services.
Please follow along with the instructions.
This tool functions like a insurance policy, to at least keep your data safe whenether or not I decide to continue with Gameeso.
With great love, Peter Willemsen.
More Info: http://gameeso.com/openkit-notes/
"""
def main():
intro()
server = input_default("Server", "http://api.openkit.io")
app_key = input_default("Application Key", None)
app_secret = input_default("Application Secret", None)
import_from_server(server, app_key, app_secret)
def import_from_server(server, app_key, app_secret):
print server, app_key, app_secret
session = OAuth1Session(app_key,
client_secret=app_secret)
output = {}
def get(endpoint):
return session.get("%s/%s" % (server, endpoint))
leaderboards = json.loads(get("leaderboards?tag=v1").content)
output['leaderboards'] = leaderboards
output['users'] = []
def fetch_leaderboard_page(leaderboard, page_num):
if not 'scores' in leaderboard:
leaderboard['scores'] = []
content = json.loads(get("best_scores?leaderboard_id=%s&leaderboard_range=all_time&num_per_page=25&page_num=%s" % (leaderboard['id'], page_num)).content)
for score in content:
# Merge leaderboard data from scores
inner_leaderboard = score['leaderboard']
user = score['user']
leaderboard.update(inner_leaderboard)
possible_user = next((item for item in output['users'] if item['id'] == user['id']), None)
if possible_user == None:
output['users'].append(user)
print str_type_progress("\t\tUser found, id: %s%s%s" % (bcolors.BOLD, user['id'], bcolors.ENDC))
score.pop('leaderboard', None)
score.pop('user', None)
leaderboard['scores'].extend(content)
return content
for leaderboard in leaderboards:
page_num = 1
print str_type_progress("Fetching leaderboard id: %s%s%s" % (bcolors.BOLD, leaderboard['id'], bcolors.ENDC))
result = None
while result != []:
print str_type_progress("\tFetching leaderboard page %s%s%s" % (bcolors.BOLD, page_num, bcolors.ENDC))
result = fetch_leaderboard_page(leaderboard, page_num)
page_num = page_num + 1
print str_type_progress("No more pages left for leaderboard id: %s%s%s" % (bcolors.BOLD, leaderboard['id'], bcolors.ENDC))
json_output = json.dumps(output, sort_keys=True, indent=4, separators=(',', ': '))
file = open("my_data.json", "w")
file.write(json_output)
file.write("\n")
file.close()
print """
Done! Please put the file my_data.json somewhere safe for later use!
I worked on this tool in my free time and made it freely available, if this tool helped you, please consider a donation: http://gameeso.com/#donation
"""
def str_type_progress(str):
return str
def str_type_default(str):
return '%s%s%s' % (bcolors.OKBLUE, str, bcolors.ENDC)
def input_default(message, default):
if default == None:
user_input = raw_input("%s: " % message)
else:
user_input = raw_input("%s [%s]: " % (message, str_type_default(default)))
if not user_input:
user_input = default
return user_input
if __name__ == "__main__":
main()