Use the Mojang API directly; reduces overhead.
This commit is contained in:
parent
192046b776
commit
d78fad6937
@ -1,25 +1,38 @@
|
||||
""" Username to UUID
|
||||
Converts a Minecraft username to it's UUID equivalent.
|
||||
|
||||
Parses http://www.lb-stuff.com/Minecraft-Name-History output to retrieve the UUID
|
||||
of an old name that's no longer in use.
|
||||
Uses the official Mojang API to fetch player data.
|
||||
"""
|
||||
import http.client
|
||||
|
||||
from bs4 import BeautifulSoup
|
||||
import json
|
||||
|
||||
|
||||
class UsernameToUUID:
|
||||
def __init__(self, username):
|
||||
self.username = username
|
||||
|
||||
def get_uuid(self):
|
||||
def get_uuid(self, timestamp=None):
|
||||
"""
|
||||
Get the UUID of the player.
|
||||
"""
|
||||
httpConn = http.client.HTTPConnection("www.lb-stuff.com");
|
||||
httpConn.request("GET", "/Minecraft-Name-History?user=" + self.username);
|
||||
response = httpConn.getresponse().read()
|
||||
soup = BeautifulSoup(response)
|
||||
|
||||
return soup.body.findAll('p')[1].findAll('code')[1].text
|
||||
Parameters
|
||||
----------
|
||||
timestamp : long integer
|
||||
The time at which the player used this name, expressed as a Unix timestamp.
|
||||
"""
|
||||
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']
|
||||
|
||||
return uuid
|
||||
|
Loading…
Reference in New Issue
Block a user