diff options
Diffstat (limited to 'gallery_dl/extractor/redgifs.py')
| -rw-r--r-- | gallery_dl/extractor/redgifs.py | 76 |
1 files changed, 16 insertions, 60 deletions
diff --git a/gallery_dl/extractor/redgifs.py b/gallery_dl/extractor/redgifs.py index dcbbc0d..4477825 100644 --- a/gallery_dl/extractor/redgifs.py +++ b/gallery_dl/extractor/redgifs.py @@ -8,8 +8,8 @@ """Extractors for https://redgifs.com/""" -from .gfycat import GfycatExtractor -from ..cache import cache +from .gfycat import GfycatExtractor, GfycatAPI +from .. import text class RedgifsExtractor(GfycatExtractor): @@ -44,7 +44,7 @@ class RedgifsSearchExtractor(RedgifsExtractor): }) def metadata(self): - self.key = self.key.replace("-", " ") + self.key = text.unquote(self.key).replace("-", " ") return {"search": self.key} def gfycats(self): @@ -54,65 +54,21 @@ class RedgifsSearchExtractor(RedgifsExtractor): class RedgifsImageExtractor(RedgifsExtractor): """Extractor for individual gifs from redgifs.com""" subcategory = "image" - pattern = r"(?:https?://)?(?:www\.)?redgifs\.com/watch/([A-Za-z]+)" - test = ("https://redgifs.com/watch/foolishforkedabyssiniancat", { - "pattern": r"https://\w+.redgifs.com/FoolishForkedAbyssiniancat.mp4", - "content": "f6e03f1df9a2ff2a74092f53ee7580d2fb943533", - }) + pattern = (r"(?:https?://)?(?:www\.)?(?:redgifs\.com/watch" + r"|gifdeliverynetwork.com)/([A-Za-z]+)") + test = ( + ("https://redgifs.com/watch/foolishforkedabyssiniancat", { + "pattern": r"https://\w+.redgifs.com/FoolishForkedAbyss.+.mp4", + "content": "f6e03f1df9a2ff2a74092f53ee7580d2fb943533", + }), + ("https://www.gifdeliverynetwork.com/foolishforkedabyssiniancat"), + ) def gfycats(self): return (RedgifsAPI(self).gfycat(self.key),) -class RedgifsAPI(): - - def __init__(self, extractor): - self.extractor = extractor - self.headers = {} - - def gfycat(self, gfycat_id): - endpoint = "v1/gfycats/" + gfycat_id - return self._call(endpoint)["gfyItem"] - - def user(self, user): - endpoint = "v1/users/{}/gfycats".format(user.lower()) - params = {"count": 100} - return self._pagination(endpoint, params) - - def search(self, query): - endpoint = "v1/gfycats/search" - params = {"search_text": query, "count": 150} - return self._pagination(endpoint, params) - - @cache(maxage=3600) - def _authenticate_impl(self): - url = "https://weblogin.redgifs.com/oauth/webtoken" - headers = { - "Referer": "https://www.redgifs.com/", - "Origin" : "https://www.redgifs.com", - } - data = { - "access_key": "dBLwVuGn9eq4dtXLs8WSfpjcYFY7bPQe" - "AqGPSFgqeW5B9uzj2cMVhF63pTFF4Rg9", - } - - response = self.extractor.request( - url, method="POST", headers=headers, json=data) - return "Bearer " + response.json()["access_token"] - - def _call(self, endpoint, params=None): - self.headers["Authorization"] = self._authenticate_impl() - url = "https://napi.redgifs.com/" + endpoint - return self.extractor.request( - url, params=params, headers=self.headers).json() - - def _pagination(self, endpoint, params): - while True: - data = self._call(endpoint, params) - gfycats = data["gfycats"] - yield from gfycats - - if "found" not in data and len(gfycats) < params["count"] or \ - not data["gfycats"]: - return - params["cursor"] = data["cursor"] +class RedgifsAPI(GfycatAPI): + API_ROOT = "https://napi.redgifs.com/" + ACCESS_KEY = ("dBLwVuGn9eq4dtXLs8WSfpjcYFY7bPQe" + "AqGPSFgqeW5B9uzj2cMVhF63pTFF4Rg9") |
