From d52f9557f59d6747bb696627f8e1ce3d07b89098 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9F=B3=E7=A5=9E?= <3162475700@qq.com> Date: Tue, 1 Oct 2024 22:50:22 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=A4=A0=E5=AE=8C=E5=96=84=E6=97=B6?= =?UTF-8?q?=E5=8C=BA=E8=AF=86=E5=88=AB=EF=BC=8C=E5=A6=82=E6=9E=9C=E6=98=AF?= =?UTF-8?q?=E6=A0=87=E5=87=86=E6=97=B6=E5=8C=BA=E5=88=99=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?8=E4=B8=AA=E5=B0=8F=E6=97=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../__pycache__/get_info.cpython-311.pyc | Bin 18700 -> 19574 bytes friend_circle_lite/get_info.py | 46 +++++++++++++----- 2 files changed, 33 insertions(+), 13 deletions(-) diff --git a/friend_circle_lite/__pycache__/get_info.cpython-311.pyc b/friend_circle_lite/__pycache__/get_info.cpython-311.pyc index 04de5f4514709eeba05f9e1391805b56133535ce..67c80d3282012fed06279eea3adbfc16f4dcafcb 100644 GIT binary patch delta 3861 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 diff --git a/friend_circle_lite/get_info.py b/friend_circle_lite/get_info.py index 5e669ab..9be417c 100644 --- a/friend_circle_lite/get_info.py +++ b/friend_circle_lite/get_info.py @@ -1,4 +1,4 @@ -from datetime import datetime, timedelta +from datetime import datetime, timedelta, timezone from dateutil import parser import requests import feedparser @@ -14,33 +14,53 @@ timeout = (10, 15) # 连接超时和读取超时,防止requests接受时间过 def format_published_time(time_str): """ 格式化发布时间为统一格式 YYYY-MM-DD HH:MM + + 参数: + time_str (str): 输入的时间字符串,可能是多种格式。 + + 返回: + str: 格式化后的时间字符串,若解析失败返回空字符串。 """ + # 尝试自动解析输入时间字符串 try: - # 尝试自动解析 parsed_time = parser.parse(time_str) - return parsed_time.strftime('%Y-%m-%d %H:%M') + # 如果没有时区信息,则将其视为 UTC + if parsed_time.tzinfo is None: + parsed_time = parsed_time.replace(tzinfo=timezone.utc) + + # 转换为上海时区(UTC+8) + shanghai_time = parsed_time.astimezone(timezone(timedelta(hours=8))) + return shanghai_time.strftime('%Y-%m-%d %H:%M') + except (ValueError, parser.ParserError): pass - + + # 定义支持的时间格式 time_formats = [ - '%a, %d %b %Y %H:%M:%S %z', # Mon, 11 Mar 2024 14:08:32 +0000 - '%a, %d %b %Y %H:%M:%S GMT', # Wed, 19 Jun 2024 09:43:53 GMT - '%Y-%m-%dT%H:%M:%S%z', # 2024-03-11T14:08:32+00:00 - '%Y-%m-%dT%H:%M:%SZ', # 2024-03-11T14:08:32Z - '%Y-%m-%d %H:%M:%S', # 2024-03-11 14:08:32 - '%Y-%m-%d' # 2024-03-11 + '%a, %d %b %Y %H:%M:%S %z', # Mon, 11 Mar 2024 14:08:32 +0000 + '%a, %d %b %Y %H:%M:%S GMT', # Wed, 19 Jun 2024 09:43:53 GMT + '%Y-%m-%dT%H:%M:%S%z', # 2024-03-11T14:08:32+00:00 + '%Y-%m-%dT%H:%M:%SZ', # 2024-03-11T14:08:32Z + '%Y-%m-%d %H:%M:%S', # 2024-03-11 14:08:32 + '%Y-%m-%d' # 2024-03-11 ] + # 遍历所有支持的时间格式进行解析 for fmt in time_formats: try: - parsed_time = datetime.strptime(time_str, fmt) + timedelta(hours=8) - return parsed_time.strftime('%Y-%m-%d %H:%M') + parsed_time = datetime.strptime(time_str, fmt) + # 将解析的时间视为 UTC + parsed_time = parsed_time.replace(tzinfo=timezone.utc) + # 转换为上海时区 + shanghai_time = parsed_time.astimezone(timezone(timedelta(hours=8))) + return shanghai_time.strftime('%Y-%m-%d %H:%M') except ValueError: continue - # 如果所有格式都无法匹配,返回原字符串或一个默认值 + # 如果所有格式都无法匹配,返回空字符串 return '' + def check_feed(blog_url, session): """ 检查博客的 RSS 或 Atom 订阅链接。