diff --git a/booru_viewer/core/api/danbooru.py b/booru_viewer/core/api/danbooru.py index 02b5ba2..9a85a70 100644 --- a/booru_viewer/core/api/danbooru.py +++ b/booru_viewer/core/api/danbooru.py @@ -29,7 +29,10 @@ class DanbooruClient(BooruClient): if resp.status_code != 200: log.warning(f" body: {resp.text[:500]}") resp.raise_for_status() - data = resp.json() + try: + data = resp.json() + except Exception: + return [] # Some Danbooru forks wrap in {"posts": [...]} if isinstance(data, dict): diff --git a/booru_viewer/core/api/e621.py b/booru_viewer/core/api/e621.py index b7975fe..c38f6bc 100644 --- a/booru_viewer/core/api/e621.py +++ b/booru_viewer/core/api/e621.py @@ -49,7 +49,10 @@ class E621Client(BooruClient): if resp.status_code != 200: log.warning(f" body: {resp.text[:500]}") resp.raise_for_status() - data = resp.json() + try: + data = resp.json() + except Exception: + return [] # e621 wraps posts in {"posts": [...]} if isinstance(data, dict): diff --git a/booru_viewer/core/api/gelbooru.py b/booru_viewer/core/api/gelbooru.py index 6169a7d..3795135 100644 --- a/booru_viewer/core/api/gelbooru.py +++ b/booru_viewer/core/api/gelbooru.py @@ -44,7 +44,11 @@ class GelbooruClient(BooruClient): log.warning(f" body: {resp.text[:500]}") resp.raise_for_status() - data = resp.json() + try: + data = resp.json() + except Exception: + log.warning(f" non-JSON response: {resp.text[:200]}") + return [] log.debug(f" json type: {type(data).__name__}, keys: {list(data.keys()) if isinstance(data, dict) else f'list[{len(data)}]'}") # Gelbooru wraps posts in {"post": [...]} or returns {"post": []} if isinstance(data, dict): diff --git a/booru_viewer/core/api/moebooru.py b/booru_viewer/core/api/moebooru.py index 1afac5c..98b0be4 100644 --- a/booru_viewer/core/api/moebooru.py +++ b/booru_viewer/core/api/moebooru.py @@ -23,7 +23,10 @@ class MoebooruClient(BooruClient): resp = await self.client.get(f"{self.base_url}/post.json", params=params) resp.raise_for_status() - data = resp.json() + try: + data = resp.json() + except Exception: + return [] if isinstance(data, dict): data = data.get("posts", data.get("post", [])) if not isinstance(data, list):