[redgifs] fix 'token' extraction (#3080, #3081)

This commit is contained in:
Mike Fährmann
2022-10-21 13:24:13 +02:00
parent 062ef238a6
commit 04d3ebdfb4

View File

@@ -10,7 +10,7 @@
from .common import Extractor, Message from .common import Extractor, Message
from .. import text from .. import text
from ..cache import cache from ..cache import memcache
class RedgifsExtractor(Extractor): class RedgifsExtractor(Extractor):
@@ -133,10 +133,11 @@ class RedgifsAPI():
def __init__(self, extractor): def __init__(self, extractor):
self.extractor = extractor self.extractor = extractor
self.headers = { self.headers = {
"Referer" : extractor.root + "/", "Referer" : extractor.root + "/",
"authorization": "Bearer " + self._fetch_bearer_token(extractor), "authorization" : None,
"content-type" : "application/json", "content-type" : "application/json",
"Origin" : extractor.root, "x-customheader": extractor.root + "/",
"Origin" : extractor.root,
} }
def gif(self, gif_id): def gif(self, gif_id):
@@ -156,6 +157,7 @@ class RedgifsAPI():
def _call(self, endpoint, params=None): def _call(self, endpoint, params=None):
url = self.API_ROOT + endpoint url = self.API_ROOT + endpoint
self.headers["authorization"] = self._auth()
return self.extractor.request( return self.extractor.request(
url, params=params, headers=self.headers).json() url, params=params, headers=self.headers).json()
@@ -170,16 +172,10 @@ class RedgifsAPI():
return return
params["page"] += 1 params["page"] += 1
@cache(maxage=3600) @memcache(maxage=600)
def _fetch_bearer_token(self, extr): def _auth(self):
extr.log.debug("Retrieving Bearer token") # https://github.com/Redgifs/api/wiki/Temporary-tokens
url = self.API_ROOT + "/v2/auth/temporary"
page = extr.request(extr.root + "/").text self.headers["authorization"] = None
index = text.extract(page, "/assets/js/index", ".js")[0] return "Bearer " + self.extractor.request(
url, headers=self.headers).json()["token"]
url = extr.root + "/assets/js/index" + index + ".js"
page = extr.request(url, encoding="utf-8").text
token = "ey" + text.extract(page, '="ey', '"')[0]
extr.log.debug("Token: '%s'", token)
return token