# -*- coding: utf-8 -*- # Copyright 2021 Mike Fährmann # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation. """Extract images from https://tumblrgallery.xyz/""" from .common import GalleryExtractor from .. import text BASE_PATTERN = r"(?:https?://)tumblrgallery\.xyz" class TumblrgalleryGalleryExtractor(GalleryExtractor): """Base class for tumblrgallery extractors""" category = "tumblrgallery" cookiedomain = None def __init__(self, match): self.root = "https://tumblrgallery.xyz" GalleryExtractor.__init__(self, match) class TumblrgalleryTumblrblogExtractor(TumblrgalleryGalleryExtractor): """Extractor for Tumblrblog on tumblrgallery.xyz""" subcategory = "tumblrblog" pattern = BASE_PATTERN + r"(/tumblrblog/gallery/(\d+).html)" test = ( "https://tumblrgallery.xyz/tumblrblog/gallery/103975.html", { "pattern": r"/tumblrblog/gallery/103975.html" r"103975", } ) filename_fmt = "{category}_{gallery_id}_{num:>03}_{id}.{extension}" directory_fmt = ("{category}", "{gallery_id} {title}") def __init__(self, match): TumblrgalleryGalleryExtractor.__init__(self, match) self.gallery_id = text.parse_int(match.group(2)) def metadata(self, page): """Collect metadata for extractor-job""" return { "title" : text.unescape(text.extract(page, "

", "

"))[0], "gallery_id": self.gallery_id, } def images(self, _): page_num = 1 while True: response = self.request( "{}/tumblrblog/gallery/{}/{}.html" .format(self.root, self.gallery_id, page_num), allow_redirects=False ) if response.status_code != 200: return page = response.text page_num += 1 urls = list(text.extract_iter( page, '
", "")[0]) ).replace("_", "-"), "gallery_id": self.gallery_id, } def images(self, page): urls = list(text.extract_iter( page, '
", "")[0] ) ).replace("_", "-") image_src[1]["gallery_id"] = gallery_id yield image_src