feat:Plex 添加公共请求方法
This commit is contained in:
@ -6,6 +6,7 @@ from urllib.parse import quote_plus
|
|||||||
from cachetools import TTLCache, cached
|
from cachetools import TTLCache, cached
|
||||||
from plexapi import media
|
from plexapi import media
|
||||||
from plexapi.server import PlexServer
|
from plexapi.server import PlexServer
|
||||||
|
from requests import Response, Session
|
||||||
|
|
||||||
from app import schemas
|
from app import schemas
|
||||||
from app.core.config import settings
|
from app.core.config import settings
|
||||||
@ -16,6 +17,7 @@ from app.utils.http import RequestUtils
|
|||||||
|
|
||||||
class Plex:
|
class Plex:
|
||||||
_plex = None
|
_plex = None
|
||||||
|
_session = None
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self._host = settings.PLEX_HOST
|
self._host = settings.PLEX_HOST
|
||||||
@ -32,6 +34,7 @@ class Plex:
|
|||||||
except Exception as e:
|
except Exception as e:
|
||||||
self._plex = None
|
self._plex = None
|
||||||
logger.error(f"Plex服务器连接失败:{str(e)}")
|
logger.error(f"Plex服务器连接失败:{str(e)}")
|
||||||
|
self._session = self.__adapt_plex_session()
|
||||||
|
|
||||||
def is_inactive(self) -> bool:
|
def is_inactive(self) -> bool:
|
||||||
"""
|
"""
|
||||||
@ -722,3 +725,71 @@ class Plex:
|
|||||||
))
|
))
|
||||||
offset += num
|
offset += num
|
||||||
return ret_resume[:num]
|
return ret_resume[:num]
|
||||||
|
|
||||||
|
def get_data(self, endpoint: str, **kwargs) -> Optional[Response]:
|
||||||
|
"""
|
||||||
|
自定义从媒体服务器获取数据
|
||||||
|
:param endpoint: 端点
|
||||||
|
:param kwargs: 其他请求参数,如headers, cookies, proxies等
|
||||||
|
"""
|
||||||
|
return self.__request(method="get", endpoint=endpoint, **kwargs)
|
||||||
|
|
||||||
|
def post_data(self, endpoint: str, **kwargs) -> Optional[Response]:
|
||||||
|
"""
|
||||||
|
自定义从媒体服务器获取数据
|
||||||
|
:param endpoint: 端点
|
||||||
|
:param kwargs: 其他请求参数,如headers, cookies, proxies等
|
||||||
|
"""
|
||||||
|
return self.__request(method="post", endpoint=endpoint, **kwargs)
|
||||||
|
|
||||||
|
def put_data(self, endpoint: str, **kwargs) -> Optional[Response]:
|
||||||
|
"""
|
||||||
|
自定义从媒体服务器获取数据
|
||||||
|
:param endpoint: 端点
|
||||||
|
:param kwargs: 其他请求参数,如headers, cookies, proxies等
|
||||||
|
"""
|
||||||
|
return self.__request(method="put", endpoint=endpoint, **kwargs)
|
||||||
|
|
||||||
|
def __request(self, method: str, endpoint: str, **kwargs) -> Optional[Response]:
|
||||||
|
"""
|
||||||
|
自定义从媒体服务器获取数据
|
||||||
|
:param method: HTTP方法,如 get, post, put 等
|
||||||
|
:param endpoint: 端点
|
||||||
|
:param kwargs: 其他请求参数,如headers, cookies, proxies等
|
||||||
|
"""
|
||||||
|
if not self._session:
|
||||||
|
return
|
||||||
|
try:
|
||||||
|
url = RequestUtils.adapt_request_url(host=self._host, endpoint=endpoint)
|
||||||
|
kwargs.setdefault("headers", self.__get_request_headers())
|
||||||
|
kwargs.setdefault("raise_exception", True)
|
||||||
|
request_method = getattr(RequestUtils(session=self._session), f"{method}_res", None)
|
||||||
|
if request_method:
|
||||||
|
return request_method(url=url, **kwargs)
|
||||||
|
else:
|
||||||
|
logger.error(f"方法 {method} 不存在")
|
||||||
|
return None
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(f"连接Plex出错:" + str(e))
|
||||||
|
return None
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def __get_request_headers() -> dict:
|
||||||
|
"""获取请求头"""
|
||||||
|
return {
|
||||||
|
"X-Plex-Token": settings.PLEX_TOKEN,
|
||||||
|
"Accept": "application/json",
|
||||||
|
"Content-Type": "application/json"
|
||||||
|
}
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def __adapt_plex_session() -> Session:
|
||||||
|
"""
|
||||||
|
创建并配置一个针对Plex服务的requests.Session实例
|
||||||
|
这个会话包括特定的头部信息,用于处理所有的Plex请求
|
||||||
|
"""
|
||||||
|
# 设置请求头部,通常包括验证令牌和接受/内容类型头部
|
||||||
|
headers = Plex.__get_request_headers()
|
||||||
|
session = Session()
|
||||||
|
session.headers = headers
|
||||||
|
return session
|
||||||
|
Reference in New Issue
Block a user