mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-09-06 07:56:52 +08:00
fix base chain
This commit is contained in:
@@ -94,9 +94,8 @@ class ChainBase(metaclass=ABCMeta):
|
|||||||
return ret is None
|
return ret is None
|
||||||
|
|
||||||
result = None
|
result = None
|
||||||
plugin_modules = self.pluginmanager.get_plugin_modules()
|
|
||||||
# 插件模块
|
# 插件模块
|
||||||
for plugin, module_dict in plugin_modules.items():
|
for plugin, module_dict in self.pluginmanager.get_plugin_modules().items():
|
||||||
plugin_id, plugin_name = plugin
|
plugin_id, plugin_name = plugin
|
||||||
if method in module_dict:
|
if method in module_dict:
|
||||||
func = module_dict[method]
|
func = module_dict[method]
|
||||||
@@ -138,10 +137,7 @@ class ChainBase(metaclass=ABCMeta):
|
|||||||
|
|
||||||
# 系统模块
|
# 系统模块
|
||||||
logger.debug(f"请求系统模块执行:{method} ...")
|
logger.debug(f"请求系统模块执行:{method} ...")
|
||||||
modules = self.modulemanager.get_running_modules(method)
|
for module in sorted(self.modulemanager.get_running_modules(method), key=lambda x: x.get_priority()):
|
||||||
# 按优先级排序
|
|
||||||
modules = sorted(modules, key=lambda x: x.get_priority())
|
|
||||||
for module in modules:
|
|
||||||
module_id = module.__class__.__name__
|
module_id = module.__class__.__name__
|
||||||
try:
|
try:
|
||||||
module_name = module.get_name()
|
module_name = module.get_name()
|
||||||
|
|||||||
+65
-62
@@ -306,6 +306,7 @@ class RssHelper:
|
|||||||
return False
|
return False
|
||||||
finally:
|
finally:
|
||||||
if parser is not None:
|
if parser is not None:
|
||||||
|
parser.close()
|
||||||
del parser
|
del parser
|
||||||
|
|
||||||
if root is None:
|
if root is None:
|
||||||
@@ -319,70 +320,72 @@ class RssHelper:
|
|||||||
items_count = min(len(items), self.MAX_RSS_ITEMS)
|
items_count = min(len(items), self.MAX_RSS_ITEMS)
|
||||||
if len(items) > self.MAX_RSS_ITEMS:
|
if len(items) > self.MAX_RSS_ITEMS:
|
||||||
logger.warning(f"RSS条目过多: {len(items)},仅处理前{self.MAX_RSS_ITEMS}个")
|
logger.warning(f"RSS条目过多: {len(items)},仅处理前{self.MAX_RSS_ITEMS}个")
|
||||||
|
try:
|
||||||
|
for item in items[:items_count]:
|
||||||
|
try:
|
||||||
|
# 使用xpath提取信息,更高效
|
||||||
|
title_nodes = item.xpath('.//title')
|
||||||
|
title = title_nodes[0].text if title_nodes and title_nodes[0].text else ""
|
||||||
|
if not title:
|
||||||
|
continue
|
||||||
|
|
||||||
for item in items[:items_count]:
|
# 描述
|
||||||
try:
|
desc_nodes = item.xpath('.//description | .//summary')
|
||||||
# 使用xpath提取信息,更高效
|
description = desc_nodes[0].text if desc_nodes and desc_nodes[0].text else ""
|
||||||
title_nodes = item.xpath('.//title')
|
|
||||||
title = title_nodes[0].text if title_nodes and title_nodes[0].text else ""
|
# 种子页面
|
||||||
if not title:
|
link_nodes = item.xpath('.//link')
|
||||||
|
if link_nodes:
|
||||||
|
link = link_nodes[0].text if hasattr(link_nodes[0], 'text') and link_nodes[0].text else link_nodes[0].get('href', '')
|
||||||
|
else:
|
||||||
|
link = ""
|
||||||
|
|
||||||
|
# 种子链接
|
||||||
|
enclosure_nodes = item.xpath('.//enclosure')
|
||||||
|
enclosure = enclosure_nodes[0].get('url', '') if enclosure_nodes else ""
|
||||||
|
if not enclosure and not link:
|
||||||
|
continue
|
||||||
|
# 部分RSS只有link没有enclosure
|
||||||
|
if not enclosure and link:
|
||||||
|
enclosure = link
|
||||||
|
|
||||||
|
# 大小
|
||||||
|
size = 0
|
||||||
|
if enclosure_nodes:
|
||||||
|
size_attr = enclosure_nodes[0].get('length', '0')
|
||||||
|
if size_attr and str(size_attr).isdigit():
|
||||||
|
size = int(size_attr)
|
||||||
|
|
||||||
|
# 发布日期
|
||||||
|
pubdate_nodes = item.xpath('.//pubDate | .//published | .//updated')
|
||||||
|
pubdate = ""
|
||||||
|
if pubdate_nodes and pubdate_nodes[0].text:
|
||||||
|
pubdate = StringUtils.get_time(pubdate_nodes[0].text)
|
||||||
|
|
||||||
|
# 获取豆瓣昵称
|
||||||
|
nickname_nodes = item.xpath('.//*[local-name()="creator"]')
|
||||||
|
nickname = nickname_nodes[0].text if nickname_nodes and nickname_nodes[0].text else ""
|
||||||
|
|
||||||
|
# 返回对象
|
||||||
|
tmp_dict = {
|
||||||
|
'title': title,
|
||||||
|
'enclosure': enclosure,
|
||||||
|
'size': size,
|
||||||
|
'description': description,
|
||||||
|
'link': link,
|
||||||
|
'pubdate': pubdate
|
||||||
|
}
|
||||||
|
# 如果豆瓣昵称不为空,返回数据增加豆瓣昵称,供doubansync插件获取
|
||||||
|
if nickname:
|
||||||
|
tmp_dict['nickname'] = nickname
|
||||||
|
ret_array.append(tmp_dict)
|
||||||
|
|
||||||
|
except Exception as e1:
|
||||||
|
logger.debug(f"解析RSS条目失败:{str(e1)} - {traceback.format_exc()}")
|
||||||
continue
|
continue
|
||||||
|
finally:
|
||||||
# 描述
|
items.clear()
|
||||||
desc_nodes = item.xpath('.//description | .//summary')
|
del items
|
||||||
description = desc_nodes[0].text if desc_nodes and desc_nodes[0].text else ""
|
|
||||||
|
|
||||||
# 种子页面
|
|
||||||
link_nodes = item.xpath('.//link')
|
|
||||||
if link_nodes:
|
|
||||||
link = link_nodes[0].text if hasattr(link_nodes[0], 'text') and link_nodes[0].text else \
|
|
||||||
link_nodes[0].get('href', '')
|
|
||||||
else:
|
|
||||||
link = ""
|
|
||||||
|
|
||||||
# 种子链接
|
|
||||||
enclosure_nodes = item.xpath('.//enclosure')
|
|
||||||
enclosure = enclosure_nodes[0].get('url', '') if enclosure_nodes else ""
|
|
||||||
if not enclosure and not link:
|
|
||||||
continue
|
|
||||||
# 部分RSS只有link没有enclosure
|
|
||||||
if not enclosure and link:
|
|
||||||
enclosure = link
|
|
||||||
|
|
||||||
# 大小
|
|
||||||
size = 0
|
|
||||||
if enclosure_nodes:
|
|
||||||
size_attr = enclosure_nodes[0].get('length', '0')
|
|
||||||
if size_attr and str(size_attr).isdigit():
|
|
||||||
size = int(size_attr)
|
|
||||||
|
|
||||||
# 发布日期
|
|
||||||
pubdate_nodes = item.xpath('.//pubDate | .//published | .//updated')
|
|
||||||
pubdate = ""
|
|
||||||
if pubdate_nodes and pubdate_nodes[0].text:
|
|
||||||
pubdate = StringUtils.get_time(pubdate_nodes[0].text)
|
|
||||||
|
|
||||||
# 获取豆瓣昵称
|
|
||||||
nickname_nodes = item.xpath('.//*[local-name()="creator"]')
|
|
||||||
nickname = nickname_nodes[0].text if nickname_nodes and nickname_nodes[0].text else ""
|
|
||||||
|
|
||||||
# 返回对象
|
|
||||||
tmp_dict = {
|
|
||||||
'title': title,
|
|
||||||
'enclosure': enclosure,
|
|
||||||
'size': size,
|
|
||||||
'description': description,
|
|
||||||
'link': link,
|
|
||||||
'pubdate': pubdate
|
|
||||||
}
|
|
||||||
# 如果豆瓣昵称不为空,返回数据增加豆瓣昵称,供doubansync插件获取
|
|
||||||
if nickname:
|
|
||||||
tmp_dict['nickname'] = nickname
|
|
||||||
ret_array.append(tmp_dict)
|
|
||||||
|
|
||||||
except Exception as e1:
|
|
||||||
logger.debug(f"解析RSS条目失败:{str(e1)} - {traceback.format_exc()}")
|
|
||||||
continue
|
|
||||||
|
|
||||||
except Exception as e2:
|
except Exception as e2:
|
||||||
logger.error(f"解析RSS失败:{str(e2)} - {traceback.format_exc()}")
|
logger.error(f"解析RSS失败:{str(e2)} - {traceback.format_exc()}")
|
||||||
|
|||||||
@@ -107,8 +107,7 @@ class ServiceBaseHelper(Generic[TConf]):
|
|||||||
迭代所有模块的实例及其对应的配置,返回 ServiceInfo 实例
|
迭代所有模块的实例及其对应的配置,返回 ServiceInfo 实例
|
||||||
"""
|
"""
|
||||||
configs = self.get_configs()
|
configs = self.get_configs()
|
||||||
modules = self.modulemanager.get_running_type_modules(self.module_type)
|
for module in self.modulemanager.get_running_type_modules(self.module_type):
|
||||||
for module in modules:
|
|
||||||
if not module:
|
if not module:
|
||||||
continue
|
continue
|
||||||
module_instances = module.get_instances()
|
module_instances = module.get_instances()
|
||||||
|
|||||||
Reference in New Issue
Block a user