From 6c8c9af8c3fe3d7c89fc4ab0d2de1aded80a8ca4 Mon Sep 17 00:00:00 2001 From: Kyla Date: Sat, 5 Sep 2026 19:41:49 +0330 Subject: [PATCH 1/2] Fix unhandled JSONDecodeError in fetch_room_id_api Wrap response.json() in a try/except so a non-JSON response from TikTok (e.g. 403 with empty body when rate-limited or blocked) raises a clean FailedParseRoomIdError instead of an unhandled JSONDecodeError. --- TikTokLive/client/web/routes/fetch_room_id_api.py | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/TikTokLive/client/web/routes/fetch_room_id_api.py b/TikTokLive/client/web/routes/fetch_room_id_api.py index fdb92ed..84f042b 100644 --- a/TikTokLive/client/web/routes/fetch_room_id_api.py +++ b/TikTokLive/client/web/routes/fetch_room_id_api.py @@ -38,6 +38,7 @@ async def fetch_user_room_data(cls, web: TikTokHTTPClient, unique_id: str) -> di :param web: The TikTokHTTPClient client to use :param unique_id: The user to check :return: The user's room info + :raises FailedParseRoomIdError: If TikTok returns a non-JSON or blocked response """ @@ -51,11 +52,17 @@ async def fetch_user_room_data(cls, web: TikTokHTTPClient, unique_id: str) -> di ) ) - response_json: dict = response.json() - + try: + response_json: dict = response.json() + except ValueError: + raise FailedParseRoomIdError( + f"TikTok returned a non-JSON response for '{unique_id}' " + f"(HTTP {response.status_code}). You are likely being rate-limited " + f"or temporarily blocked by TikTok." + ) # Invalid user - if response_json["message"] == "user_not_found": + if response_json.get("message") == "user_not_found": raise UserNotFoundError( unique_id, ( From 0d96d763180dc325607006a665acc41341e1ceb4 Mon Sep 17 00:00:00 2001 From: Kyla Date: Sun, 6 Sep 2026 03:14:08 +0330 Subject: [PATCH 2/2] Fix error handling for room ID fetching --- TikTokLive/client/web/routes/fetch_room_id_api.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/TikTokLive/client/web/routes/fetch_room_id_api.py b/TikTokLive/client/web/routes/fetch_room_id_api.py index 84f042b..ec5d9e2 100644 --- a/TikTokLive/client/web/routes/fetch_room_id_api.py +++ b/TikTokLive/client/web/routes/fetch_room_id_api.py @@ -59,7 +59,7 @@ async def fetch_user_room_data(cls, web: TikTokHTTPClient, unique_id: str) -> di f"TikTok returned a non-JSON response for '{unique_id}' " f"(HTTP {response.status_code}). You are likely being rate-limited " f"or temporarily blocked by TikTok." - ) + ) from None # Invalid user if response_json.get("message") == "user_not_found":