feat:Plex 添加公共请求方法

This commit is contained in:
InfinityPacer
2024-06-19 15:53:55 +08:00
parent cb0bb8a38e
commit da6ba3fa8b

View File

@ -6,6 +6,7 @@ from urllib.parse import quote_plus
from cachetools import TTLCache, cached
from plexapi import media
from plexapi.server import PlexServer
from requests import Response, Session
from app import schemas
from app.core.config import settings
@ -16,6 +17,7 @@ from app.utils.http import RequestUtils
class Plex:
_plex = None
_session = None
def __init__(self):
self._host = settings.PLEX_HOST
@ -32,6 +34,7 @@ class Plex:
except Exception as e:
self._plex = None
logger.error(f"Plex服务器连接失败{str(e)}")
self._session = self.__adapt_plex_session()
def is_inactive(self) -> bool:
"""
@ -722,3 +725,71 @@ class Plex:
))
offset += 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