feat BestFilmVersion 增强代码健壮性
This commit is contained in:
parent
9df5fabf92
commit
d11956550f
@ -1,4 +1,5 @@
|
|||||||
import datetime
|
import datetime
|
||||||
|
from functools import reduce
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Optional, Any, List, Dict, Tuple
|
from typing import Optional, Any, List, Dict, Tuple
|
||||||
from xml.dom.minidom import parseString
|
from xml.dom.minidom import parseString
|
||||||
@ -398,6 +399,8 @@ class BestFilmVersion(_PluginBase):
|
|||||||
"&Limit=20" \
|
"&Limit=20" \
|
||||||
"&apikey={APIKEY}"
|
"&apikey={APIKEY}"
|
||||||
resp = self.get_items(Jellyfin().get_data(url))
|
resp = self.get_items(Jellyfin().get_data(url))
|
||||||
|
if not resp:
|
||||||
|
continue
|
||||||
all_item.extend(resp)
|
all_item.extend(resp)
|
||||||
elif settings.MEDIASERVER == 'emby':
|
elif settings.MEDIASERVER == 'emby':
|
||||||
# 获取所有user
|
# 获取所有user
|
||||||
@ -417,12 +420,21 @@ class BestFilmVersion(_PluginBase):
|
|||||||
"&EnableTotalRecordCount=false" \
|
"&EnableTotalRecordCount=false" \
|
||||||
"&Limit=20&api_key={APIKEY}"
|
"&Limit=20&api_key={APIKEY}"
|
||||||
resp = self.get_items(Emby().get_data(url))
|
resp = self.get_items(Emby().get_data(url))
|
||||||
|
if not resp:
|
||||||
|
continue
|
||||||
all_item.extend(resp)
|
all_item.extend(resp)
|
||||||
else:
|
else:
|
||||||
resp = self.plex_get_watchlist()
|
resp = self.plex_get_watchlist()
|
||||||
|
if not resp:
|
||||||
|
return
|
||||||
all_item.extend(resp)
|
all_item.extend(resp)
|
||||||
|
|
||||||
for data in all_item:
|
def function(y, x):
|
||||||
|
return y if (x['Name'] in [i['Name'] for i in y]) else (lambda z, u: (z.append(u), z))(y, x)[1]
|
||||||
|
# all_item 根据电影名去重
|
||||||
|
result = reduce(function, all_item, [])
|
||||||
|
|
||||||
|
for data in result:
|
||||||
# 检查缓存
|
# 检查缓存
|
||||||
if data.get('Name') in caches:
|
if data.get('Name') in caches:
|
||||||
continue
|
continue
|
||||||
@ -520,6 +532,8 @@ class BestFilmVersion(_PluginBase):
|
|||||||
elem = dom.documentElement
|
elem = dom.documentElement
|
||||||
# 获取 指定元素
|
# 获取 指定元素
|
||||||
eles = elem.getElementsByTagName('Video')
|
eles = elem.getElementsByTagName('Video')
|
||||||
|
if not eles:
|
||||||
|
return []
|
||||||
for ele in eles:
|
for ele in eles:
|
||||||
data = {}
|
data = {}
|
||||||
# 获取标签中内容
|
# 获取标签中内容
|
||||||
@ -539,20 +553,29 @@ class BestFilmVersion(_PluginBase):
|
|||||||
logger.error(f"连接Plex/Watchlist 出错:" + str(e))
|
logger.error(f"连接Plex/Watchlist 出错:" + str(e))
|
||||||
return []
|
return []
|
||||||
|
|
||||||
def plex_get_iteminfo(self, itemid):
|
@staticmethod
|
||||||
|
def plex_get_iteminfo(itemid):
|
||||||
url = f"https://metadata.provider.plex.tv/library/metadata/{itemid}" \
|
url = f"https://metadata.provider.plex.tv/library/metadata/{itemid}" \
|
||||||
f"?X-Plex-Token={settings.PLEX_TOKEN}"
|
f"?X-Plex-Token={settings.PLEX_TOKEN}"
|
||||||
|
ids = []
|
||||||
try:
|
try:
|
||||||
resp = RequestUtils().get_res(url=url)
|
resp = RequestUtils(accept_type="application/json, text/plain, */*").get_res(url=url)
|
||||||
if resp:
|
if resp:
|
||||||
dom = parseString(resp.text)
|
metadata = resp.json().get('MediaContainer').get('Metadata')
|
||||||
# 获取文档元素对象
|
for item in metadata:
|
||||||
elem = dom.documentElement
|
_guid = item.get('Guid')
|
||||||
# 获取 指定元素
|
if not _guid:
|
||||||
eles = elem.getElementsByTagName('Video')
|
continue
|
||||||
for ele in eles:
|
|
||||||
# 获取标签中内容
|
id_list = [h.get('id') for h in _guid if h.get('id').__contains__("tmdb")]
|
||||||
return {"ExternalUrls": "TheMovieDb", "Url": f"{self.ele_get_tmdbid(ele)}"}
|
if not id_list:
|
||||||
|
continue
|
||||||
|
|
||||||
|
ids.append({'Name': 'TheMovieDb', 'Url': id_list[0]})
|
||||||
|
|
||||||
|
if not ids:
|
||||||
|
return []
|
||||||
|
return {'ExternalUrls': ids}
|
||||||
else:
|
else:
|
||||||
logger.error(f"Plex/Items 未获取到返回数据")
|
logger.error(f"Plex/Items 未获取到返回数据")
|
||||||
return []
|
return []
|
||||||
@ -560,19 +583,6 @@ class BestFilmVersion(_PluginBase):
|
|||||||
logger.error(f"连接Plex/Items 出错:" + str(e))
|
logger.error(f"连接Plex/Items 出错:" + str(e))
|
||||||
return []
|
return []
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def ele_get_tmdbid(ele):
|
|
||||||
data = []
|
|
||||||
for h in ele.getElementsByTagName('Guid'):
|
|
||||||
tmdbid = h.attributes['id'].nodeValue if h.attributes['id'].nodeValue.__contains__("tmdb") else ""
|
|
||||||
if not tmdbid:
|
|
||||||
continue
|
|
||||||
obj = {"Name": "TheMovieDb", "Url": f"{tmdbid}"}
|
|
||||||
data.append(obj)
|
|
||||||
return data
|
|
||||||
logger.warn(f"连接Plex/Guid 警告:" + "未获取到tmdbid数据")
|
|
||||||
return data
|
|
||||||
|
|
||||||
@eventmanager.register(EventType.WebhookMessage)
|
@eventmanager.register(EventType.WebhookMessage)
|
||||||
def webhook_message_action(self, event):
|
def webhook_message_action(self, event):
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user