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", + }, +}, + )