mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-09-06 16:07:01 +08:00
fix rsshelper
This commit is contained in:
+10
-24
@@ -281,6 +281,7 @@ class RssHelper:
|
|||||||
ret_xml = ret.text
|
ret_xml = ret.text
|
||||||
|
|
||||||
# 使用lxml.etree解析XML
|
# 使用lxml.etree解析XML
|
||||||
|
parser = None
|
||||||
try:
|
try:
|
||||||
# 创建解析器,禁用网络访问以提高安全性和性能
|
# 创建解析器,禁用网络访问以提高安全性和性能
|
||||||
parser = etree.XMLParser(
|
parser = etree.XMLParser(
|
||||||
@@ -303,6 +304,9 @@ class RssHelper:
|
|||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(f"HTML解析也失败:{str(e)}")
|
logger.error(f"HTML解析也失败:{str(e)}")
|
||||||
return False
|
return False
|
||||||
|
finally:
|
||||||
|
if parser is not None:
|
||||||
|
del parser
|
||||||
|
|
||||||
if root is None:
|
if root is None:
|
||||||
logger.error("无法解析RSS内容")
|
logger.error("无法解析RSS内容")
|
||||||
@@ -362,7 +366,7 @@ class RssHelper:
|
|||||||
pubdate = StringUtils.get_time(pubdate_nodes[0].text)
|
pubdate = StringUtils.get_time(pubdate_nodes[0].text)
|
||||||
|
|
||||||
# 获取豆瓣昵称
|
# 获取豆瓣昵称
|
||||||
nickname_nodes = item.xpath('.//dc:creator | .//*[local-name()="creator"]')
|
nickname_nodes = item.xpath('.//*[local-name()="creator"]')
|
||||||
nickname = nickname_nodes[0].text if nickname_nodes and nickname_nodes[0].text else ""
|
nickname = nickname_nodes[0].text if nickname_nodes and nickname_nodes[0].text else ""
|
||||||
|
|
||||||
# 返回对象
|
# 返回对象
|
||||||
@@ -391,21 +395,14 @@ class RssHelper:
|
|||||||
"RSS Link has expired, You need to get a new one!",
|
"RSS Link has expired, You need to get a new one!",
|
||||||
"RSS Link has expired, You need to get new!"
|
"RSS Link has expired, You need to get new!"
|
||||||
]
|
]
|
||||||
if 'ret_xml' in locals() and ret_xml and ret_xml in _rss_expired_msg:
|
if ret_xml in _rss_expired_msg:
|
||||||
return None
|
return None
|
||||||
return False
|
return False
|
||||||
finally:
|
finally:
|
||||||
# 显式清理XML树,避免内存泄漏
|
|
||||||
if root is not None:
|
if root is not None:
|
||||||
root.clear()
|
del root
|
||||||
# 清理根节点的父节点引用
|
if ret_xml is not None:
|
||||||
while root.getparent() is not None:
|
del ret_xml
|
||||||
parent = root.getparent()
|
|
||||||
parent.remove(root)
|
|
||||||
root = parent
|
|
||||||
# 清理局部变量
|
|
||||||
del root, ret_xml
|
|
||||||
# 强制垃圾回收
|
|
||||||
gc.collect()
|
gc.collect()
|
||||||
|
|
||||||
return ret_array
|
return ret_array
|
||||||
@@ -419,7 +416,6 @@ class RssHelper:
|
|||||||
:param proxy: 是否使用代理
|
:param proxy: 是否使用代理
|
||||||
:return: rss地址、错误信息
|
:return: rss地址、错误信息
|
||||||
"""
|
"""
|
||||||
html = None
|
|
||||||
try:
|
try:
|
||||||
# 获取站点域名
|
# 获取站点域名
|
||||||
domain = StringUtils.get_url_domain(url)
|
domain = StringUtils.get_url_domain(url)
|
||||||
@@ -453,6 +449,7 @@ class RssHelper:
|
|||||||
|
|
||||||
# 解析HTML
|
# 解析HTML
|
||||||
if html_text:
|
if html_text:
|
||||||
|
html = None
|
||||||
try:
|
try:
|
||||||
html = etree.HTML(html_text)
|
html = etree.HTML(html_text)
|
||||||
if StringUtils.is_valid_html_element(html):
|
if StringUtils.is_valid_html_element(html):
|
||||||
@@ -460,20 +457,9 @@ class RssHelper:
|
|||||||
if rss_link:
|
if rss_link:
|
||||||
return str(rss_link[-1]), ""
|
return str(rss_link[-1]), ""
|
||||||
finally:
|
finally:
|
||||||
# 显式清理HTML树
|
|
||||||
if html is not None:
|
if html is not None:
|
||||||
html.clear()
|
|
||||||
# 清理父节点引用
|
|
||||||
while html.getparent() is not None:
|
|
||||||
parent = html.getparent()
|
|
||||||
parent.remove(html)
|
|
||||||
html = parent
|
|
||||||
del html
|
del html
|
||||||
gc.collect()
|
|
||||||
|
|
||||||
return "", f"获取RSS链接失败:{url}"
|
return "", f"获取RSS链接失败:{url}"
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
return "", f"获取 {url} RSS链接失败:{str(e)}"
|
return "", f"获取 {url} RSS链接失败:{str(e)}"
|
||||||
finally:
|
|
||||||
del html
|
|
||||||
gc.collect()
|
|
||||||
|
|||||||
Reference in New Issue
Block a user