diff --git a/gallery_dl/extractor/tumblr.py b/gallery_dl/extractor/tumblr.py index 9cda996a..92fc8314 100644 --- a/gallery_dl/extractor/tumblr.py +++ b/gallery_dl/extractor/tumblr.py @@ -31,15 +31,12 @@ class TumblrExtractor(Extractor): filename_fmt = "{category}_{blog_name}_{id}_{num:>02}.{extension}" archive_fmt = "{id}_{num}" - def __init__(self, match): - Extractor.__init__(self, match) - - if name := match[2]: - self.blog = name + ".tumblr.com" - else: - self.blog = match[1] or match[3] - def _init(self): + if name := self.groups[1]: + self.blog = f"{name}.tumblr.com" + else: + self.blog = self.groups[0] or self.groups[2] + self.api = TumblrAPI(self) self.types = self._setup_posttypes() self.avatar = self.config("avatar", False) @@ -287,14 +284,10 @@ class TumblrPostExtractor(TumblrExtractor): pattern = BASE_PATTERN + r"/(?:post/|image/)?(\d+)" example = "https://www.tumblr.com/BLOG/12345" - def __init__(self, match): - TumblrExtractor.__init__(self, match) - self.post_id = match[4] + def posts(self): self.reblogs = True self.date_min = 0 - - def posts(self): - return self.api.posts(self.blog, {"id": self.post_id}) + return self.api.posts(self.blog, {"id": self.groups[3]}) def _setup_posttypes(self): return POST_TYPES @@ -303,15 +296,13 @@ class TumblrPostExtractor(TumblrExtractor): class TumblrTagExtractor(TumblrExtractor): """Extractor for Tumblr user's posts by tag""" subcategory = "tag" - pattern = BASE_PATTERN + r"/tagged/([^/?#]+)" + pattern = BASE_PATTERN + r"(?:/archive)?/tagged/([^/?#]+)" example = "https://www.tumblr.com/BLOG/tagged/TAG" - def __init__(self, match): - TumblrExtractor.__init__(self, match) - self.tag = text.unquote(match[4].replace("-", " ")) - def posts(self): - return self.api.posts(self.blog, {"tag": self.tag}) + self.kwdict["search_tags"] = tag = text.unquote( + self.groups[3].replace("-", " ")) + return self.api.posts(self.blog, {"tag": tag}) class TumblrDayExtractor(TumblrExtractor): @@ -320,21 +311,13 @@ class TumblrDayExtractor(TumblrExtractor): pattern = BASE_PATTERN + r"/day/(\d\d\d\d/\d\d/\d\d)" example = "https://www.tumblr.com/BLOG/day/1970/01/01" - def __init__(self, match): - TumblrExtractor.__init__(self, match) - year, month, day = match[4].split("/") - self.ordinal = date(int(year), int(month), int(day)).toordinal() - - def _init(self): - TumblrExtractor._init(self) - - self.date_min = ( - # 719163 == date(1970, 1, 1).toordinal() - (self.ordinal - 719163) * 86400) - - self.api.before = self.date_min + 86400 - def posts(self): + year, month, day = self.groups[3].split("/") + ordinal = date(int(year), int(month), int(day)).toordinal() + + # 719163 == date(1970, 1, 1).toordinal() + self.date_min = (ordinal - 719163) * 86400 + self.api.before = self.date_min + 86400 return self.api.posts(self.blog, {}) diff --git a/test/results/tumblr.py b/test/results/tumblr.py index 2d0ea25d..8dccc032 100644 --- a/test/results/tumblr.py +++ b/test/results/tumblr.py @@ -11,7 +11,6 @@ from gallery_dl import exception __tests__ = ( { "#url" : "http://demo.tumblr.com/", - "#category": ("", "tumblr", "user"), "#class" : tumblr.TumblrUserExtractor, "#options" : {"posts": "photo"}, "#pattern" : r"https://\d+\.media\.tumblr\.com/tumblr_[^/_]+_\d+\.jpg", @@ -20,7 +19,6 @@ __tests__ = ( { "#url" : "http://demo.tumblr.com/", - "#category": ("", "tumblr", "user"), "#class" : tumblr.TumblrUserExtractor, "#options" : { "posts" : "all", @@ -33,7 +31,6 @@ __tests__ = ( { "#url" : "https://mikf123-hidden.tumblr.com/", "#comment" : "dashboard-only", - "#category": ("", "tumblr", "user"), "#class" : tumblr.TumblrUserExtractor, "#options" : {"access-token": None}, "#exception": exception.AuthorizationError, @@ -42,7 +39,6 @@ __tests__ = ( { "#url" : "https://mikf123-hidden.tumblr.com/", "#comment" : "dashboard-only", - "#category": ("", "tumblr", "user"), "#class" : tumblr.TumblrUserExtractor, "#count" : 2, @@ -55,7 +51,6 @@ __tests__ = ( { "#url" : "https://mikf123-private.tumblr.com/", "#comment" : "password protected", - "#category": ("", "tumblr", "user"), "#class" : tumblr.TumblrUserExtractor, "#count" : 2, @@ -68,7 +63,6 @@ __tests__ = ( { "#url" : "https://mikf123-private-hidden.tumblr.com/", "#comment" : "dashboard-only & password protected", - "#category": ("", "tumblr", "user"), "#class" : tumblr.TumblrUserExtractor, "#count" : 2, @@ -82,7 +76,6 @@ __tests__ = ( { "#url" : "https://mikf123.tumblr.com/", "#comment" : "date-min/-max/-format (#337)", - "#category": ("", "tumblr", "user"), "#class" : tumblr.TumblrUserExtractor, "#options" : { "date-min" : "201804", @@ -95,14 +88,12 @@ __tests__ = ( { "#url" : "https://tumblr.com/mikf123", "#comment" : "no 'www.' subdomain (#7358)", - "#category": ("", "tumblr", "user"), "#class" : tumblr.TumblrUserExtractor, }, { "#url" : "https://donttrustthetits.tumblr.com/", "#comment" : "pagination with 'date-max' (#2191) and 'api-key'", - "#category": ("", "tumblr", "user"), "#class" : tumblr.TumblrUserExtractor, "#options" : { "access-token": None, @@ -115,49 +106,41 @@ __tests__ = ( { "#url" : "https://demo.tumblr.com/page/2", - "#category": ("", "tumblr", "user"), "#class" : tumblr.TumblrUserExtractor, }, { "#url" : "https://demo.tumblr.com/archive", - "#category": ("", "tumblr", "user"), "#class" : tumblr.TumblrUserExtractor, }, { "#url" : "tumblr:http://www.b-authentique.com/", - "#category": ("", "tumblr", "user"), "#class" : tumblr.TumblrUserExtractor, }, { "#url" : "tumblr:www.b-authentique.com", - "#category": ("", "tumblr", "user"), "#class" : tumblr.TumblrUserExtractor, }, { "#url" : "https://www.tumblr.com/blog/view/smarties-art", - "#category": ("", "tumblr", "user"), "#class" : tumblr.TumblrUserExtractor, }, { "#url" : "https://www.tumblr.com/blog/smarties-art", - "#category": ("", "tumblr", "user"), "#class" : tumblr.TumblrUserExtractor, }, { "#url" : "https://www.tumblr.com/smarties-art", - "#category": ("", "tumblr", "user"), "#class" : tumblr.TumblrUserExtractor, }, { "#url" : "http://demo.tumblr.com/post/459265350", - "#category": ("", "tumblr", "post"), "#class" : tumblr.TumblrPostExtractor, "#pattern" : r"https://\d+\.media\.tumblr\.com/tumblr_[^/_]+_1280.jpg", "#count" : 1, @@ -165,49 +148,42 @@ __tests__ = ( { "#url" : "https://mikf123.tumblr.com/post/167770226574/text-post", - "#category": ("", "tumblr", "post"), "#class" : tumblr.TumblrPostExtractor, "#count" : 2, }, { "#url" : "https://mikf123.tumblr.com/post/181022561719/quote-post", - "#category": ("", "tumblr", "post"), "#class" : tumblr.TumblrPostExtractor, "#count" : 1, }, { "#url" : "https://mikf123.tumblr.com/post/167623351559/link-post", - "#category": ("", "tumblr", "post"), "#class" : tumblr.TumblrPostExtractor, "#count" : 2, }, { "#url" : "https://mikf123.tumblr.com/post/167633596145/video-post", - "#category": ("", "tumblr", "post"), "#class" : tumblr.TumblrPostExtractor, "#count" : 2, }, { "#url" : "https://mikf123.tumblr.com/post/167770026604/audio-post", - "#category": ("", "tumblr", "post"), "#class" : tumblr.TumblrPostExtractor, "#count" : 2, }, { "#url" : "https://mikf123.tumblr.com/post/172687798174/photo-post", - "#category": ("", "tumblr", "post"), "#class" : tumblr.TumblrPostExtractor, "#count" : 4, }, { "#url" : "https://mikf123.tumblr.com/post/181022380064/chat-post", - "#category": ("", "tumblr", "post"), "#class" : tumblr.TumblrPostExtractor, "#count" : 0, }, @@ -215,7 +191,6 @@ __tests__ = ( { "#url" : "https://kichatundk.tumblr.com/post/654953419288821760", "#comment" : "high-quality images (#1846)", - "#category": ("", "tumblr", "post"), "#class" : tumblr.TumblrPostExtractor, "#count" : 2, "#sha1_content": "d6fcc7b6f750d835d55c7f31fa3b63be26c9f89b", @@ -224,7 +199,6 @@ __tests__ = ( { "#url" : "https://hameru-is-cool.tumblr.com/post/639261855227002880", "#comment" : "high-quality images (#1344)", - "#category": ("", "tumblr", "post"), "#class" : tumblr.TumblrPostExtractor, "#exception" : exception.NotFoundError, "#count" : 2, @@ -234,7 +208,6 @@ __tests__ = ( { "#url" : "https://k-eke.tumblr.com/post/185341184856", "#comment" : "wrong extension returned by api (#3095)", - "#category": ("", "tumblr", "post"), "#class" : tumblr.TumblrPostExtractor, "#options" : {"retries": 0}, "#results" : "https://64.media.tumblr.com/5e9d760aba24c65beaf0e72de5aae4dd/tumblr_psj5yaqV871t1ig6no1_1280.gif", @@ -243,7 +216,6 @@ __tests__ = ( { "#url" : "https://mikf123.tumblr.com/image/689860196535762944", - "#category": ("", "tumblr", "post"), "#class" : tumblr.TumblrPostExtractor, "#pattern" : r"^https://\d+\.media\.tumblr\.com/134791621559a79793563b636b5fe2c6/8f1131551cef6e74-bc/s99999x99999/188cf9b8915b0d0911c6c743d152fc62e8f38491\.png$", }, @@ -251,70 +223,66 @@ __tests__ = ( { "#url" : "http://ziemniax.tumblr.com/post/109697912859/", "#comment" : "HTML response (#297)", - "#category": ("", "tumblr", "post"), "#class" : tumblr.TumblrPostExtractor, "#exception": exception.NotFoundError, }, { "#url" : "http://demo.tumblr.com/image/459265350", - "#category": ("", "tumblr", "post"), "#class" : tumblr.TumblrPostExtractor, }, { "#url" : "https://www.tumblr.com/blog/view/smarties-art/686047436641353728", - "#category": ("", "tumblr", "post"), "#class" : tumblr.TumblrPostExtractor, }, { "#url" : "https://www.tumblr.com/blog/smarties-art/686047436641353728", - "#category": ("", "tumblr", "post"), "#class" : tumblr.TumblrPostExtractor, }, { "#url" : "https://www.tumblr.com/smarties-art/686047436641353728", - "#category": ("", "tumblr", "post"), "#class" : tumblr.TumblrPostExtractor, }, { "#url" : "https://tumblr.com/smarties-art/686047436641353728", - "#category": ("", "tumblr", "post"), "#class" : tumblr.TumblrPostExtractor, }, { "#url" : "http://demo.tumblr.com/tagged/Times%20Square", - "#category": ("", "tumblr", "tag"), "#class" : tumblr.TumblrTagExtractor, "#pattern" : r"https://\d+\.media\.tumblr\.com/tumblr_[^/_]+_1280.jpg", "#count" : 1, + + "search_tags": "Times Square", }, { "#url" : "https://www.tumblr.com/blog/view/smarties-art/tagged/undertale", - "#category": ("", "tumblr", "tag"), "#class" : tumblr.TumblrTagExtractor, }, { "#url" : "https://www.tumblr.com/blog/smarties-art/tagged/undertale", - "#category": ("", "tumblr", "tag"), "#class" : tumblr.TumblrTagExtractor, }, { "#url" : "https://www.tumblr.com/smarties-art/tagged/undertale", - "#category": ("", "tumblr", "tag"), + "#class" : tumblr.TumblrTagExtractor, +}, + +{ + "#url" : "https://hirespokemon.tumblr.com/archive/tagged/ken%20sugimori", "#class" : tumblr.TumblrTagExtractor, }, { "#url" : "https://mikf123.tumblr.com/day/2018/01/05", - "#category": ("", "tumblr", "day"), "#class" : tumblr.TumblrDayExtractor, "#pattern" : r"https://64\.media\.tumblr\.com/1a2be8c63f1df58abd2622861696c72a/tumblr_ozm9nqst9t1wgha4yo1_1280\.jpg", "#count" : 1, @@ -324,32 +292,27 @@ __tests__ = ( { "#url" : "https://www.tumblr.com/blog/view/mikf123/day/2018/01/05", - "#category": ("", "tumblr", "day"), "#class" : tumblr.TumblrDayExtractor, }, { "#url" : "https://www.tumblr.com/blog/mikf123/day/2018/01/05", - "#category": ("", "tumblr", "day"), "#class" : tumblr.TumblrDayExtractor, }, { "#url" : "https://www.tumblr.com/mikf123/day/2018/01/05", - "#category": ("", "tumblr", "day"), "#class" : tumblr.TumblrDayExtractor, }, { "#url" : "http://mikf123.tumblr.com/likes", - "#category": ("", "tumblr", "likes"), "#class" : tumblr.TumblrLikesExtractor, "#count" : 1, }, { "#url" : "http://mikf123.tumblr.com/likes", - "#category": ("", "tumblr", "likes"), "#class" : tumblr.TumblrLikesExtractor, "#options" : {"api-secret": None}, "#count" : 1, @@ -357,25 +320,21 @@ __tests__ = ( { "#url" : "https://www.tumblr.com/blog/view/mikf123/likes", - "#category": ("", "tumblr", "likes"), "#class" : tumblr.TumblrLikesExtractor, }, { "#url" : "https://www.tumblr.com/blog/mikf123/likes", - "#category": ("", "tumblr", "likes"), "#class" : tumblr.TumblrLikesExtractor, }, { "#url" : "https://www.tumblr.com/mikf123/likes", - "#category": ("", "tumblr", "likes"), "#class" : tumblr.TumblrLikesExtractor, }, { "#url" : "https://tumblr.com/mikf123/likes", - "#category": ("", "tumblr", "likes"), "#class" : tumblr.TumblrLikesExtractor, }, @@ -416,7 +375,7 @@ __tests__ = ( "https://demo.tumblr.com/", ), - "can_show_badges": True, + "can_show_badges": bool, "description" : str, "name" : str, "title" : str,