From 5cb263fdd22ae8c585ef010adc27c4b90ddf7d26 Mon Sep 17 00:00:00 2001 From: enduser420 <91022934+enduser420@users.noreply.github.com> Date: Mon, 16 Jan 2023 21:08:45 +0530 Subject: [PATCH] [wikifeet/wikifeetx] add 'gallery' extractor --- docs/supportedsites.md | 12 ++++ gallery_dl/extractor/__init__.py | 1 + gallery_dl/extractor/wikifeet.py | 118 +++++++++++++++++++++++++++++++ scripts/supportedsites.py | 4 ++ 4 files changed, 135 insertions(+) create mode 100644 gallery_dl/extractor/wikifeet.py diff --git a/docs/supportedsites.md b/docs/supportedsites.md index cb04f31b..49649558 100644 --- a/docs/supportedsites.md +++ b/docs/supportedsites.md @@ -931,6 +931,18 @@ Consider all sites to be NSFW unless otherwise known. Artists, Artist Listings, Artworks, individual Images + + Wikifeet + https://www.wikifeet.com/ + Galleries + + + + Wikifeetx + https://www.wikifeetx.com/ + Galleries + + xHamster https://xhamster.com/ diff --git a/gallery_dl/extractor/__init__.py b/gallery_dl/extractor/__init__.py index f26f6a9d..8c42e1a7 100644 --- a/gallery_dl/extractor/__init__.py +++ b/gallery_dl/extractor/__init__.py @@ -158,6 +158,7 @@ modules = [ "webtoons", "weibo", "wikiart", + "wikifeet", "xhamster", "xvideos", "zerochan", diff --git a/gallery_dl/extractor/wikifeet.py b/gallery_dl/extractor/wikifeet.py new file mode 100644 index 00000000..70e96462 --- /dev/null +++ b/gallery_dl/extractor/wikifeet.py @@ -0,0 +1,118 @@ +# -*- coding: utf-8 -*- + +# 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://www.wikifeet.com/""" + +from .common import GalleryExtractor +from .. import text +import json + + +class WikifeetGalleryExtractor(GalleryExtractor): + """Extractor for image galleries from wikifeet.com""" + category = "wikifeet" + directory_fmt = ("{category}", "{celebrity}") + filename_fmt = "{category}_{celeb}_{pid}.{extension}" + archive_fmt = "{type}_{celeb}_{pid}" + pattern = (r"(?:https?://)(?:(?:www\.)?wikifeetx?|" + r"men\.wikifeet)\.com/([^/?#]+)") + test = ( + ("https://www.wikifeet.com/Madison_Beer", { + "pattern": (r"https://pics\.wikifeet\.com/Madison_Beer" + r"-Feet-\d+\.jpg"), + "count" : ">= 352", + "keyword": { + "celeb" : "Madison_Beer", + "celebrity" : "Madison Beer", + "birthday" : "dt:1999-03-05 00:00:00", + "birthplace": "United States", + "rating" : float, + "pid" : int, + "width" : int, + "height" : int, + "shoesize" : "7.5 US", + "type" : "women", + "tags" : list, + }, + }), + ("https://www.wikifeetx.com/Tifa_Quinn", { + "pattern": (r"https://pics\.wikifeet\.com/Tifa_Quinn" + r"-Feet-\d+\.jpg"), + "count" : ">= 9", + "keyword": { + "celeb" : "Tifa_Quinn", + "celebrity" : "Tifa Quinn", + "birthday" : "[NOT SET]", + "birthplace": "United States", + "rating" : float, + "pid" : int, + "width" : int, + "height" : int, + "shoesize" : "[NOT SET]", + "type" : "women", + "tags" : list, + }, + }), + ("https://men.wikifeet.com/Chris_Hemsworth", { + "pattern": (r"https://pics\.wikifeet\.com/Chris_Hemsworth" + r"-Feet-\d+\.jpg"), + "count" : ">= 860", + "keyword": { + "celeb" : "Chris_Hemsworth", + "celebrity" : "Chris Hemsworth", + "birthday" : "dt:1983-08-11 00:00:00", + "birthplace": "Australia", + "rating" : float, + "pid" : int, + "width" : int, + "height" : int, + "shoesize" : "12.5 US", + "type" : "men", + "tags" : list, + }, + }), + ) + + def __init__(self, match): + self.root = text.root_from_url(match.group(0)) + if "wikifeetx.com" in self.root: + self.category = "wikifeetx" + self.type = "men" if "://men." in self.root else "women" + self.celeb = match.group(1) + GalleryExtractor.__init__(self, match, self.root + "/" + self.celeb) + + def metadata(self, page): + extr = text.extract_from(page) + return { + "celeb" : self.celeb, + "type" : self.type, + "rating" : text.parse_float(extr('"ratingValue": "', '"')), + "celebrity" : text.unescape(extr("times'>", "")), + "shoesize" : text.remove_html(extr("Shoe Size:", "edit")), + "birthplace": text.remove_html(extr("Birthplace:", "edit")), + "birthday" : text.parse_datetime(text.remove_html( + extr("Birth Date:", "edit")), "%Y-%m-%d"), + } + + def images(self, page): + tagmap = { + "C": "Close-up", + "T": "Toenails", + "N": "Nylons", + "A": "Arches", + "S": "Soles", + "B": "Barefoot", + } + ufmt = "https://pics.wikifeet.com/" + self.celeb + "-Feet-{}.jpg" + return [ + (ufmt.format(data["pid"]), { + "pid" : data["pid"], + "width" : data["pw"], + "height": data["ph"], + "tags" : [tagmap[tag] for tag in data["tags"]], + }) + for data in json.loads(text.extr(page, "['gdata'] = ", ";")) + ] diff --git a/scripts/supportedsites.py b/scripts/supportedsites.py index b6e76c60..2addedb8 100755 --- a/scripts/supportedsites.py +++ b/scripts/supportedsites.py @@ -437,6 +437,10 @@ def build_extractor_list(): default["mangalife"] = default["mangasee"] domains["mangalife"] = "https://manga4life.com/" + # add wikifeetx.com + default["wikifeetx"] = default["wikifeet"] + domains["wikifeetx"] = "https://www.wikifeetx.com/" + return categories, domains