[redgifs][gfycat] provide fallback URLs (fixes #1962)

and extend the 'format' option
pull/1975/head
Mike Fährmann 3 years ago
parent b6443c576d
commit 8bb442f20d
No known key found for this signature in database
GPG Key ID: 5680CA389D365A88

@ -1237,16 +1237,20 @@ Description
extractor.gfycat.format extractor.gfycat.format
----------------------- -----------------------
Type Type
``string`` * ``list`` of ``strings``
* ``string``
Default Default
``"mp4"`` ``["mp4", "webm", "mobile", "gif"]``
Description Description
The name of the preferred animation format, which can be one of List of names of the preferred animation format, which can be
``"mp4"``, ``"webm"``, ``"gif"``, ``"webp"``, or ``"mjpg"``. ``"mp4"``, ``"webm"``, ``"mobile"``, ``"gif"``, or ``"webp"``.
If a selected format is not available, the next one in the list will be
tried until an available format is found.
If the selected format is not available, ``"mp4"``, ``"webm"`` If the format is given as ``string``, it will be extended with
and ``"gif"`` (in that order) will be tried instead, until an ``["mp4", "webm", "mobile", "gif"]``. Use a list with one element to
available format is found. restrict it to only one possible format.
extractor.hentaifoundry.include extractor.hentaifoundry.include
@ -1864,16 +1868,20 @@ Description
extractor.redgifs.format extractor.redgifs.format
------------------------ ------------------------
Type Type
``string`` * ``list`` of ``strings``
* ``string``
Default Default
``"mp4"`` ``["mp4", "webm", "mobile", "gif"]``
Description Description
The name of the preferred format, which can be one of List of names of the preferred animation format, which can be
``"mp4"``, ``"webm"``, ``"gif"``, ``"webp"``, ``"mobile"``, or ``"mini"``. ``"mp4"``, ``"webm"``, ``"gif"``, ``"webp"``, ``"mobile"``, or ``"mini"``.
If the selected format is not available, ``"mp4"``, ``"webm"`` If a selected format is not available, the next one in the list will be
and ``"gif"`` (in that order) will be tried instead, until an tried until an available format is found.
available format is found.
If the format is given as ``string``, it will be extended with
``["mp4", "webm", "mobile", "gif"]``. Use a list with one element to
restrict it to only one possible format.
extractor.sankakucomplex.embeds extractor.sankakucomplex.embeds

@ -107,7 +107,7 @@
}, },
"gfycat": "gfycat":
{ {
"format": "mp4" "format": ["mp4", "webm", "mobile", "gif"]
}, },
"hentaifoundry": "hentaifoundry":
{ {
@ -222,7 +222,7 @@
}, },
"redgifs": "redgifs":
{ {
"format": "mp4" "format": ["mp4", "webm", "mobile", "gif"]
}, },
"sankakucomplex": "sankakucomplex":
{ {

@ -22,7 +22,13 @@ class GfycatExtractor(Extractor):
def __init__(self, match): def __init__(self, match):
Extractor.__init__(self, match) Extractor.__init__(self, match)
self.key = match.group(1).lower() self.key = match.group(1).lower()
self.formats = (self.config("format", "mp4"), "mp4", "webm", "gif")
formats = self.config("format")
if formats is None:
formats = ("mp4", "webm", "mobile", "gif")
elif isinstance(formats, str):
formats = (formats, "mp4", "webm", "mobile", "gif")
self.formats = formats
def items(self): def items(self):
metadata = self.metadata() metadata = self.metadata()
@ -30,23 +36,25 @@ class GfycatExtractor(Extractor):
if "gfyName" not in gfycat: if "gfyName" not in gfycat:
self.log.warning("Skipping '%s' (malformed)", gfycat["gfyId"]) self.log.warning("Skipping '%s' (malformed)", gfycat["gfyId"])
continue continue
url = self._select_format(gfycat) url = self._process(gfycat)
gfycat.update(metadata) gfycat.update(metadata)
gfycat["date"] = text.parse_timestamp(gfycat.get("createDate"))
yield Message.Directory, gfycat yield Message.Directory, gfycat
yield Message.Url, url, gfycat yield Message.Url, url, gfycat
def _select_format(self, gfyitem): def _process(self, gfycat):
gfycat["_fallback"] = formats = self._formats(gfycat)
gfycat["date"] = text.parse_timestamp(gfycat.get("createDate"))
return next(formats, "")
def _formats(self, gfycat):
for fmt in self.formats: for fmt in self.formats:
key = fmt + "Url" key = fmt + "Url"
if key in gfyitem: if key in gfycat:
url = gfyitem[key] url = gfycat[key]
if url.startswith("http:"): if url.startswith("http:"):
url = "https" + url[4:] url = "https" + url[4:]
gfyitem["extension"] = url.rpartition(".")[2] gfycat["extension"] = url.rpartition(".")[2]
return url yield url
gfyitem["extension"] = ""
return ""
def metadata(self): def metadata(self):
return {} return {}
@ -146,8 +154,7 @@ class GfycatImageExtractor(GfycatExtractor):
if "gfyName" not in gfycat: if "gfyName" not in gfycat:
self.log.warning("Skipping '%s' (malformed)", gfycat["gfyId"]) self.log.warning("Skipping '%s' (malformed)", gfycat["gfyId"])
return return
url = self._select_format(gfycat) url = self._process(gfycat)
gfycat["date"] = text.parse_timestamp(gfycat.get("createDate"))
yield Message.Directory, gfycat yield Message.Directory, gfycat
yield Message.Url, url, gfycat yield Message.Url, url, gfycat

Loading…
Cancel
Save