Skip to content

Instantly share code, notes, and snippets.

@freundTech
Last active January 12, 2017 16:44
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save freundTech/01b8a365bdf0b7cb444a5586b22be0eb to your computer and use it in GitHub Desktop.
Save freundTech/01b8a365bdf0b7cb444a5586b22be0eb to your computer and use it in GitHub Desktop.
#!/usr/bin/env python3
from collections import OrderedDict
from xml.etree import ElementTree as ET
import sys
import re
import json
from urllib.request import Request, urlopen
from urllib.parse import urlencode
import _ctypes
import json
import re
import uuid
def di(obj_id):
# from http://stackoverflow.com/a/15012814/355230
""" Reverse of id() function. """
return _ctypes.PyObj_FromPtr(obj_id)
class NoIndent(object):
def __init__(self, value):
self.value = value
class NoIndentEncoder(json.JSONEncoder):
def __init__(self, *args, **kwargs):
super(NoIndentEncoder, self).__init__(*args, **kwargs)
self.kwargs = dict(kwargs)
del self.kwargs['indent']
del self.kwargs['separators']
self._replacement_map = {}
def default(self, o):
if isinstance(o, NoIndent):
key = uuid.uuid4().hex
self._replacement_map[key] = json.dumps(o.value, separators=(', ', ': '), **self.kwargs)
return "@@%s@@" % (key,)
else:
return super(NoIndentEncoder, self).default(o)
def encode(self, o):
result = super(NoIndentEncoder, self).encode(o)
for k, v in self._replacement_map.items():
result = result.replace('"@@%s@@"' % (k,), v)
return result
fields = ["record_first", "record_second", "record_third"]
url = "https://api.mojang.com/users/profiles/minecraft/"
if len(sys.argv) < 2:
print("Please supply a filename")
sys.exit()
content = ""
with open(sys.argv[1], 'r') as file_:
content = file_.read()
data = []
table = ET.XML(content)
rows = iter(table)
for row in rows:
values = [col.text for col in row]
#print(values)
map = OrderedDict()
map["map"] = values[0]
map["slug"] = re.sub('[^0-9a-z_]', "_", values[0].lower())
tags = [{}]
if len(sys.argv) >= 3:
tags[0][sys.argv[2]] = True
map["tags"] = NoIndent(tags)
for i, text in enumerate(values[1:4]):
if text != None:
username = text.split(" ")[0]
distance = text.split(" ")[1][1:]
response = urlopen(url+username).read()
if len(response) == 0:
response = urlopen(url+username+"?at=0").read()
if len(response) == 0:
response = {"id": "", "name": username}
if type(response) == bytes:
response = json.loads(response)
name = response["name"]
uuid_ = response["id"][:8]+"-"+response["id"][8:12]+"-"+response["id"][12:16]+"-"+response["id"][16:20]+"-"+response["id"][20:]
map[fields[i]] = NoIndent([{"player_name": name, "player_uuid": uuid_, "distance": distance, "evidence": ""}])
else:
map[fields[i]] = NoIndent([{"player_name": "", "player_uuid": "", "distance": "", "evidence": ""}])
data.append(map)
print(json.dumps(data, indent=4, cls=NoIndentEncoder, separators=(',', ': ')))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment