# -*- coding: utf-8 -*- # Copyright 2018-2022 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 https://rule34.paheal.net/""" from .common import Extractor, Message from .. import text class PahealExtractor(Extractor): """Base class for paheal extractors""" basecategory = "booru" category = "paheal" filename_fmt = "{category}_{id}_{md5}.{extension}" archive_fmt = "{id}" root = "https://rule34.paheal.net" def items(self): self.session.cookies.set( "ui-tnc-agreed", "true", domain="rule34.paheal.net") data = self.get_metadata() for post in self.get_posts(): url = post["file_url"] for key in ("id", "width", "height"): post[key] = text.parse_int(post[key]) post["tags"] = text.unquote(post["tags"]) post.update(data) yield Message.Directory, post yield Message.Url, url, text.nameext_from_url(url, post) def get_metadata(self): """Return general metadata""" return {} def get_posts(self): """Return an iterable containing data of all relevant posts""" def _extract_post(self, post_id): url = "{}/post/view/{}".format(self.root, post_id) extr = text.extract_from(self.request(url).text) post = { "id" : post_id, "tags" : extr(": ", "<"), "md5" : extr("/_thumbs/", "/"), "file_url": extr("id='main_image' src='", "'"), "uploader": text.unquote(extr( "class='username' href='/user/", "'")), "date" : text.parse_datetime( extr("datetime='", "'"), "%Y-%m-%dT%H:%M:%S%z"), "source" : text.extract( extr(">Source Link<", ""), "href='", "'")[0], } dimensions, size, ext = extr("Info