[redgifs][gfycat] provide fallback URLs (fixes #1962)
and extend the 'format' option
This commit is contained in:
@@ -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 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.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
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user