diff options
Diffstat (limited to 'gallery_dl/extractor/imgur.py')
| -rw-r--r-- | gallery_dl/extractor/imgur.py | 198 |
1 files changed, 13 insertions, 185 deletions
diff --git a/gallery_dl/extractor/imgur.py b/gallery_dl/extractor/imgur.py index 4c29d98..8884d3e 100644 --- a/gallery_dl/extractor/imgur.py +++ b/gallery_dl/extractor/imgur.py @@ -11,7 +11,6 @@ from .common import Extractor, Message from .. import text, exception - BASE_PATTERN = r"(?:https?://)?(?:www\.|[im]\.)?imgur\.(?:com|io)" @@ -22,8 +21,10 @@ class ImgurExtractor(Extractor): def __init__(self, match): Extractor.__init__(self, match) - self.api = ImgurAPI(self) self.key = match.group(1) + + def _init(self): + self.api = ImgurAPI(self) self.mp4 = self.config("mp4", True) def _prepare(self, image): @@ -63,69 +64,7 @@ class ImgurImageExtractor(ImgurExtractor): archive_fmt = "{id}" pattern = (BASE_PATTERN + r"/(?!gallery|search)" r"(?:r/\w+/)?(\w{7}|\w{5})[sbtmlh]?") - test = ( - ("https://imgur.com/21yMxCS", { - "url": "6f2dcfb86815bdd72808c313e5f715610bc7b9b2", - "content": "0c8768055e4e20e7c7259608b67799171b691140", - "keyword": { - "account_id" : 0, - "comment_count" : int, - "cover_id" : "21yMxCS", - "date" : "dt:2016-11-10 14:24:35", - "description" : "", - "downvote_count": int, - "duration" : 0, - "ext" : "png", - "favorite" : False, - "favorite_count": 0, - "has_sound" : False, - "height" : 32, - "id" : "21yMxCS", - "image_count" : 1, - "in_most_viral" : False, - "is_ad" : False, - "is_album" : False, - "is_animated" : False, - "is_looping" : False, - "is_mature" : False, - "is_pending" : False, - "mime_type" : "image/png", - "name" : "test-ใในใ", - "point_count" : int, - "privacy" : "", - "score" : int, - "size" : 182, - "title" : "Test", - "upvote_count" : int, - "url" : "https://i.imgur.com/21yMxCS.png", - "view_count" : int, - "width" : 64, - }, - }), - ("http://imgur.com/0gybAXR", { # gifv/mp4 video - "url": "a2220eb265a55b0c95e0d3d721ec7665460e3fd7", - "content": "a3c080e43f58f55243ab830569ba02309d59abfc", - }), - ("https://imgur.com/XFfsmuC", { # missing title in API response (#467) - "keyword": {"title": "Tears are a natural response to irritants"}, - }), - ("https://imgur.com/1Nily2P", { # animated png - "pattern": "https://i.imgur.com/1Nily2P.png", - }), - ("https://imgur.com/zzzzzzz", { # not found - "exception": exception.HttpError, - }), - ("https://m.imgur.com/r/Celebs/iHJ7tsM"), - ("https://www.imgur.com/21yMxCS"), # www - ("https://m.imgur.com/21yMxCS"), # mobile - ("https://imgur.com/zxaY6"), # 5 character key - ("https://imgur.io/zxaY6"), # .io - ("https://i.imgur.com/21yMxCS.png"), # direct link - ("https://i.imgur.io/21yMxCS.png"), # direct link .io - ("https://i.imgur.com/21yMxCSh.png"), # direct link thumbnail - ("https://i.imgur.com/zxaY6.gif"), # direct link (short) - ("https://i.imgur.com/zxaY6s.gif"), # direct link (short; thumb) - ) + example = "https://imgur.com/abcdefg" def items(self): image = self.api.image(self.key) @@ -150,71 +89,7 @@ class ImgurAlbumExtractor(ImgurExtractor): filename_fmt = "{category}_{album[id]}_{num:>03}_{id}.{extension}" archive_fmt = "{album[id]}_{id}" pattern = BASE_PATTERN + r"/a/(\w{7}|\w{5})" - test = ( - ("https://imgur.com/a/TcBmP", { - "url": "ce3552f550a5b5316bd9c7ae02e21e39f30c0563", - "keyword": { - "album": { - "account_id" : 0, - "comment_count" : int, - "cover_id" : "693j2Kr", - "date" : "dt:2015-10-09 10:37:50", - "description" : "", - "downvote_count": 0, - "favorite" : False, - "favorite_count": 0, - "id" : "TcBmP", - "image_count" : 19, - "in_most_viral" : False, - "is_ad" : False, - "is_album" : True, - "is_mature" : False, - "is_pending" : False, - "privacy" : "private", - "score" : int, - "title" : "138", - "upvote_count" : int, - "url" : "https://imgur.com/a/TcBmP", - "view_count" : int, - "virality" : int, - }, - "account_id" : 0, - "count" : 19, - "date" : "type:datetime", - "description": "", - "ext" : "jpg", - "has_sound" : False, - "height" : int, - "id" : str, - "is_animated": False, - "is_looping" : False, - "mime_type" : "image/jpeg", - "name" : str, - "num" : int, - "size" : int, - "title" : str, - "type" : "image", - "updated_at" : None, - "url" : str, - "width" : int, - }, - }), - ("https://imgur.com/a/eD9CT", { # large album - "url": "de748c181a04d18bef1de9d4f4866ef0a06d632b", - }), - ("https://imgur.com/a/RhJXhVT/all", { # 7 character album hash - "url": "695ef0c950023362a0163ee5041796300db76674", - }), - ("https://imgur.com/a/TcBmQ", { - "exception": exception.HttpError, - }), - ("https://imgur.com/a/pjOnJA0", { # empty, no 'media' (#2557) - "count": 0, - }), - ("https://www.imgur.com/a/TcBmP"), # www - ("https://imgur.io/a/TcBmP"), # .io - ("https://m.imgur.com/a/TcBmP"), # mobile - ) + example = "https://imgur.com/a/abcde" def items(self): album = self.api.album(self.key) @@ -247,17 +122,7 @@ class ImgurGalleryExtractor(ImgurExtractor): """Extractor for imgur galleries""" subcategory = "gallery" pattern = BASE_PATTERN + r"/(?:gallery|t/\w+)/(\w{7}|\w{5})" - test = ( - ("https://imgur.com/gallery/zf2fIms", { # non-album gallery (#380) - "pattern": "https://imgur.com/zf2fIms", - }), - ("https://imgur.com/gallery/eD9CT", { - "pattern": "https://imgur.com/a/eD9CT", - }), - ("https://imgur.com/t/unmuted/26sEhNr"), - ("https://imgur.com/t/cat/qSB8NbN"), - ("https://imgur.io/t/cat/qSB8NbN"), # .io - ) + example = "https://imgur.com/gallery/abcde" def items(self): if self.api.gallery(self.key)["is_album"]: @@ -273,15 +138,7 @@ class ImgurUserExtractor(ImgurExtractor): """Extractor for all images posted by a user""" subcategory = "user" pattern = BASE_PATTERN + r"/user/([^/?#]+)(?:/posts|/submitted)?/?$" - test = ( - ("https://imgur.com/user/Miguenzo", { - "range": "1-100", - "count": 100, - "pattern": r"https://imgur\.com(/a)?/\w+$", - }), - ("https://imgur.com/user/Miguenzo/posts"), - ("https://imgur.com/user/Miguenzo/submitted"), - ) + example = "https://imgur.com/user/USER" def items(self): return self._items_queue(self.api.account_submissions(self.key)) @@ -291,11 +148,7 @@ class ImgurFavoriteExtractor(ImgurExtractor): """Extractor for a user's favorites""" subcategory = "favorite" pattern = BASE_PATTERN + r"/user/([^/?#]+)/favorites/?$" - test = ("https://imgur.com/user/Miguenzo/favorites", { - "range": "1-100", - "count": 100, - "pattern": r"https://imgur\.com(/a)?/\w+$", - }) + example = "https://imgur.com/user/USER/favorites" def items(self): return self._items_queue(self.api.account_favorites(self.key)) @@ -305,16 +158,7 @@ class ImgurFavoriteFolderExtractor(ImgurExtractor): """Extractor for a user's favorites folder""" subcategory = "favorite-folder" pattern = BASE_PATTERN + r"/user/([^/?#]+)/favorites/folder/(\d+)" - test = ( - ("https://imgur.com/user/mikf1/favorites/folder/11896757/public", { - "pattern": r"https://imgur\.com(/a)?/\w+$", - "count": 3, - }), - ("https://imgur.com/user/mikf1/favorites/folder/11896741/private", { - "pattern": r"https://imgur\.com(/a)?/\w+$", - "count": 5, - }), - ) + example = "https://imgur.com/user/USER/favorites/folder/12345/TITLE" def __init__(self, match): ImgurExtractor.__init__(self, match) @@ -329,11 +173,7 @@ class ImgurSubredditExtractor(ImgurExtractor): """Extractor for a subreddits's imgur links""" subcategory = "subreddit" pattern = BASE_PATTERN + r"/r/([^/?#]+)/?$" - test = ("https://imgur.com/r/pics", { - "range": "1-100", - "count": 100, - "pattern": r"https://imgur\.com(/a)?/\w+$", - }) + example = "https://imgur.com/r/SUBREDDIT" def items(self): return self._items_queue(self.api.gallery_subreddit(self.key)) @@ -343,11 +183,7 @@ class ImgurTagExtractor(ImgurExtractor): """Extractor for imgur tag searches""" subcategory = "tag" pattern = BASE_PATTERN + r"/t/([^/?#]+)$" - test = ("https://imgur.com/t/animals", { - "range": "1-100", - "count": 100, - "pattern": r"https://imgur\.com(/a)?/\w+$", - }) + example = "https://imgur.com/t/TAG" def items(self): return self._items_queue(self.api.gallery_tag(self.key)) @@ -357,11 +193,7 @@ class ImgurSearchExtractor(ImgurExtractor): """Extractor for imgur search results""" subcategory = "search" pattern = BASE_PATTERN + r"/search(?:/[^?#]+)?/?\?q=([^&#]+)" - test = ("https://imgur.com/search?q=cute+cat", { - "range": "1-100", - "count": 100, - "pattern": r"https://imgur\.com(/a)?/\w+$", - }) + example = "https://imgur.com/search?q=UERY" def items(self): key = text.unquote(self.key.replace("+", " ")) @@ -449,11 +281,7 @@ class ImgurAPI(): params["client_id"] = self.client_id params["page"] = 0 params["sort"] = "newest" - - headers = { - "Referer": "https://imgur.com/", - "Origin": "https://imgur.com", - } + headers = {"Origin": "https://imgur.com"} while True: data = self._call(endpoint, params, headers)["data"] |
