This commit is contained in:
jxxghp 2023-10-05 07:44:21 +08:00
parent d995932a1c
commit 1a49c7c59e
3 changed files with 34 additions and 11 deletions

View File

@ -155,8 +155,13 @@ class DoubanApi(metaclass=Singleton):
def __sign(cls, url: str, ts: int, method='GET') -> str: def __sign(cls, url: str, ts: int, method='GET') -> str:
url_path = parse.urlparse(url).path url_path = parse.urlparse(url).path
raw_sign = '&'.join([method.upper(), parse.quote(url_path, safe=''), str(ts)]) raw_sign = '&'.join([method.upper(), parse.quote(url_path, safe=''), str(ts)])
return base64.b64encode(hmac.new(cls._api_secret_key.encode(), raw_sign.encode(), hashlib.sha1).digest() return base64.b64encode(
).decode() hmac.new(
cls._api_secret_key.encode(),
raw_sign.encode(),
hashlib.sha1
).digest()
).decode()
@classmethod @classmethod
@lru_cache(maxsize=settings.CACHE_CONF.get('douban')) @lru_cache(maxsize=settings.CACHE_CONF.get('douban'))

View File

@ -8,6 +8,7 @@ from functools import lru_cache
import requests import requests
import requests.exceptions import requests.exceptions
from app.utils.http import RequestUtils
from .exceptions import TMDbException from .exceptions import TMDbException
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@ -24,7 +25,13 @@ class TMDb(object):
TMDB_DOMAIN = "TMDB_DOMAIN" TMDB_DOMAIN = "TMDB_DOMAIN"
REQUEST_CACHE_MAXSIZE = None REQUEST_CACHE_MAXSIZE = None
def __init__(self, obj_cached=True): _req = None
def __init__(self, obj_cached=True, session=None):
if session is not None:
self._req = RequestUtils(session=session, proxies=self.proxies)
else:
self._req = RequestUtils(session=requests.Session(), proxies=self.proxies)
self._remaining = 40 self._remaining = 40
self._reset = None self._reset = None
self._timeout = 15 self._timeout = 15
@ -129,9 +136,13 @@ class TMDb(object):
@lru_cache(maxsize=REQUEST_CACHE_MAXSIZE) @lru_cache(maxsize=REQUEST_CACHE_MAXSIZE)
def cached_request(self, method, url, data, json): def cached_request(self, method, url, data, json):
with requests.Session() as s: return self.request(method, url, data, json)
return s.request(method, url, data=data, json=json,
timeout=self._timeout, proxies=self.proxies) def request(self, method, url, data, json):
if method == "GET":
return self._req.get_res(url, params=data, json=json)
else:
return self._req.post_res(url, data=data, json=json)
def cache_clear(self): def cache_clear(self):
return self.cached_request.cache_clear() return self.cached_request.cache_clear()
@ -152,9 +163,7 @@ class TMDb(object):
if self.cache and self.obj_cached and call_cached and method != "POST": if self.cache and self.obj_cached and call_cached and method != "POST":
req = self.cached_request(method, url, data, json) req = self.cached_request(method, url, data, json)
else: else:
with requests.Session() as s: req = self.request(method, url, data, json)
req = s.request(method, url, data=data, json=json,
timeout=self._timeout, proxies=self.proxies)
headers = req.headers headers = req.headers

View File

@ -91,12 +91,19 @@ class RequestUtils:
except requests.exceptions.RequestException: except requests.exceptions.RequestException:
return None return None
def get_res(self, url: str, params: dict = None, def get_res(self, url: str,
allow_redirects: bool = True, raise_exception: bool = False) -> Optional[Response]: params: dict = None,
data: Any = None,
json: dict = None,
allow_redirects: bool = True,
raise_exception: bool = False
) -> Optional[Response]:
try: try:
if self._session: if self._session:
return self._session.get(url, return self._session.get(url,
params=params, params=params,
data=data,
json=json,
verify=False, verify=False,
headers=self._headers, headers=self._headers,
proxies=self._proxies, proxies=self._proxies,
@ -106,6 +113,8 @@ class RequestUtils:
else: else:
return requests.get(url, return requests.get(url,
params=params, params=params,
data=data,
json=json,
verify=False, verify=False,
headers=self._headers, headers=self._headers,
proxies=self._proxies, proxies=self._proxies,