fix
This commit is contained in:
parent
e58d45923a
commit
3258e71a5f
@ -3,6 +3,8 @@ import re
|
|||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import List, Optional, Union, Dict, Generator
|
from typing import List, Optional, Union, Dict, Generator
|
||||||
|
|
||||||
|
from requests import Response
|
||||||
|
|
||||||
from app.core.config import settings
|
from app.core.config import settings
|
||||||
from app.log import logger
|
from app.log import logger
|
||||||
from app.schemas import RefreshMediaItem, WebhookEventInfo
|
from app.schemas import RefreshMediaItem, WebhookEventInfo
|
||||||
@ -598,41 +600,16 @@ class Emby(metaclass=Singleton):
|
|||||||
|
|
||||||
return eventItem
|
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:
|
url = url.replace("{HOST}", self._host)\
|
||||||
return ""
|
.replace("{APIKEY}", self._apikey)\
|
||||||
# emby 日志url
|
.replace("{USER}", self._user)
|
||||||
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}"
|
|
||||||
try:
|
try:
|
||||||
resp = RequestUtils().get_res(url=url)
|
return RequestUtils().get_res(url=url)
|
||||||
if resp:
|
|
||||||
return resp.json().get("Items")
|
|
||||||
else:
|
|
||||||
logger.error(f"User/Items 未获取到返回数据")
|
|
||||||
return []
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(f"连接User/Items 出错:" + str(e))
|
logger.error(f"连接Emby出错:" + str(e))
|
||||||
return []
|
return None
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
import datetime
|
|
||||||
import json
|
import json
|
||||||
import re
|
import re
|
||||||
from typing import List, Union, Optional, Dict, Generator
|
from typing import List, Union, Optional, Dict, Generator
|
||||||
|
|
||||||
|
from requests import Response
|
||||||
|
|
||||||
from app.core.config import settings
|
from app.core.config import settings
|
||||||
from app.log import logger
|
from app.log import logger
|
||||||
from app.schemas import MediaType, WebhookEventInfo
|
from app.schemas import MediaType, WebhookEventInfo
|
||||||
@ -439,44 +440,16 @@ class Jellyfin(metaclass=Singleton):
|
|||||||
logger.error(f"连接Users/Items出错:" + str(e))
|
logger.error(f"连接Users/Items出错:" + str(e))
|
||||||
yield {}
|
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:
|
url = url.replace("{HOST}", self._host)\
|
||||||
return ""
|
.replace("{APIKEY}", self._apikey)\
|
||||||
# 日志url
|
.replace("{USER}", self._user)
|
||||||
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}"
|
|
||||||
try:
|
try:
|
||||||
resp = RequestUtils().get_res(url=url)
|
return RequestUtils().get_res(url=url)
|
||||||
if resp:
|
|
||||||
return resp.json().get("Items")
|
|
||||||
else:
|
|
||||||
logger.error(f"User/Items 未获取到返回数据")
|
|
||||||
return []
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(f"连接User/Items 出错:" + str(e))
|
logger.error(f"连接Jellyfin出错:" + str(e))
|
||||||
return []
|
return None
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
import datetime
|
import datetime
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from threading import Lock
|
|
||||||
from typing import Optional, Any, List, Dict, Tuple
|
from typing import Optional, Any, List, Dict, Tuple
|
||||||
|
|
||||||
from apscheduler.schedulers.background import BackgroundScheduler
|
from apscheduler.schedulers.background import BackgroundScheduler
|
||||||
from apscheduler.triggers.cron import CronTrigger
|
from apscheduler.triggers.cron import CronTrigger
|
||||||
|
from requests import Response
|
||||||
|
|
||||||
from app.chain.subscribe import SubscribeChain
|
from app.chain.subscribe import SubscribeChain
|
||||||
from app.core.config import settings
|
from app.core.config import settings
|
||||||
@ -14,9 +14,6 @@ from app.modules.emby import Emby
|
|||||||
from app.modules.jellyfin import Jellyfin
|
from app.modules.jellyfin import Jellyfin
|
||||||
from app.plugins import _PluginBase
|
from app.plugins import _PluginBase
|
||||||
from app.schemas.types import MediaType
|
from app.schemas.types import MediaType
|
||||||
from app.utils.http import RequestUtils
|
|
||||||
|
|
||||||
lock = Lock()
|
|
||||||
|
|
||||||
|
|
||||||
class BestFilmVersion(_PluginBase):
|
class BestFilmVersion(_PluginBase):
|
||||||
@ -305,9 +302,30 @@ class BestFilmVersion(_PluginBase):
|
|||||||
|
|
||||||
# 读取收藏
|
# 读取收藏
|
||||||
if settings.MEDIASERVER == 'jellyfin':
|
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':
|
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:
|
else:
|
||||||
# TODO plex待开发
|
# TODO plex待开发
|
||||||
return
|
return
|
||||||
@ -374,14 +392,12 @@ class BestFilmVersion(_PluginBase):
|
|||||||
self._cache_path.write_text("\n".join(caches))
|
self._cache_path.write_text("\n".join(caches))
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def media_simple_filter(url):
|
def get_items(resp: Response):
|
||||||
try:
|
try:
|
||||||
resp = RequestUtils().get_res(url=url)
|
|
||||||
if resp:
|
if resp:
|
||||||
return resp.json().get("Items")
|
return resp.json().get("Items") or []
|
||||||
else:
|
else:
|
||||||
logger.error(f"User/Items 未获取到返回数据")
|
|
||||||
return []
|
return []
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(f"连接User/Items 出错:" + str(e))
|
print(str(e))
|
||||||
return []
|
return []
|
||||||
|
@ -470,15 +470,15 @@ class MediaSyncDel(_PluginBase):
|
|||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def parse_emby_log(last_time):
|
def parse_emby_log(last_time):
|
||||||
# emby
|
log_url = "{HOST}System/Logs/embyserver.txt?api_key={APIKEY}"
|
||||||
log_text = Emby().get_log()
|
log_res = Emby().get_data(log_url)
|
||||||
if not log_text:
|
if not log_res or log_res.status_code != 200:
|
||||||
logger.error("获取emby日志失败,请检查服务器配置")
|
logger.error("获取emby日志失败,请检查服务器配置")
|
||||||
return []
|
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+)'
|
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 = []
|
del_medias = []
|
||||||
# 循环获取媒体信息
|
# 循环获取媒体信息
|
||||||
@ -542,16 +542,16 @@ class MediaSyncDel(_PluginBase):
|
|||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def parse_jellyfin_log(last_time):
|
def parse_jellyfin_log(last_time):
|
||||||
# jellyfin
|
# 根据加入日期 降序排序
|
||||||
log_text = Jellyfin().get_log()
|
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_text:
|
if not log_res or log_res.status_code != 200:
|
||||||
logger.error("获取jellyfin日志失败,请检查服务器配置")
|
logger.error("获取jellyfin日志失败,请检查服务器配置")
|
||||||
return []
|
return []
|
||||||
|
|
||||||
# 正则解析删除的媒体信息
|
# 正则解析删除的媒体信息
|
||||||
pattern = r'\[(.*?)\].*?Removing item, Type: "(.*?)", Name: "(.*?)", Path: "(.*?)"'
|
pattern = r'\[(.*?)\].*?Removing item, Type: "(.*?)", Name: "(.*?)", Path: "(.*?)"'
|
||||||
matches = re.findall(pattern, log_text)
|
matches = re.findall(pattern, log_res.text)
|
||||||
|
|
||||||
del_medias = []
|
del_medias = []
|
||||||
# 循环获取媒体信息
|
# 循环获取媒体信息
|
||||||
|
Loading…
x
Reference in New Issue
Block a user