Merge pull request #46 from developer-wlj/wlj0807

This commit is contained in:
jxxghp 2023-08-09 06:29:55 +08:00 committed by GitHub
commit 293b992ac0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -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):