From 1905801d2d45129f75fb5800cb1325a04d7a4461 Mon Sep 17 00:00:00 2001 From: vanous Date: Mon, 31 May 2021 19:47:17 +0200 Subject: [PATCH] rotate agps servers in case of 401 error --- buildozer.spec | 2 +- huami_token.py | 24 ++++++++++++++++-------- urls.py | 2 +- 3 files changed, 18 insertions(+), 10 deletions(-) diff --git a/buildozer.spec b/buildozer.spec index 1d1078f..a74ebfe 100644 --- a/buildozer.spec +++ b/buildozer.spec @@ -28,7 +28,7 @@ source.exclude_dirs = tests, bin, screenshots #source.exclude_patterns = license,images/*/*.jpg # (str) Application versioning (method 1) -version = 0.18 +version = 0.19 # (str) Application versioning (method 2) # version.regex = __version__ = ['"](.*)['"] diff --git a/huami_token.py b/huami_token.py index 1f5a3bf..f2bca6f 100644 --- a/huami_token.py +++ b/huami_token.py @@ -170,14 +170,22 @@ class HuamiAmazfit: for pack_idx, agps_pack_name in enumerate(agps_packs): print(f"Downloading {agps_pack_name}...") - response = requests.get(agps_link.format(pack_name=agps_pack_name), headers=headers) - response.raise_for_status() - agps_result = response.json()[0] - if 'fileUrl' not in agps_result: - raise ValueError("No 'fileUrl' parameter in files request.") - with requests.get(agps_result['fileUrl'], stream=True) as request: - with open(agps_file_names[pack_idx], 'wb') as gps_file: - shutil.copyfileobj(request.raw, gps_file) + servers=['api-mifit-us2', 'api-mifit-de2', 'api-mifit-cn2', 'api-mifit-sg2','api-mifit'] + for server in servers: + print(f"trying server: {server}") + response = requests.get(agps_link.format(pack_name=agps_pack_name, server=server), headers=headers) + print(f"status: {response.status_code}") + #response.raise_for_status() + if response.status_code == 401: + print("try new server") + continue + agps_result = response.json()[0] + if 'fileUrl' not in agps_result: + raise ValueError("No 'fileUrl' parameter in files request.") + with requests.get(agps_result['fileUrl'], stream=True) as request: + with open(agps_file_names[pack_idx], 'wb') as gps_file: + shutil.copyfileobj(request.raw, gps_file) + break def logout(self): logout_url = urls.URLS['logout'] diff --git a/urls.py b/urls.py index ff07f30..259f400 100644 --- a/urls.py +++ b/urls.py @@ -28,7 +28,7 @@ URLS = { 'tokens_amazfit': 'https://api-user.huami.com/registrations/{user_email}/tokens', 'login_amazfit': 'https://account.huami.com/v2/client/login', 'devices': 'https://api-mifit-us2.huami.com/users/{user_id}/devices', - 'agps': 'https://api-mifit.huami.com/apps/com.huami.midong/fileTypes/{pack_name}/files', + 'agps': 'https://{server}.huami.com/apps/com.huami.midong/fileTypes/{pack_name}/files', 'data_short': 'https://api-mifit-us2.huami.com/users/{user_id}/deviceTypes/4/data', 'logout': 'https://account-us2.huami.com/v1/client/logout', 'fw_updates': 'https://api-mifit-us2.huami.com/devices/ALL/hasNewVersion'