[behance] add 'modules' option (#4799)
This commit is contained in:
@@ -1110,6 +1110,19 @@ Description
|
|||||||
The maximum possible value appears to be ``1920``.
|
The maximum possible value appears to be ``1920``.
|
||||||
|
|
||||||
|
|
||||||
|
extractor.behance.modules
|
||||||
|
-------------------------
|
||||||
|
Type
|
||||||
|
``list`` of ``strings``
|
||||||
|
Default
|
||||||
|
``["image", "video", "mediacollection", "embed"]``
|
||||||
|
Description
|
||||||
|
Selects which gallery modules to download from.
|
||||||
|
|
||||||
|
Supported module types are
|
||||||
|
``image``, ``video``, ``mediacollection``, ``embed``, ``text``.
|
||||||
|
|
||||||
|
|
||||||
extractor.blogger.videos
|
extractor.blogger.videos
|
||||||
------------------------
|
------------------------
|
||||||
Type
|
Type
|
||||||
|
|||||||
@@ -89,6 +89,17 @@ class BehanceGalleryExtractor(BehanceExtractor):
|
|||||||
BehanceExtractor.__init__(self, match)
|
BehanceExtractor.__init__(self, match)
|
||||||
self.gallery_id = match.group(1)
|
self.gallery_id = match.group(1)
|
||||||
|
|
||||||
|
def _init(self):
|
||||||
|
BehanceExtractor._init(self)
|
||||||
|
|
||||||
|
modules = self.config("modules")
|
||||||
|
if modules:
|
||||||
|
if isinstance(modules, str):
|
||||||
|
modules = modules.split(",")
|
||||||
|
self.modules = set(modules)
|
||||||
|
else:
|
||||||
|
self.modules = {"image", "video", "mediacollection", "embed"}
|
||||||
|
|
||||||
def items(self):
|
def items(self):
|
||||||
data = self.get_gallery_data()
|
data = self.get_gallery_data()
|
||||||
imgs = self.get_images(data)
|
imgs = self.get_images(data)
|
||||||
@@ -134,13 +145,17 @@ class BehanceGalleryExtractor(BehanceExtractor):
|
|||||||
append = result.append
|
append = result.append
|
||||||
|
|
||||||
for module in data["modules"]:
|
for module in data["modules"]:
|
||||||
mtype = module["__typename"]
|
mtype = module["__typename"][:-6].lower()
|
||||||
|
|
||||||
if mtype == "ImageModule":
|
if mtype not in self.modules:
|
||||||
|
self.log.debug("Skipping '%s' module", mtype)
|
||||||
|
continue
|
||||||
|
|
||||||
|
if mtype == "image":
|
||||||
url = module["imageSizes"]["size_original"]["url"]
|
url = module["imageSizes"]["size_original"]["url"]
|
||||||
append((url, module))
|
append((url, module))
|
||||||
|
|
||||||
elif mtype == "VideoModule":
|
elif mtype == "video":
|
||||||
try:
|
try:
|
||||||
renditions = module["videoData"]["renditions"]
|
renditions = module["videoData"]["renditions"]
|
||||||
except Exception:
|
except Exception:
|
||||||
@@ -159,7 +174,7 @@ class BehanceGalleryExtractor(BehanceExtractor):
|
|||||||
|
|
||||||
append((url, module))
|
append((url, module))
|
||||||
|
|
||||||
elif mtype == "MediaCollectionModule":
|
elif mtype == "mediacollection":
|
||||||
for component in module["components"]:
|
for component in module["components"]:
|
||||||
for size in component["imageSizes"].values():
|
for size in component["imageSizes"].values():
|
||||||
if size:
|
if size:
|
||||||
@@ -168,14 +183,14 @@ class BehanceGalleryExtractor(BehanceExtractor):
|
|||||||
append(("/".join(parts), module))
|
append(("/".join(parts), module))
|
||||||
break
|
break
|
||||||
|
|
||||||
elif mtype == "EmbedModule":
|
elif mtype == "embed":
|
||||||
embed = module.get("originalEmbed") or module.get("fluidEmbed")
|
embed = module.get("originalEmbed") or module.get("fluidEmbed")
|
||||||
if embed:
|
if embed:
|
||||||
embed = text.unescape(text.extr(embed, 'src="', '"'))
|
embed = text.unescape(text.extr(embed, 'src="', '"'))
|
||||||
module["extension"] = "mp4"
|
module["extension"] = "mp4"
|
||||||
append(("ytdl:" + embed, module))
|
append(("ytdl:" + embed, module))
|
||||||
|
|
||||||
elif mtype == "TextModule":
|
elif mtype == "text":
|
||||||
module["extension"] = "txt"
|
module["extension"] = "txt"
|
||||||
append(("text:" + module["text"], module))
|
append(("text:" + module["text"], module))
|
||||||
|
|
||||||
|
|||||||
@@ -63,6 +63,15 @@ __tests__ = (
|
|||||||
"#count" : 3,
|
"#count" : 3,
|
||||||
},
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"#url" : "https://www.behance.net/gallery/89270715/Moevir",
|
||||||
|
"#comment" : "'text' modules (#4799)",
|
||||||
|
"#category": ("", "behance", "gallery"),
|
||||||
|
"#class" : behance.BehanceGalleryExtractor,
|
||||||
|
"#options" : {"modules": "text"},
|
||||||
|
"#urls" : """text:<div>Make Shift<br><a href="https://www.moevir.com/News/make-shif?fbclid=IwAR2MXL7mVDskdXHitLs4tv_RQFqB1tpAYix2EMIzea4lOSIPdPOR45wEJMA" target="_blank" rel="nofollow">https://www.moevir.com/News/make-shif</a><br>Moevir Magazine November Issue 2019<br>Photography by Caesar Lima @caephoto <br>Model: Bee @phamhuongbee <br>Makeup by Monica Alvarez @monicaalvarezmakeup <br>Styling by Jessica Boal @jessicaboal <br>Hair by James Gilbert @brandnewjames<br>Shot at Vila Sophia<br></div>""",
|
||||||
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
"#url" : "https://www.behance.net/gallery/177464639/Kimori",
|
"#url" : "https://www.behance.net/gallery/177464639/Kimori",
|
||||||
"#comment" : "mature content (#4417)",
|
"#comment" : "mature content (#4417)",
|
||||||
|
|||||||
Reference in New Issue
Block a user