Fix JSON parsing errors for empty API responses
Added proper error handling for API endpoints that return empty or invalid JSON responses. This prevents JSONDecodeError exceptions when the StreamMaster API returns empty content.
Changes:
- Added empty response checking before JSON parsing in _get_api_data, _patch_api_data, and _post_api_data methods
- Added try-except blocks to catch json.JSONDecodeError with helpful error messages
- Return appropriate empty values ([] for GET, {} for PATCH/POST) when response is empty
- Added debug logging to show response content when JSON parsing fails
Fixes errors like: "Expecting value: line 1 column 1 (char 0)" when calling /api/channels/stream-groups/ and /api/channels/m3us/ endpoints
This commit is contained in:
@@ -864,7 +864,18 @@ class Plugin:
|
|||||||
raise Exception(f"API endpoint not found: {endpoint}")
|
raise Exception(f"API endpoint not found: {endpoint}")
|
||||||
|
|
||||||
response.raise_for_status()
|
response.raise_for_status()
|
||||||
json_data = response.json()
|
|
||||||
|
# Check if response has content before trying to parse JSON
|
||||||
|
if not response.text or response.text.strip() == '':
|
||||||
|
logger.warning(f"[Stream-Mapparr] API returned empty response for {endpoint}")
|
||||||
|
return []
|
||||||
|
|
||||||
|
try:
|
||||||
|
json_data = response.json()
|
||||||
|
except json.JSONDecodeError as e:
|
||||||
|
logger.error(f"[Stream-Mapparr] Invalid JSON response for {endpoint}: {e}")
|
||||||
|
logger.debug(f"[Stream-Mapparr] Response content: {response.text[:200]}")
|
||||||
|
raise Exception(f"API returned invalid JSON: {e}")
|
||||||
|
|
||||||
if isinstance(json_data, dict):
|
if isinstance(json_data, dict):
|
||||||
return json_data.get('results', json_data)
|
return json_data.get('results', json_data)
|
||||||
@@ -919,7 +930,18 @@ class Plugin:
|
|||||||
raise Exception(f"API endpoint not found: {endpoint}")
|
raise Exception(f"API endpoint not found: {endpoint}")
|
||||||
|
|
||||||
response.raise_for_status()
|
response.raise_for_status()
|
||||||
return response.json()
|
|
||||||
|
# Check if response has content before trying to parse JSON
|
||||||
|
if not response.text or response.text.strip() == '':
|
||||||
|
logger.warning(f"[Stream-Mapparr] API returned empty response for {endpoint}")
|
||||||
|
return {}
|
||||||
|
|
||||||
|
try:
|
||||||
|
return response.json()
|
||||||
|
except json.JSONDecodeError as e:
|
||||||
|
logger.error(f"[Stream-Mapparr] Invalid JSON response for {endpoint}: {e}")
|
||||||
|
logger.debug(f"[Stream-Mapparr] Response content: {response.text[:200]}")
|
||||||
|
raise Exception(f"API returned invalid JSON: {e}")
|
||||||
|
|
||||||
except requests.exceptions.RequestException as e:
|
except requests.exceptions.RequestException as e:
|
||||||
logger.error(f"[Stream-Mapparr] API PATCH request failed for {endpoint}: {e}")
|
logger.error(f"[Stream-Mapparr] API PATCH request failed for {endpoint}: {e}")
|
||||||
@@ -955,7 +977,18 @@ class Plugin:
|
|||||||
raise Exception(f"API endpoint not found: {endpoint}")
|
raise Exception(f"API endpoint not found: {endpoint}")
|
||||||
|
|
||||||
response.raise_for_status()
|
response.raise_for_status()
|
||||||
return response.json()
|
|
||||||
|
# Check if response has content before trying to parse JSON
|
||||||
|
if not response.text or response.text.strip() == '':
|
||||||
|
logger.warning(f"[Stream-Mapparr] API returned empty response for {endpoint}")
|
||||||
|
return {}
|
||||||
|
|
||||||
|
try:
|
||||||
|
return response.json()
|
||||||
|
except json.JSONDecodeError as e:
|
||||||
|
logger.error(f"[Stream-Mapparr] Invalid JSON response for {endpoint}: {e}")
|
||||||
|
logger.debug(f"[Stream-Mapparr] Response content: {response.text[:200]}")
|
||||||
|
raise Exception(f"API returned invalid JSON: {e}")
|
||||||
|
|
||||||
except requests.exceptions.RequestException as e:
|
except requests.exceptions.RequestException as e:
|
||||||
logger.error(f"[Stream-Mapparr] API POST request failed for {endpoint}: {e}")
|
logger.error(f"[Stream-Mapparr] API POST request failed for {endpoint}: {e}")
|
||||||
|
|||||||
Reference in New Issue
Block a user