mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-04-26 03:32:54 +08:00
fix async
This commit is contained in:
@@ -1,10 +1,12 @@
|
||||
from datetime import datetime
|
||||
from typing import Optional
|
||||
|
||||
import httpx
|
||||
import requests
|
||||
|
||||
from app.core.cache import cached
|
||||
from app.core.config import settings
|
||||
from app.utils.asyncio import AsyncUtils
|
||||
from app.utils.http import RequestUtils, AsyncRequestUtils
|
||||
|
||||
|
||||
@@ -29,7 +31,8 @@ class BangumiApi(object):
|
||||
def __init__(self):
|
||||
self._session = requests.Session()
|
||||
self._req = RequestUtils(session=self._session)
|
||||
self._async_req = AsyncRequestUtils()
|
||||
self._client = httpx.AsyncClient()
|
||||
self._async_req = AsyncRequestUtils(client=self._client)
|
||||
|
||||
@cached(maxsize=settings.CONF.bangumi, ttl=settings.CONF.meta)
|
||||
def __invoke(self, url, key: Optional[str] = None, **kwargs):
|
||||
@@ -303,3 +306,5 @@ class BangumiApi(object):
|
||||
def close(self):
|
||||
if self._session:
|
||||
self._session.close()
|
||||
if self._client:
|
||||
AsyncUtils.run_async(self._client.aclose())
|
||||
|
||||
@@ -12,6 +12,7 @@ import requests
|
||||
|
||||
from app.core.cache import cached
|
||||
from app.core.config import settings
|
||||
from app.utils.asyncio import AsyncUtils
|
||||
from app.utils.http import RequestUtils, AsyncRequestUtils
|
||||
from app.utils.singleton import WeakSingleton
|
||||
|
||||
@@ -155,7 +156,7 @@ class DoubanApi(metaclass=WeakSingleton):
|
||||
|
||||
def __init__(self):
|
||||
self._session = requests.Session()
|
||||
self._async_req = AsyncRequestUtils()
|
||||
self._client = httpx.AsyncClient()
|
||||
|
||||
@classmethod
|
||||
def __sign(cls, url: str, ts: str, method='GET') -> str:
|
||||
@@ -249,7 +250,10 @@ class DoubanApi(metaclass=WeakSingleton):
|
||||
GET请求(异步版本)
|
||||
"""
|
||||
req_url, params = self._prepare_get_request(url, **kwargs)
|
||||
resp = await self._async_req.get_res(url=req_url, params=params)
|
||||
resp = await AsyncRequestUtils(
|
||||
ua=choice(self._user_agents),
|
||||
client=self._client
|
||||
).get_res(url=req_url, params=params)
|
||||
return self._handle_response(resp)
|
||||
|
||||
def _prepare_post_request(self, url: str, **kwargs) -> tuple[str, dict]:
|
||||
@@ -292,7 +296,10 @@ class DoubanApi(metaclass=WeakSingleton):
|
||||
POST请求(异步版本)
|
||||
"""
|
||||
req_url, params = self._prepare_post_request(url, **kwargs)
|
||||
resp = await self._async_req.post_res(url=req_url, data=params)
|
||||
resp = await AsyncRequestUtils(
|
||||
ua=settings.NORMAL_USER_AGENT,
|
||||
client=self._client
|
||||
).post_res(url=req_url, data=params)
|
||||
return self._handle_response(resp)
|
||||
|
||||
def imdbid(self, imdbid: str,
|
||||
@@ -869,3 +876,5 @@ class DoubanApi(metaclass=WeakSingleton):
|
||||
def close(self):
|
||||
if self._session:
|
||||
self._session.close()
|
||||
if self._client:
|
||||
AsyncUtils.run_async(self._client.aclose())
|
||||
|
||||
@@ -352,7 +352,11 @@ class SiteParserBase(metaclass=ABCMeta):
|
||||
headers=req_headers).get_res(url=url)
|
||||
if res is not None and res.status_code in (200, 500, 403):
|
||||
if req_headers and "application/json" in str(req_headers.get("Accept")):
|
||||
return json.dumps(res.json())
|
||||
try:
|
||||
return json.dumps(res.json())
|
||||
except (json.JSONDecodeError, ValueError) as e:
|
||||
logger.error(f"{self._site_name} API响应JSON解析失败: {e}")
|
||||
return ""
|
||||
else:
|
||||
# 如果cloudflare 有防护,尝试使用浏览器仿真
|
||||
if under_challenge(res.text):
|
||||
|
||||
@@ -5,11 +5,13 @@ import logging
|
||||
import time
|
||||
from datetime import datetime
|
||||
|
||||
import httpx
|
||||
import requests
|
||||
import requests.exceptions
|
||||
|
||||
from app.core.cache import cached
|
||||
from app.core.config import settings
|
||||
from app.utils.asyncio import AsyncUtils
|
||||
from app.utils.http import RequestUtils, AsyncRequestUtils
|
||||
from .exceptions import TMDbException
|
||||
|
||||
@@ -17,14 +19,13 @@ logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class TMDb(object):
|
||||
_req = None
|
||||
_async_req = None
|
||||
_session = None
|
||||
|
||||
def __init__(self, obj_cached=True, session=None, language=None):
|
||||
def __init__(self, obj_cached=True, session=None, client=None, language=None):
|
||||
self._api_key = settings.TMDB_API_KEY
|
||||
self._language = language or settings.TMDB_LOCALE or "en-US"
|
||||
self._session_id = None
|
||||
self._session = session
|
||||
self._client = client
|
||||
self._wait_on_rate_limit = True
|
||||
self._debug_enabled = False
|
||||
self._cache_enabled = obj_cached
|
||||
@@ -34,13 +35,14 @@ class TMDb(object):
|
||||
self._total_results = None
|
||||
self._total_pages = None
|
||||
|
||||
if session is not None:
|
||||
self._req = RequestUtils(session=session, proxies=self.proxies)
|
||||
else:
|
||||
if not self._session:
|
||||
self._session = requests.Session()
|
||||
self._req = RequestUtils(session=self._session, proxies=self.proxies)
|
||||
# 初始化异步请求客户端
|
||||
self._async_req = AsyncRequestUtils(proxies=self.proxies)
|
||||
self._req = RequestUtils(session=self._session, proxies=self.proxies)
|
||||
|
||||
if not self._client:
|
||||
self._client = httpx.AsyncClient()
|
||||
self._async_req = AsyncRequestUtils(client=self._client, proxies=self.proxies)
|
||||
|
||||
self._remaining = 40
|
||||
self._reset = None
|
||||
self._timeout = 15
|
||||
@@ -277,3 +279,5 @@ class TMDb(object):
|
||||
def close(self):
|
||||
if self._session:
|
||||
self._session.close()
|
||||
if self._client:
|
||||
AsyncUtils.run_async(self._client.aclose())
|
||||
|
||||
Reference in New Issue
Block a user