😥取消使用多线程,优化代码结构 #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]