From ba7b368a9a30444521806350e752f106619c840c Mon Sep 17 00:00:00 2001 From: LibraHp_0928 <1941163264@qq.com> Date: Tue, 24 Sep 2024 15:31:39 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=8D=E6=9E=84=E9=A6=96=E9=A1=B5=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=EF=BC=8C=E4=BC=98=E5=8C=96=E4=BB=A3=E7=A0=81=E9=80=BB?= =?UTF-8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/loading.gif | Bin 0 -> 44187 bytes main.py | 225 +++++++++++++++++++++++---------------------- 2 files changed, 113 insertions(+), 112 deletions(-) create mode 100644 assets/loading.gif diff --git a/assets/loading.gif b/assets/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..d2ff4b8a1006ca40b152992a72e02541c849a941 GIT binary patch literal 44187 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 literal 0 HcmV?d00001 diff --git a/main.py b/main.py index 5e84107..8387787 100644 --- a/main.py +++ b/main.py @@ -7,6 +7,7 @@ from datetime import datetime import json import threading from bs4 import BeautifulSoup +from collections import Counter # 初始化所有消息列表 all_messages = [] @@ -22,7 +23,7 @@ leaves = [] other = [] now_login_user = None - +most_interactive_user = None # 全局header headers = { 'authority': 'user.qzone.qq.com', @@ -101,14 +102,20 @@ def parse_time_strings(time_str): return datetime.strptime(time_str, "%Y年%m月%d日 %H:%M") elif "月" in time_str: # 包含“月”的格式 return datetime.strptime(time_str, "%m月%d日 %H:%M").replace(year=today.year) - return None + return time_str def clean_content(): - global all_messages, user_says, forward, leaves, other, friends, now_login_user + global all_messages, user_says, forward, leaves, other, friends, now_login_user,most_interactive_user + + user_counter = Counter((message.user.username,message.user.uin) for message in all_messages) + most_interactive_user = user_counter.most_common(1) # 好友去重 friends = list({item.uin: item for item in friends}.values()) all_messages = list({item.content: item for item in all_messages}.values()) + + + print("交互最多的人:", most_interactive_user) for message in all_messages: try: message_type = message.type @@ -119,11 +126,12 @@ def clean_content(): message.user = now_login_user message.content = message.content.replace(now_login_user.username + ' :', '') user_says.append(message) - elif '转发' in message_type: + elif '转发' in message.content: forward.append(message) else: other.append(message) message.content = message.content.replace(message.user.username + ' :', '') + message.content = message.content.replace(message.user.username, '') except Exception as e: print(e) @@ -242,7 +250,7 @@ class PaginatedContainer(ft.UserControl): controls=[ ft.Text(item.user.username, size=18, weight="bold"), ft.Text(f'{item.time}', size=14), - ft.Text(item.content, size=12,width=300), + ft.Text(item.content, size=16,width=300), ], alignment=ft.MainAxisAlignment.CENTER, spacing=4, @@ -250,7 +258,7 @@ class PaginatedContainer(ft.UserControl): ] # 如果存在图片,添加到 controls 中 - if item.images: + if item.images and 'http' in item.images: controls[1].controls.append(ft.Image(src=item.images, fit=ft.ImageFit.COVER,height=300,width=300)) # 如果存在评论,添加到 controls 中 @@ -310,9 +318,6 @@ class User: self.avatar_url = f'http://q1.qlogo.cn/g?b=qq&nk={self.uin}&s=100' # 使用 self.uin self.username = username self.link = f'https://user.qzone.qq.com/{self.uin}/' # 使用 self.uin - - def __str__(self): - return f'Uin: {self.uin}, Username: {self.username}, Link: {self.link}, Avatar URL: {self.avatar_url}' class Comment: @@ -331,16 +336,6 @@ class Message: self.images = images self.comment = comment - def __str__(self): - user_info = f"User: {self.user.username if self.user else 'Unknown'}" - time_info = f"Time: {self.time}" if self.time else "Time: Not set" - content_info = f"Content: {self.content}" if self.content else "Content: Not set" - type_info = f"Type: {self.type}" if self.type else "Type: Not set" - comment_info = f"Comment: {self.comment.content}" if self.comment and self.comment.content else "Comment: Not set" - images_info = f"Images: {self.images}" if self.images else "Images: Not set" - - return f"{user_info}\n{time_info}\n{content_info}\n{type_info}\n{comment_info}\n{images_info}" - def reset_save_content(): global all_messages, user_says, forward, leaves, other, friends @@ -470,6 +465,8 @@ def main(page: ft.Page): elif content.data == 'login_text': login_text = content content.visible = True + elif content.data == 'login_pic': + content.visible = True return progress_bar, login_text @@ -559,6 +556,7 @@ def main(page: ft.Page): alignment=ft.MainAxisAlignment.CENTER, data='not_login' ), + ft.Image(src="assets/loading.gif", expand=True, data='login_pic', visible=False), ft.Text("获取空间消息中...", size=24, weight="bold", data='login_text',visible=False), ft.ProgressBar(data='login_progress', visible=False,bar_height=10,border_radius=10), ], @@ -621,6 +619,17 @@ def main(page: ft.Page): log(f"获取消息列表数量中... 当前 - Total: {total}") return total + + def get_hitokoto(): + url = "https://v1.hitokoto.cn/" + response = requests.get(url) + + if response.status_code == 200: + data = response.json() + return data['hitokoto'], data['from'], data['from_who'] + else: + return None, None, None + def create_card_list_view(progress_bar, login_text): # 创建一个空的卡片列表,用于存放所有卡片 @@ -692,112 +701,104 @@ def main(page: ft.Page): print(e) log(e) continue - login_text.value = "获取成功!" + content_area.content.clean() log("获取成功!", "success") - progress_bar.visible = False clean_content() unlock_tabs() content_area.content.controls.append(get_message_result()) page.update() def get_message_result(): - return ft.Column( - controls=[ - ft.Row( - controls=[ - ft.Card( - content=ft.Container( - content=ft.Text("说说共有 " + str(all_messages.__len__()) + " 条", size=25), - padding=20, - alignment=ft.alignment.center, - ), - elevation=5, - shape=ft.RoundedRectangleBorder(radius=15), - expand=True, - ), - ft.Card( - content=ft.Container( - content=ft.Text("留言共有 " + str(leaves.__len__()) + " 条", size=25), - padding=20, - alignment=ft.alignment.center, - ), - elevation=5, - shape=ft.RoundedRectangleBorder(radius=15), - expand=True, - ), + # 用户信息栏 + user_info = ft.Card( + content=ft.Container( + content=ft.Row([ + ft.CircleAvatar( + foreground_image_src=now_login_user.avatar_url, + content=ft.Text(f"{now_login_user.username}"), + radius=40 + ), # 圆形头像 + ft.Column( + [ + ft.Text("你好!", size=16), + ft.Text(f"{now_login_user.username}", size=20, weight=ft.FontWeight.BOLD), + ], + alignment="center", + ), + ]), + padding=20 + ), + height=300, + col=4 + ) + + # 交互信息栏 + interaction_info = ft.Card( + content=ft.Container( + content = ft.Column( + [ + ft.Text("自空间交互以来:", size=24, weight=ft.FontWeight.BOLD), + ft.Text(f"你发布了{user_says.__len__()}条说说", size=20), + ft.Text(f"有{leaves.__len__()}人给你留言", size=20), + ft.Text(f"有{friends.__len__()}个人与你空间有过交互", size=20), + ft.Text(f"最早的说说发布在{user_says[user_says.__len__() - 1].time},那个时候的你有这么多烦恼嘛", size=20), + ft.Text(f"和你交互最多的人是", size=20, spans=[ft.TextSpan(f" @{most_interactive_user[0][0][0]} ", ft.TextStyle(weight=ft.FontWeight.BOLD,color=ft.colors.BLUE_300)),ft.TextSpan("现在的她/他怎么样了呢", ft.TextStyle(size=20))]), ], - alignment="center", - spacing=20, # 控制两列卡片之间的间距 - expand=True, + spacing=10, + alignment=ft.MainAxisAlignment.CENTER, ), - ft.Row( - controls=[ - ft.Card( - content=ft.Container( - content=ft.Text("转发共有 " + str(forward.__len__()) + " 条", size=25), - padding=20, - alignment=ft.alignment.center, - ), - elevation=5, - shape=ft.RoundedRectangleBorder(radius=15), - expand=True, + padding=20, + ), + height=300, + col=8 + ) + + # 发布的第一条说说 + first_post = ft.Container( + content=ft.Column( + [ + ft.Text("你发布的第一条说说是:", size=16, weight=ft.FontWeight.BOLD), + ft.Container( + content=ft.ResponsiveRow( + controls=[ + ft.Text(f"{user_says[user_says.__len__() - 1].time}", size=14), + ft.Text(f"{user_says[user_says.__len__() - 1].content}", size=20) + ] ), - ft.Card( - content=ft.Container( - content=ft.Text("图片共有 " + str(889) + " 张", size=25), - padding=20, - alignment=ft.alignment.center, - ), - elevation=5, - shape=ft.RoundedRectangleBorder(radius=15), - expand=True, - ), - ], - alignment="center", - spacing=20, - expand=True, - ), - ft.Row( - controls=[ - ft.Card( - content=ft.Container( - content=ft.Text("评论共有 " + str(889) + " 条", size=25), - padding=20, - alignment=ft.alignment.center, - ), - elevation=5, - shape=ft.RoundedRectangleBorder(radius=15), - expand=True, - ), - ft.Card( - content=ft.Container( - content=ft.Text("好友共有 " + str(friends.__len__()) + " 位", size=25), - padding=20, - alignment=ft.alignment.center, - ), - elevation=5, - shape=ft.RoundedRectangleBorder(radius=15), - expand=True, - ), - ], - alignment="center", - spacing=20, - expand=True, - ), - ft.Row( - controls=[ - ft.Text(f"最早的说说发布在{all_messages[all_messages.__len__() - 1].time}", size=20), - ft.Text("程序完全免费,请勿用于商业用途!", size=20), - ], - alignment="center", - ) - ], - alignment="center", - horizontal_alignment="center", - spacing=20, # 控制每行之间的间距 + padding=10, + border_radius=ft.border_radius.all(5), + bgcolor=ft.colors.GREY_100, + expand=True, + ), + ] + ), + expand=True, + ) + hitokoto, source, author = get_hitokoto() + # 一言栏 + last_message = ft.Container( + content=ft.Text(f"一言: {hitokoto}\n出自: {source} - {author}", size=14), + padding=10, + border_radius=ft.border_radius.all(5), + bgcolor=ft.colors.GREY_300, expand=True, ) + # 布局排列 + return ft.Column( + [ + ft.ResponsiveRow( + controls=[ + user_info, + interaction_info, + ] + ), + first_post, + ft.Text(f"一言: {hitokoto}\n出自: {source} - {author}", size=14) + ], + spacing=20, + expand=True, + ) # 用户信息