From 3258e71a5ffcd389f2d764d65052298b73b09099 Mon Sep 17 00:00:00 2001 From: jxxghp Date: Mon, 7 Aug 2023 10:56:57 +0800 Subject: [PATCH] fix --- app/modules/emby/emby.py | 45 ++++++----------------- app/modules/jellyfin/jellyfin.py | 49 ++++++------------------- app/plugins/bestfilmversion/__init__.py | 38 +++++++++++++------ app/plugins/mediasyncdel/__init__.py | 18 ++++----- 4 files changed, 58 insertions(+), 92 deletions(-) diff --git a/app/modules/emby/emby.py b/app/modules/emby/emby.py index 3eee6ef1..ed693125 100644 --- a/app/modules/emby/emby.py +++ b/app/modules/emby/emby.py @@ -3,6 +3,8 @@ import re from pathlib import Path from typing import List, Optional, Union, Dict, Generator +from requests import Response + from app.core.config import settings from app.log import logger from app.schemas import RefreshMediaItem, WebhookEventInfo @@ -598,41 +600,16 @@ class Emby(metaclass=Singleton): return eventItem - def get_log(self): + def get_data(self, url: str) -> Optional[Response]: """ - 获取日志 + 自定义URL从媒体服务器获取数据,其中{HOST}、{APIKEY}、{USER}会被替换成实际的值 + :param url: 请求地址 """ - if not self._host or not self._apikey: - return "" - # emby 日志url - log_url = "%sSystem/Logs/embyserver.txt?api_key=%s" % (self._host, self._apikey) - log_res = RequestUtils().get_res(url=log_url) - - if not log_res or log_res.status_code != 200: - return "" - return log_res.text - - def get_fav_items(self, user: str = None) -> list: - """ - 获取已收藏媒体列表 - """ - # 根据加入日期 降序排序 - url = f"{self._host}emby/Users/{user or self._user}/Items?SortBy=DateCreated%2CSortName" \ - f"&SortOrder=Descending" \ - f"&Filters=IsFavorite" \ - f"&Recursive=true" \ - f"&Fields=PrimaryImageAspectRatio%2CBasicSyncInfo" \ - f"&CollapseBoxSetItems=false" \ - f"&ExcludeLocationTypes=Virtual" \ - f"&EnableTotalRecordCount=false" \ - f"&Limit=20&api_key={self._apikey}" + url = url.replace("{HOST}", self._host)\ + .replace("{APIKEY}", self._apikey)\ + .replace("{USER}", self._user) try: - resp = RequestUtils().get_res(url=url) - if resp: - return resp.json().get("Items") - else: - logger.error(f"User/Items 未获取到返回数据") - return [] + return RequestUtils().get_res(url=url) except Exception as e: - logger.error(f"连接User/Items 出错:" + str(e)) - return [] + logger.error(f"连接Emby出错:" + str(e)) + return None diff --git a/app/modules/jellyfin/jellyfin.py b/app/modules/jellyfin/jellyfin.py index 9e40bdae..035868c9 100644 --- a/app/modules/jellyfin/jellyfin.py +++ b/app/modules/jellyfin/jellyfin.py @@ -1,8 +1,9 @@ -import datetime import json import re from typing import List, Union, Optional, Dict, Generator +from requests import Response + from app.core.config import settings from app.log import logger from app.schemas import MediaType, WebhookEventInfo @@ -439,44 +440,16 @@ class Jellyfin(metaclass=Singleton): logger.error(f"连接Users/Items出错:" + str(e)) yield {} - def get_log(self): + def get_data(self, url: str) -> Optional[Response]: """ - 获取日志 + 自定义URL从媒体服务器获取数据,其中{HOST}、{APIKEY}、{USER}会被替换成实际的值 + :param url: 请求地址 """ - if not self._host or not self._apikey: - return "" - # 日志url - log_url = "%sSystem/Logs/Log?name=log_%s.log&api_key=%s" % ( - self._host, datetime.date.today().strftime("%Y%m%d"), self._apikey) - log_res = RequestUtils().get_res(url=log_url) - - if not log_res or log_res.status_code != 200: - return "" - else: - return log_res.text - - def get_fav_items(self, user: str = None) -> list: - """ - 获取已收藏媒体列表 - """ - # 根据加入日期 降序排序 - url = f"{self._host}Users/{user or self._user}/Items?SortBy=DateCreated%2CSortName" \ - f"&SortOrder=Descending" \ - f"&Filters=IsFavorite" \ - f"&Recursive=true" \ - f"&Fields=PrimaryImageAspectRatio%2CBasicSyncInfo" \ - f"&CollapseBoxSetItems=false" \ - f"&ExcludeLocationTypes=Virtual" \ - f"&EnableTotalRecordCount=false" \ - f"&Limit=20" \ - f"&apikey={self._apikey}" + url = url.replace("{HOST}", self._host)\ + .replace("{APIKEY}", self._apikey)\ + .replace("{USER}", self._user) try: - resp = RequestUtils().get_res(url=url) - if resp: - return resp.json().get("Items") - else: - logger.error(f"User/Items 未获取到返回数据") - return [] + return RequestUtils().get_res(url=url) except Exception as e: - logger.error(f"连接User/Items 出错:" + str(e)) - return [] + logger.error(f"连接Jellyfin出错:" + str(e)) + return None diff --git a/app/plugins/bestfilmversion/__init__.py b/app/plugins/bestfilmversion/__init__.py index ea80a928..8990dd22 100644 --- a/app/plugins/bestfilmversion/__init__.py +++ b/app/plugins/bestfilmversion/__init__.py @@ -1,10 +1,10 @@ import datetime from pathlib import Path -from threading import Lock from typing import Optional, Any, List, Dict, Tuple from apscheduler.schedulers.background import BackgroundScheduler from apscheduler.triggers.cron import CronTrigger +from requests import Response from app.chain.subscribe import SubscribeChain from app.core.config import settings @@ -14,9 +14,6 @@ from app.modules.emby import Emby from app.modules.jellyfin import Jellyfin from app.plugins import _PluginBase from app.schemas.types import MediaType -from app.utils.http import RequestUtils - -lock = Lock() class BestFilmVersion(_PluginBase): @@ -305,9 +302,30 @@ class BestFilmVersion(_PluginBase): # 读取收藏 if settings.MEDIASERVER == 'jellyfin': - resp = Jellyfin().get_fav_items() + # 根据加入日期 降序排序 + url = "{HOST}Users/{USER}/Items?SortBy=DateCreated%2CSortName" \ + "&SortOrder=Descending" \ + "&Filters=IsFavorite" \ + "&Recursive=true" \ + "&Fields=PrimaryImageAspectRatio%2CBasicSyncInfo" \ + "&CollapseBoxSetItems=false" \ + "&ExcludeLocationTypes=Virtual" \ + "&EnableTotalRecordCount=false" \ + "&Limit=20" \ + "&apikey={APIKEY}" + resp = self.get_items(Jellyfin().get_data(url)) elif settings.MEDIASERVER == 'emby': - resp = Emby().get_fav_items() + # 根据加入日期 降序排序 + url = "{HOST}emby/Users/{USER}/Items?SortBy=DateCreated%2CSortName" \ + "&SortOrder=Descending" \ + "&Filters=IsFavorite" \ + "&Recursive=true" \ + "&Fields=PrimaryImageAspectRatio%2CBasicSyncInfo" \ + "&CollapseBoxSetItems=false" \ + "&ExcludeLocationTypes=Virtual" \ + "&EnableTotalRecordCount=false" \ + "&Limit=20&api_key={APIKEY}" + resp = self.get_items(Emby().get_data(url)) else: # TODO plex待开发 return @@ -374,14 +392,12 @@ class BestFilmVersion(_PluginBase): self._cache_path.write_text("\n".join(caches)) @staticmethod - def media_simple_filter(url): + def get_items(resp: Response): try: - resp = RequestUtils().get_res(url=url) if resp: - return resp.json().get("Items") + return resp.json().get("Items") or [] else: - logger.error(f"User/Items 未获取到返回数据") return [] except Exception as e: - logger.error(f"连接User/Items 出错:" + str(e)) + print(str(e)) return [] diff --git a/app/plugins/mediasyncdel/__init__.py b/app/plugins/mediasyncdel/__init__.py index 40552aca..bda983ae 100644 --- a/app/plugins/mediasyncdel/__init__.py +++ b/app/plugins/mediasyncdel/__init__.py @@ -470,15 +470,15 @@ class MediaSyncDel(_PluginBase): @staticmethod def parse_emby_log(last_time): - # emby - log_text = Emby().get_log() - if not log_text: + log_url = "{HOST}System/Logs/embyserver.txt?api_key={APIKEY}" + log_res = Emby().get_data(log_url) + if not log_res or log_res.status_code != 200: logger.error("获取emby日志失败,请检查服务器配置") return [] # 正则解析删除的媒体信息 pattern = r'(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}.\d{3}) Info App: Removing item from database, Type: (\w+), Name: (.*), Path: (.*), Id: (\d+)' - matches = re.findall(pattern, log_text) + matches = re.findall(pattern, log_res.text) del_medias = [] # 循环获取媒体信息 @@ -542,16 +542,16 @@ class MediaSyncDel(_PluginBase): @staticmethod def parse_jellyfin_log(last_time): - # jellyfin - log_text = Jellyfin().get_log() - - if not log_text: + # 根据加入日期 降序排序 + log_url = "{HOST}System/Logs/Log?name=log_%s.log&api_key={APIKEY}" % datetime.date.today().strftime("%Y%m%d") + log_res = Jellyfin().get_data(log_url) + if not log_res or log_res.status_code != 200: logger.error("获取jellyfin日志失败,请检查服务器配置") return [] # 正则解析删除的媒体信息 pattern = r'\[(.*?)\].*?Removing item, Type: "(.*?)", Name: "(.*?)", Path: "(.*?)"' - matches = re.findall(pattern, log_text) + matches = re.findall(pattern, log_res.text) del_medias = [] # 循环获取媒体信息