diff --git a/gallery_dl/extractor/paheal.py b/gallery_dl/extractor/paheal.py index ad9f620c..745837b3 100644 --- a/gallery_dl/extractor/paheal.py +++ b/gallery_dl/extractor/paheal.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- -# Copyright 2018-2020 Mike Fährmann +# 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 @@ -41,6 +41,29 @@ class PahealExtractor(Extractor): 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", ">").split(" // ") + post["width"], _, post["height"] = dimensions.partition("x") + post["size"] = text.parse_bytes(size[:-1]) + + return (post,) + class PahealTagExtractor(PahealExtractor): """Extractor for images from rule34.paheal.net by search-tags""" @@ -87,8 +110,9 @@ class PahealTagExtractor(PahealExtractor): width, _, height = dimensions.partition("x") return { - "id": pid, "md5": md5, "tags": tags, "file_url": url, + "id": pid, "md5": md5, "file_url": url, "width": width, "height": height, + "tags": text.unescape(tags), "size": text.parse_bytes(size[:-1]), } @@ -98,31 +122,44 @@ class PahealPostExtractor(PahealExtractor): subcategory = "post" pattern = (r"(?:https?://)?(?:rule34|rule63|cosplay)\.paheal\.net" r"/post/view/(\d+)") - test = ("https://rule34.paheal.net/post/view/481609", { - "pattern": r"https://tulip\.paheal\.net/_images" - r"/bbdc1c33410c2cdce7556c7990be26b7/481609%20-%20" - r"Azumanga_Daioh%20Osaka%20Vuvuzela%20inanimate\.jpg", - "keyword": "abe7c1220ba5601f9639aa79fbb9689674ec8f5c", - "content": "7b924bcf150b352ac75c9d281d061e174c851a11", - }) + test = ( + ("https://rule34.paheal.net/post/view/481609", { + "pattern": r"https://tulip\.paheal\.net/_images" + r"/bbdc1c33410c2cdce7556c7990be26b7/481609%20-%20" + r"Azumanga_Daioh%20Osaka%20Vuvuzela%20inanimate\.jpg", + "content": "7b924bcf150b352ac75c9d281d061e174c851a11", + "keyword": { + "date": "dt:2010-06-17 15:40:23", + "extension": "jpg", + "file_url": "re:https://tulip.paheal.net/_images/bbdc1c33410c", + "filename": "481609 - Azumanga_Daioh Osaka Vuvuzela inanimate", + "height": 660, + "id": 481609, + "md5": "bbdc1c33410c2cdce7556c7990be26b7", + "size": 157389, + "source": None, + "tags": "Azumanga_Daioh Osaka Vuvuzela inanimate", + "uploader": "CaptainButtface", + "width": 614, + }, + }), + ("https://rule34.paheal.net/post/view/488534", { + "keyword": { + "date": "dt:2010-06-25 13:51:17", + "height": 800, + "md5": "b39edfe455a0381110c710d6ed2ef57d", + "size": 758989, + "source": "http://www.furaffinity.net/view/4057821/", + "tags": "Vuvuzela inanimate thelost-dragon", + "uploader": "leacheate_soup", + "width": 1200, + }, + }), + ) def __init__(self, match): PahealExtractor.__init__(self, match) self.post_id = match.group(1) def get_posts(self): - url = "{}/post/view/{}".format(self.root, self.post_id) - page = self.request(url).text - - tags , pos = text.extract(page, ": ", "<") - md5 , pos = text.extract(page, "/_thumbs/", "/", pos) - url , pos = text.extract(page, "id='main_image' src='", "'", pos) - width , pos = text.extract(page, "data-width=", " ", pos) - height, pos = text.extract(page, "data-height=", " ", pos) - - return ({ - "id": self.post_id, "md5": md5, "tags": tags, "file_url": url, - "size" : 0, - "width" : width.strip("'\""), - "height": height.strip("'\""), - },) + return self._extract_post(self.post_id)