Path: blob/master/gallery_dl/extractor/girlsreleased.py
14113 views
# -*- coding: utf-8 -*-12# This program is free software; you can redistribute it and/or modify3# it under the terms of the GNU General Public License version 2 as4# published by the Free Software Foundation.56"""Extractors for https://girlsreleased.com/"""78from .common import Extractor, Message9from .. import text10import itertools1112BASE_PATTERN = r"(?:https?://)?(?:www\.)?girlsreleased\.com"131415class GirlsreleasedExtractor(Extractor):16"""Base class for girlsreleased extractors"""17category = "girlsreleased"18root = "https://girlsreleased.com"19request_interval = 0.520request_interval_min = 0.22122def items(self):23data = {"_extractor": GirlsreleasedSetExtractor}24base = self.root + "/set/"25for set in self._pagination():26yield Message.Queue, base + set[0], data2728def _pagination(self):29base = f"{self.root}/api/0.2/sets/{self._path}/{self.groups[0]}/page/"30for pnum in itertools.count():31sets = self.request_json(base + str(pnum))["sets"]32if not sets:33return3435yield from sets[1:] if pnum else sets36if len(sets) < 80:37return383940class GirlsreleasedSetExtractor(GirlsreleasedExtractor):41"""Extractor for girlsreleased galleries"""42subcategory = "set"43pattern = BASE_PATTERN + r"/set/(\d+)"44example = "https://girlsreleased.com/set/12345"4546def items(self):47url = f"{self.root}/api/0.2/set/{self.groups[0]}"48json = self.request_json(url)["set"]49data = {50"title": json["name"] or json["id"],51"id": json["id"],52"site": json["site"],53"model": [model for _, model in json["models"]],54"date": self.parse_timestamp(json["date"]),55"count": len(json["images"]),56"url": "https://girlsreleased.com/set/" + json["id"],57}58yield Message.Directory, "", data59for data["num"], image in enumerate(json["images"], 1):60text.nameext_from_url(image[5], data)61yield Message.Queue, image[3], data626364class GirlsreleasedModelExtractor(GirlsreleasedExtractor):65"""Extractor for girlsreleased models"""66subcategory = _path = "model"67pattern = BASE_PATTERN + r"/model/(\d+(?:/.+)?)"68example = "https://girlsreleased.com/model/12345/MODEL"697071class GirlsreleasedSiteExtractor(GirlsreleasedExtractor):72"""Extractor for girlsreleased sites"""73subcategory = _path = "site"74pattern = BASE_PATTERN + r"/site/([^/?#]+(?:/model/\d+/?.*)?)"75example = "https://girlsreleased.com/site/SITE"767778