Change URL for getting servers to the JS API one (the previous ones tend to respond with 429)

This commit is contained in:
Bruno BDS 2025-08-19 14:54:06 +02:00
parent 22210ca352
commit 93fb9120b0
1 changed files with 12 additions and 36 deletions

View File

@ -742,6 +742,7 @@ def catch_request(request, opener=None):
return uh, False return uh, False
except HTTP_ERRORS: except HTTP_ERRORS:
e = get_exception() e = get_exception()
printer('Error: %s' % e, debug=True)
return None, e return None, e
@ -1259,10 +1260,7 @@ class Speedtest(object):
) )
urls = [ urls = [
'://www.speedtest.net/speedtest-servers-static.php', "://www.speedtest.net/api/js/servers",
'http://c.speedtest.net/speedtest-servers-static.php',
'://www.speedtest.net/speedtest-servers.php',
'http://c.speedtest.net/speedtest-servers.php',
] ]
headers = {} headers = {}
@ -1305,53 +1303,31 @@ class Speedtest(object):
printer('Servers XML:\n%s' % serversxml, debug=True) printer('Servers XML:\n%s' % serversxml, debug=True)
try: try:
try: elements = json.loads(serversxml)
try: except SyntaxError:
root = ET.fromstring(serversxml)
except ET.ParseError:
e = get_exception()
raise SpeedtestServersError(
'Malformed speedtest.net server list: %s' % e
)
elements = etree_iter(root, 'server')
except AttributeError:
try:
root = DOM.parseString(serversxml)
except ExpatError:
e = get_exception()
raise SpeedtestServersError(
'Malformed speedtest.net server list: %s' % e
)
elements = root.getElementsByTagName('server')
except (SyntaxError, xml.parsers.expat.ExpatError):
raise ServersRetrievalError() raise ServersRetrievalError()
for server in elements: for server in elements:
try: if servers and int(server.get('id')) not in servers:
attrib = server.attrib
except AttributeError:
attrib = dict(list(server.attributes.items()))
if servers and int(attrib.get('id')) not in servers:
continue continue
if (int(attrib.get('id')) in self.config['ignore_servers'] if (int(server.get('id')) in self.config['ignore_servers']
or int(attrib.get('id')) in exclude): or int(server.get('id')) in exclude):
continue continue
try: try:
d = distance(self.lat_lon, d = distance(self.lat_lon,
(float(attrib.get('lat')), (float(server.get('lat')),
float(attrib.get('lon')))) float(server.get('lon'))))
except Exception: except Exception:
continue continue
attrib['d'] = d server['d'] = d
try: try:
self.servers[d].append(attrib) self.servers[d].append(server)
except KeyError: except KeyError:
self.servers[d] = [attrib] self.servers[d] = [server]
break break