2015-03-11 20:16:17 +01:00
|
|
|
""" Username to UUID
|
|
|
|
Converts a Minecraft username to it's UUID equivalent.
|
|
|
|
|
2015-03-11 20:25:25 +01:00
|
|
|
Uses the official Mojang API to fetch player data.
|
2015-03-11 20:16:17 +01:00
|
|
|
"""
|
|
|
|
import http.client
|
2015-03-11 20:25:25 +01:00
|
|
|
import json
|
2015-03-11 20:16:17 +01:00
|
|
|
|
|
|
|
|
|
|
|
class UsernameToUUID:
|
|
|
|
def __init__(self, username):
|
|
|
|
self.username = username
|
|
|
|
|
2015-03-11 20:25:25 +01:00
|
|
|
def get_uuid(self, timestamp=None):
|
2015-03-11 20:16:17 +01:00
|
|
|
"""
|
|
|
|
Get the UUID of the player.
|
2015-03-11 20:25:25 +01:00
|
|
|
|
|
|
|
Parameters
|
|
|
|
----------
|
|
|
|
timestamp : long integer
|
|
|
|
The time at which the player used this name, expressed as a Unix timestamp.
|
2015-03-11 20:16:17 +01:00
|
|
|
"""
|
2015-03-11 20:25:25 +01:00
|
|
|
get_args = "" if timestamp is None else "?at=" + str(timestamp)
|
|
|
|
|
|
|
|
http_conn = http.client.HTTPSConnection("api.mojang.com");
|
|
|
|
http_conn.request("GET", "/users/profiles/minecraft/" + self.username + get_args,
|
|
|
|
headers={'User-Agent':'Minecraft Username -> UUID', 'Content-Type':'application/json'});
|
|
|
|
response = http_conn.getresponse().read().decode("utf-8")
|
|
|
|
|
|
|
|
if (not response and timestamp is None): # No response & no timestamp
|
|
|
|
return self.get_uuid(0) # Let's retry with the Unix timestamp 0.
|
|
|
|
if (not response): # No response (player probably doesn't exist)
|
|
|
|
return ""
|
|
|
|
|
|
|
|
json_data = json.loads(response)
|
|
|
|
uuid = json_data['id']
|
2015-03-11 20:16:17 +01:00
|
|
|
|
2015-03-11 20:25:25 +01:00
|
|
|
return uuid
|