😥取消使用多线程,优化代码结构 #28

This commit is contained in:
柳神 2024-11-23 00:50:03 +08:00
parent aa14d1b706
commit 73089baaa7

View File

@ -57,15 +57,16 @@ def format_published_time(time_str):
def check_feed(blog_url, session, headers=None, timeout=10): def check_feed(blog_url, session):
""" """
检查博客的 RSS Atom 订阅链接使用多线程提高效率禁止重定向 检查博客的 RSS Atom 订阅链接
此函数接受一个博客地址尝试在其后拼接 '/atom.xml', '/rss2.xml' '/feed'并检查这些链接是否可访问
Atom 优先如果都不能访问则返回 ['none', 源地址]
参数 参数
blog_url (str): 博客的基础 URL blog_url (str): 博客的基础 URL
session (requests.Session): 用于请求的会话对象 session (requests.Session): 用于请求的会话对象
headers (dict, 可选): 自定义请求头
timeout (int, 可选): 请求的超时限制默认为 10
返回 返回
list: 包含类型和拼接后的链接的列表如果 atom 链接可访问则返回 ['atom', atom_url] list: 包含类型和拼接后的链接的列表如果 atom 链接可访问则返回 ['atom', atom_url]
@ -76,35 +77,22 @@ def check_feed(blog_url, session, headers=None, timeout=10):
possible_feeds = [ possible_feeds = [
('atom', '/atom.xml'), ('atom', '/atom.xml'),
('rss', '/rss.xml'), ('rss', '/rss.xml'), # 2024-07-26 添加 /rss.xml内容的支持
('rss2', '/rss2.xml'), ('rss2', '/rss2.xml'),
('feed', '/feed'), ('feed', '/feed'),
('feed2', '/feed.xml'), ('feed2', '/feed.xml'), # 2024-07-26 添加 /feed.xml内容的支持
('feed3', '/feed/'), ('feed3', '/feed/'),
('index', '/index.xml') ('index', '/index.xml') # 2024-07-25 添加 /index.xml内容的支持
] ]
def fetch_feed(feed_type, path): for feed_type, path in possible_feeds:
feed_url = blog_url.rstrip('/') + path feed_url = blog_url.rstrip('/') + path
try: try:
response = session.get(feed_url, headers=headers, timeout=timeout, allow_redirects=False) response = session.get(feed_url, headers=headers, timeout=timeout)
if response.status_code == 200: if response.status_code == 200:
return [feed_type, feed_url] return [feed_type, feed_url]
elif response.status_code in [301, 302, 303]:
return None # 重定向,不处理
except requests.RequestException: except requests.RequestException:
return None # 请求异常,不处理 continue
# 使用 ThreadPoolExecutor 执行多个线程
with ThreadPoolExecutor() as executor:
futures = [executor.submit(fetch_feed, feed_type, path) for feed_type, path in possible_feeds]
# 等待线程完成并获取结果
for future in as_completed(futures):
result = future.result()
if result:
return result # 如果找到有效的订阅链接,返回
logging.warning(f"无法找到 {blog_url} 的订阅链接") logging.warning(f"无法找到 {blog_url} 的订阅链接")
return ['none', blog_url] return ['none', blog_url]