# -*- coding: utf-8 -*- # Copyright 2020 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. """Extractors for Moebooru based sites""" from .common import Extractor, Message, generate_extractors from .. import text import re import datetime import collections class MoebooruExtractor(Extractor): """Base class for Moebooru extractors""" basecategory = "moebooru" filename_fmt = "{category}_{id}_{md5}.{extension}" page_start = 1 per_page = 50 def items(self): extended_tags = self.config("tags", False) data = self.metadata() for post in self.posts(): try: url = self._prepare_post(post, extended_tags) except KeyError: continue post.update(data) text.nameext_from_url(url, post) yield Message.Directory, post yield Message.Url, url, post def metadata(self): return () def posts(self): return () def skip(self, num): pages = num // self.per_page self.page_start += pages return pages * self.per_page def _prepare_post(self, post, extended_tags=False): url = post["file_url"] if url[0] == "/": url = self.root + url if extended_tags: self._fetch_extended_tags(post) post["date"] = text.parse_timestamp(post["created_at"]) return url def _fetch_extended_tags(self, post): url = "{}/post/show/{}".format(self.root, post["id"]) page = self.request(url).text html = text.extract(page, '