From b0bf73c5b818b91d38f450f6b3c4410b7f319279 Mon Sep 17 00:00:00 2001 From: Your Name Date: Thu, 29 Jun 2023 20:12:20 -0400 Subject: [PATCH] fix some edge case in login domain detection --- mastodon/api.py | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/mastodon/api.py b/mastodon/api.py index 4010efd3..4d2fb7de 100644 --- a/mastodon/api.py +++ b/mastodon/api.py @@ -242,17 +242,22 @@ def detect_server_info(login_domain): try: j = response.json() domain = j["uri"].lower().split("//")[-1].split("/")[0] - api_domain = domain - if "urls" in j and "streaming_api" in j["urls"]: - api_domain = j["urls"]["streaming_api"].split("://")[1] - server_version = j["version"] - logger.info( - f"detect_server_info: {login_domain} {domain} {api_domain} {server_version}" - ) - return domain, api_domain, server_version except Exception as e: logger.error(f"Error connecting {login_domain}: {e}") raise Exception("实例返回信息无法识别") + server_version = j["version"] + api_domain = domain + if domain != login_domain: + url = f"https://{domain}/api/v1/instance" + try: + response = get(url, headers={"User-Agent": USER_AGENT}) + j = response.json() + except: + api_domain = login_domain + logger.info( + f"detect_server_info: {login_domain} {domain} {api_domain} {server_version}" + ) + return domain, api_domain, server_version def get_mastodon_application(login_domain):