[redgifs:search] support '/search?query=...' URLs (#7118)
This commit is contained in:
@@ -163,24 +163,27 @@ class RedgifsSearchExtractor(RedgifsExtractor):
|
||||
subcategory = "search"
|
||||
directory_fmt = ("{category}", "Search", "{search}")
|
||||
pattern = (r"(?:https?://)?(?:\w+\.)?redgifs\.com"
|
||||
r"/(?:gifs/([^/?#]+)|browse)(?:/?\?([^#]+))?")
|
||||
r"/(?:gifs/([^/?#]+)|search(?:/gifs)?()|browse)"
|
||||
r"(?:/?\?([^#]+))?")
|
||||
example = "https://www.redgifs.com/gifs/TAG"
|
||||
|
||||
def __init__(self, match):
|
||||
RedgifsExtractor.__init__(self, match)
|
||||
self.search, self.query = match.groups()
|
||||
|
||||
def metadata(self):
|
||||
self.params = text.parse_query(self.query)
|
||||
if self.search:
|
||||
self.params["tags"] = text.unquote(self.search)
|
||||
tag, self.search, query = self.groups
|
||||
|
||||
return {"search": (self.params.get("tags") or
|
||||
self.params.get("order") or
|
||||
self.params = params = text.parse_query(query)
|
||||
if tag is not None:
|
||||
params["tags"] = text.unquote(tag)
|
||||
|
||||
return {"search": (params.get("query") or
|
||||
params.get("tags") or
|
||||
params.get("order") or
|
||||
"trending")}
|
||||
|
||||
def gifs(self):
|
||||
return self.api.search(self.params)
|
||||
if self.search is None:
|
||||
return self.api.gifs_search(self.params)
|
||||
else:
|
||||
return self.api.search_gifs(self.params)
|
||||
|
||||
|
||||
class RedgifsImageExtractor(RedgifsExtractor):
|
||||
@@ -205,9 +208,9 @@ class RedgifsAPI():
|
||||
def __init__(self, extractor):
|
||||
self.extractor = extractor
|
||||
self.headers = {
|
||||
"authorization" : None,
|
||||
"content-type" : "application/json",
|
||||
"x-customheader": extractor.root + "/",
|
||||
"Accept" : "application/json, text/plain, */*",
|
||||
"Referer" : extractor.root + "/",
|
||||
"Authorization" : None,
|
||||
"Origin" : extractor.root,
|
||||
}
|
||||
|
||||
@@ -242,14 +245,18 @@ class RedgifsAPI():
|
||||
params = {"count": 30, "order": order}
|
||||
return self._pagination(endpoint, params)
|
||||
|
||||
def search(self, params):
|
||||
def gifs_search(self, params):
|
||||
endpoint = "/v2/gifs/search"
|
||||
params["search_text"] = params.pop("tags", None)
|
||||
return self._pagination(endpoint, params)
|
||||
|
||||
def search_gifs(self, params):
|
||||
endpoint = "/v2/search/gifs"
|
||||
return self._pagination(endpoint, params)
|
||||
|
||||
def _call(self, endpoint, params=None):
|
||||
url = self.API_ROOT + endpoint
|
||||
self.headers["authorization"] = self._auth()
|
||||
self.headers["Authorization"] = self._auth()
|
||||
return self.extractor.request(
|
||||
url, params=params, headers=self.headers).json()
|
||||
|
||||
@@ -270,6 +277,6 @@ class RedgifsAPI():
|
||||
def _auth(self):
|
||||
# https://github.com/Redgifs/api/wiki/Temporary-tokens
|
||||
url = self.API_ROOT + "/v2/auth/temporary"
|
||||
self.headers["authorization"] = None
|
||||
self.headers["Authorization"] = None
|
||||
return "Bearer " + self.extractor.request(
|
||||
url, headers=self.headers).json()["token"]
|
||||
|
||||
@@ -93,6 +93,20 @@ __tests__ = (
|
||||
"#count" : 10,
|
||||
},
|
||||
|
||||
{
|
||||
"#url" : "https://www.redgifs.com/search/gifs?query=jav+model&order=top",
|
||||
"#category": ("", "redgifs", "search"),
|
||||
"#class" : redgifs.RedgifsSearchExtractor,
|
||||
"#pattern" : r"https://\w+\.redgifs\.com/[A-Za-z-]+\.(mp4|jpg)",
|
||||
"#range" : "1-10",
|
||||
"#count" : 10,
|
||||
},
|
||||
|
||||
{
|
||||
"#url" : "https://www.redgifs.com/search?query=Skinny+Lesbian",
|
||||
"#class" : redgifs.RedgifsSearchExtractor,
|
||||
},
|
||||
|
||||
{
|
||||
"#url" : "https://www.redgifs.com/browse?tags=JAV",
|
||||
"#category": ("", "redgifs", "search"),
|
||||
|
||||
Reference in New Issue
Block a user