diff --git a/gallery_dl/extractor/imgbb.py b/gallery_dl/extractor/imgbb.py
index 27146c46..d9a63c7f 100644
--- a/gallery_dl/extractor/imgbb.py
+++ b/gallery_dl/extractor/imgbb.py
@@ -34,7 +34,7 @@ class ImgbbExtractor(Extractor):
yield Message.Url, url, image
def login(self):
- if self.cookies_check(("LID",)):
+ if self.cookies_check(self.cookies_names):
return
username, password = self._get_auth_info()
@@ -66,8 +66,8 @@ class ImgbbExtractor(Extractor):
def _pagination(self, page, url, params):
seek, pos = text.extract(page, 'data-seek="', '"')
tokn, pos = text.extract(page, 'PF.obj.config.auth_token="', '"', pos)
- data, pos = text.extract(page, "CHV.obj.resource=", "};", pos)
- self.kwdict["user"] = util.json_loads(data + "}").get("user")
+ resc, pos = text.extract(page, "CHV.obj.resource=", "};", pos)
+ self.kwdict["user"] = util.json_loads(resc + "}").get("user")
data = None
while True:
@@ -111,7 +111,7 @@ class ImgbbExtractor(Extractor):
class ImgbbAlbumExtractor(ImgbbExtractor):
- """Extractor for albums on imgbb.com"""
+ """Extractor for imgbb albums"""
subcategory = "album"
pattern = r"(?:https?://)?ibb\.co/album/([^/?#]+)/?(?:\?([^#]+))?"
example = "https://ibb.co/album/ID"
@@ -120,7 +120,6 @@ class ImgbbAlbumExtractor(ImgbbExtractor):
album_id, qs = self.groups
url = f"{self.root}/album/{album_id}"
params = text.parse_query(qs)
- params = {"sort": params["sort"]} if "sort" in params else {}
page = self.request(url, params=params).text
extr = text.extract_from(page)
@@ -178,7 +177,7 @@ class ImgbbImageExtractor(ImgbbExtractor):
class ImgbbUserExtractor(ImgbbExtractor):
- """Extractor for user profiles in imgbb.com"""
+ """Extractor for imgbb user profiles"""
subcategory = "user"
directory_fmt = ("{category}", "{user[name]} ({user[id]})")
pattern = r"(?:https?://)?([\w-]+)\.imgbb\.com/?(?:\?([^#]+))?"
@@ -188,13 +187,17 @@ class ImgbbUserExtractor(ImgbbExtractor):
user, qs = self.groups
url = f"https://{user}.imgbb.com/"
params = text.parse_query(qs)
- params = {"sort": params["sort"]} if "sort" in params else {}
- page = self.request(url, params=params).text
+ response = self.request(url, params=params, allow_redirects=False)
- if "
Sign in
" in page:
+ if response.status_code < 300:
+ params["pathname"] = "/"
+ return self._pagination(response.text, f"{url}json", params)
+
+ if response.status_code == 301:
+ raise exception.NotFoundError("user")
+ redirect = f"HTTP redirect to {response.headers.get('Location')}"
+ if response.status_code == 302:
raise exception.AuthRequired(
- ("username & password", "authenticated cookies"), "user")
-
- url = f"{url}json"
- params["pathname"] = "/"
- return self._pagination(page, url, params)
+ ("username & password", "authenticated cookies"),
+ "profile", redirect)
+ raise exception.AbortExtraction(redirect)
diff --git a/test/results/imgbb.py b/test/results/imgbb.py
index c77413d4..387e2d36 100644
--- a/test/results/imgbb.py
+++ b/test/results/imgbb.py
@@ -71,6 +71,37 @@ __tests__ = (
"#exception": exception.HttpError,
},
+{
+ "#url" : "https://ibb.co/album/jyYWqL",
+ "#class" : imgbb.ImgbbAlbumExtractor,
+ "#results" : "https://i.ibb.co/1J4mTWzQ/test.png",
+
+ "extension": "png",
+ "filename" : "test",
+ "height" : 32,
+ "id" : "bRGKX9bm",
+ "mime" : "image/png",
+ "name" : "test.png",
+ "size" : 182,
+ "title" : "test",
+ "url" : "https://i.ibb.co/1J4mTWzQ/test.png",
+ "width" : 64,
+ "album" : {
+ "count" : 1,
+ "id" : "jyYWqL",
+ "title" : "test-テスト-\"&> Album",
+ "url" : "https://ibb.co/album/jyYWqL",
+ "description": """test-テスト-"&>\nDescription""",
+ },
+ "user" : {
+ "id" : "nrFBYw",
+ "name" : "Gdldev",
+ "url" : "https://gdldev.imgbb.com/",
+ "url_albums": "https://gdldev.imgbb.com/albums",
+ "username" : "gdldev",
+ },
+},
+
{
"#url" : "https://folkie.imgbb.com",
"#class" : imgbb.ImgbbUserExtractor,
@@ -87,6 +118,30 @@ __tests__ = (
"#exception": exception.AuthRequired,
},
+{
+ "#url" : "https://gdldev.imgbb.com/",
+ "#class" : imgbb.ImgbbUserExtractor,
+ "#results" : "https://i.ibb.co/1J4mTWzQ/test.png",
+
+ "extension": "png",
+ "filename" : "test",
+ "height" : 32,
+ "id" : "bRGKX9bm",
+ "mime" : "image/png",
+ "name" : "test.png",
+ "size" : 182,
+ "title" : "test",
+ "url" : "https://i.ibb.co/1J4mTWzQ/test.png",
+ "width" : 64,
+ "user" : {
+ "id" : "nrFBYw",
+ "name" : "Gdldev",
+ "url" : "https://gdldev.imgbb.com/",
+ "url_albums": "https://gdldev.imgbb.com/albums",
+ "username" : "gdldev",
+ },
+},
+
{
"#url" : "https://ibb.co/fUqh5b",
"#class" : imgbb.ImgbbImageExtractor,
@@ -115,4 +170,32 @@ __tests__ = (
},
},
+{
+ "#url" : "https://ibb.co/bRGKX9bm",
+ "#class" : imgbb.ImgbbImageExtractor,
+ "#auth" : False,
+ "#results" : "https://i.ibb.co/1J4mTWzQ/test.png",
+ "#sha1_content": "0c8768055e4e20e7c7259608b67799171b691140",
+
+ "date" : "dt:2025-07-30 20:05:06",
+ "extension": "png",
+ "filename" : "test",
+ "height" : 32,
+ "id" : "bRGKX9bm",
+ "title" : "test",
+ "url" : "https://i.ibb.co/1J4mTWzQ/test.png",
+ "width" : 64,
+ "album" : {
+ "id" : "jyYWqL",
+ "title": "test-テスト-\"&> Album",
+ },
+ "user" : {
+ "id" : "nrFBYw",
+ "name" : "Gdldev",
+ "url" : "https://gdldev.imgbb.com/",
+ "url_albums": "https://gdldev.imgbb.com/albums",
+ "username" : "gdldev",
+ },
+},
+
)