From 3a2a0204e9d1db433e6725d084e5da8a23f944ce Mon Sep 17 00:00:00 2001 From: LibraHp_0928 <1941163264@qq.com> Date: Sat, 21 Sep 2024 00:25:18 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E9=83=A8=E5=88=86=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=EF=BC=8C=E6=B7=BB=E5=8A=A0icon?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/icon.ico | Bin 0 -> 5430 bytes assets/icon.png | Bin 32278 -> 22267 bytes main.py | 226 +++++++++++++++++++++++++++++++++++++++++++----- 3 files changed, 205 insertions(+), 21 deletions(-) create mode 100644 assets/icon.ico diff --git a/assets/icon.ico b/assets/icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..80107243c78f9c55dc37529c2072f586d4b00b38 GIT binary patch literal 5430 zcmdT|X>3$g6u#|13l#yOA|TijBLRhg(H|}$C2G`|821HDH2e{jga}An5(6$F7$cEH z+!tseP@sh>7Gq^8AhxA*2Pjk!3PnM%rF5Cj(wTYp^E)$r<4ij(uO#F=iK+ee zS>q<^e?Zg{(;VB;m`wR|1c*lB6XNDR=nL;h#Cbw&NItm_`ok!{uTxj_1x>^n;uaz; zr7evc+4lv}K-hYci>SagY}h!pRnZ;^G$JCrv;40BI$DWNh&vW3vwfirb^eWG-##WgX8srH#vJj3;-KssgSc z*XXT&T)U+m|H}!JySG$Si0LWNZ!G z8Mo`SAbZ@6y4kf6Y^x8UvLS*)7l~$p1%uLMRfe8-LK~IQn8@`% z65W5?(>HLR7d0jOAY-j-wXnH9jOAy5S550u3z$@R z0V5poYfK>T{wO!kl}pYReUSP)`Lyo?@!N(Q9*!ZmS06NldwX2R z)=kViZBMGSP<%QRb)qd~@J1EK&oifr#Ru}r9hImTE6Y1DKBW)xK4@(1reoiC_B~f+ zkWt2aXARF+ek&GL2GJOhod;|@8Nx)~3u+_hL)I(RJZO}WV`P#K8bjGu(v4ee?6IJB zhGTc#7LKuiW0dt4@Se$D+lm#3JEHvZuZH)+!=+xR4fKI))q@W|kn5_b4;oo47j)z1 z96rT$E^oB3k^B1-axC)%u+$U8iX%Z391mf~*)WbYS@3fH6H{A(9KSW!}24 zgS5%JCEV*$_LDz{y6>I^s(nC1IFX_EvWRZHz~%xtW;WdDmpge(RK>o{Uj+#fI1tn+pix5U%W`J(#MZF^Y0` z5%UPyGqHJ-^VJh#GCy|ei0-IVru*Ecd3S0Yjr(Bx(mg*xnXCJ3--&|8OAh$wIWg5Q z8I8f@m$kI_Z`ZtreM9|jAy(nwkMo#$_65Q5{#ls{K} zP9$wfUPP&`$T3O{6R>YsP^p|2=JiTt?o!INM1EpONK&WlV(fAO^_elW3AokZpe?wCg0D#EQoH zsGPhZjHlE-e$VX=BW-60uI(LBq?d*n*gSC0{eoq(+8H>E;4q$$TAG3D)Fyp&6 zT+eR}7vn%zp|@yKRXAx~Y#Spy=8+dp0qqeaC5d9%!UhK!L#?b0wmh&mxY*XQ^RWla zAo^Y+@87MA3F-oj$EovbMF4r82yS4^KZ@`0w8JQS`J}nV)|327kIA6!zwr)jWHV0P zaNa`sUtwHV)CTnn=fa*_H;TqqM>0h>T^kqMzmE3Fyj3tRlsPM5yvy;vt%GRrTX=Lk z>w6PyXsjAhZ4IE_$F|+^j2(*k?O4ulv|rAL@f*J>TN$%S3RwpCYsQ$8bZ ziM_-{jz2PmamN!UfVcQf@;>9Vd8ZBT?yGqq_H$>rLPV6F!CxP4sQKx-K6hP02Hg_V;Hg2B?p&cRiZX```~iNV2IlF3L&gIB{%-p1ZR#m~b= z®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 Ns;H?@DR(#I{{p+X5b^*3 literal 32278 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

UpIP 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 V>&;bb!V$U+P8c08JnDG;{{W{83l{(Y diff --git a/main.py b/main.py index 0f3f2c1..cc9306b 100644 --- a/main.py +++ b/main.py @@ -5,6 +5,7 @@ import re import time import json import threading +from bs4 import BeautifulSoup # 全局header headers = { @@ -48,6 +49,44 @@ def ptqrToken(qrsig): return 2147483647 & e +def extract_string_between(source_string, start_string, end_string): + start_index = source_string.find(start_string) + len(start_string) + end_index = source_string.find(end_string) + extracted_string = source_string[start_index:-37] + return extracted_string + +def replace_multiple_spaces(string): + pattern = r'\s+' + replaced_string = re.sub(pattern, ' ', string) + return replaced_string + +def process_old_html(message): + def replace_hex(match): + hex_value = match.group(0) + byte_value = bytes(hex_value, 'utf-8').decode('unicode_escape') + return byte_value + + new_text = re.sub(r'\\x[0-9a-fA-F]{2}', replace_hex, message) + start_string = "html:'" + end_string = "',opuin" + new_text = extract_string_between(new_text, start_string, end_string) + new_text = replace_multiple_spaces(new_text).replace('\\', '') + return new_text + +class User: + def __init__(self, uin, username): + self.uin = uin + self.avatar_url = f'http://q1.qlogo.cn/g?b=qq&nk={uin}&s=100' + self.username = username + self.link = f'https://user.qzone.qq.com/{uin}/' + + def get_controls(self): + return [ + ft.Image(src=self.avatar_url, border_radius=100), + ft.Text(self.username), + ft.Text(self.link), + ] + def create_card(img_url, title, subtitle): return ft.Card( @@ -80,7 +119,28 @@ def main(page: ft.Page): page.window.resizable = False page.padding = 20 page.bgcolor = "#f0f0f0" + # page.window.icon = "https://picsum.photos/200" + # 字体使用系统默认字体 + page.theme= ft.Theme(font_family="Microsoft YaHei") + def handle_close(e): + page.close(dlg_modal) + print("Modal dialog closed with action: ", e.control.text) + + dlg_modal = ft.AlertDialog( + modal=True, + title=ft.Text("TIPS"), + content=ft.Text("确定要退出登录吗?"), + actions=[ + ft.TextButton("Yes", on_click=handle_close), + ft.TextButton("No", on_click=handle_close), + ], + actions_alignment=ft.MainAxisAlignment.END, + on_dismiss=lambda e: page.add( + # 弹窗 + + ), + ) def QR(): # 获取 qq空间 二维码 url = 'https://ssl.ptlogin2.qq.com/ptqrshow?appid=549000912&e=2&l=M&s=3&d=72&v=4&t=0.8692955245720428&daid=5&pt_3rd_aid=0' @@ -116,6 +176,37 @@ def main(page: ft.Page): user_info.content.controls[0].src = f'http://q1.qlogo.cn/g?b=qq&nk={uin}&s=100' user_info.content.controls[1].value = info[uin][6] page.update() + + def get_user_messages(count): + for i in range(int(count / 100) + 1): + message = get_message(i * 100, 100).content.decode('utf-8') + time.sleep(0.2) + html = process_old_html(message) + if "li" not in html: + continue + soup = BeautifulSoup(html, 'html.parser') + for element in soup.find_all('li', class_='f-single f-s-s'): + put_time = None + text = None + img = None + friend_element = element.find('a', class_='f-name q_namecard') + # 获取好友昵称和QQ + if friend_element is not None: + friend_name = friend_element.get_text() + friend_qq = friend_element.get('link')[9:] + friend_link = friend_element.get('href') + if friend_qq not in [sublist[1] for sublist in all_friends]: + all_friends.append([friend_name, friend_qq, friend_link]) + time_element = element.find('div', class_='info-detail') + text_element = element.find('p', class_='txt-box-title ellipsis-one') + img_element = element.find('a', class_='img-item') + if time_element is not None and text_element is not None: + put_time = time_element.get_text().replace('\xa0', ' ') + text = text_element.get_text().replace('\xa0', ' ') + if img_element is not None: + img = img_element.find('img').get('src') + if text not in [sublist[1] for sublist in texts]: + texts.append([put_time, text, img]) # 路由改变函数 def change_route(e): @@ -134,12 +225,22 @@ def main(page: ft.Page): content_area.content = ft.Text("其他列表", size=30) elif selected_tab == "Pictures": content_area.content = ft.Text("图片列表", size=30) + elif selected_tab == "Logout": + page.open(dlg_modal) page.update() def unlock_tabs(): for tab in tabs.controls: tab.disabled = False + + def show_login_content(): + for content in content_area.content.controls: + if content.data == 'not_login': + content.visible = False + elif content.data == 'login': + content.visible = True + # 获取内容页面 def create_get_content_page(): base64_image = QR() @@ -176,8 +277,11 @@ def main(page: ft.Page): r = requests.get(url, cookies=cookies, allow_redirects=False) target_cookies = requests.utils.dict_from_cookiejar(r.cookies) page.session.set("user_cookies", target_cookies) + page.snack_bar = ft.SnackBar(ft.Text(f"登录成功,欢迎您 {target_cookies.get('uin')}"),duration=2000) + page.snack_bar.open = True get_login_user_info() unlock_tabs() + show_login_content() # p_skey = requests.utils.dict_from_cookiejar(r.cookies).get('p_skey') except Exception as e: print(e) @@ -194,8 +298,8 @@ def main(page: ft.Page): qr_status.value = "二维码状态:等待扫描" # 重置状态为等待扫描 page.update() - qr_image = ft.Image(src_base64=base64_image, width=200, height=200,fit=ft.ImageFit.CONTAIN) - qr_status = ft.Text("二维码状态:等待扫描", size=16, color="green") + qr_image = ft.Image(src_base64=base64_image, width=200, height=200,fit=ft.ImageFit.CONTAIN, data='not_login') + qr_status = ft.Text("二维码状态:等待扫描", size=16, color="green", data='not_login') def task(): while True: # 使用 in 分别检查多个条件 @@ -206,10 +310,16 @@ def main(page: ft.Page): time.sleep(2) thread = threading.Thread(target=task) thread.start() + content_items = ["内容1", "内容2", "内容3", "内容4","内容5","内容6"] + total_progress = 0.75 # 进度值 + + # 创建界面并添加卡片列表 + card_list_view = create_card_list_view(content_items, total_progress) # 返回一个包含二维码和状态更新的布局 return ft.Column( controls=[ - ft.Text("请使用手机QQ扫码登录", size=24, weight="bold"), + card_list_view, + ft.Text("请使用手机QQ扫码登录", size=24, weight="bold", data='not_login'), qr_image, # 展示二维码 qr_status, # 展示二维码状态 ft.Row( @@ -218,12 +328,98 @@ def main(page: ft.Page): ft.ElevatedButton("更新状态", on_click=update_qr_code_status), ], alignment=ft.MainAxisAlignment.CENTER, + data='not_login' ), ], alignment="center", horizontal_alignment="center", expand=True, ) + + def get_message(start, count): + cookies = page.session.get("user_cookies") + g_tk = bkn(cookies['p_skey']) + uin = re.sub(r'o0*', '', cookies.get('uin')) + params = { + 'uin': uin, + 'begin_time': '0', + 'end_time': '0', + 'getappnotification': '1', + 'getnotifi': '1', + 'has_get_key': '0', + 'offset': start, + 'set': '0', + 'count': count, + 'useutf8': '1', + 'outputhtmlfeed': '1', + 'scope': '1', + 'format': 'jsonp', + 'g_tk': [ + g_tk, + g_tk, + ], + } + + try: + response = requests.get( + 'https://user.qzone.qq.com/proxy/domain/ic2.qzone.qq.com/cgi-bin/feeds/feeds2_html_pav_all', + params=params, + cookies=cookies, + headers=headers, + timeout=(5, 10) # 设置连接超时为5秒,读取超时为10秒 + ) + except requests.Timeout: + return None + + return response + + def get_message_count(): + # 初始的总量范围 + lower_bound = 0 + upper_bound = 10000000 # 假设最大总量为1000000 + total = upper_bound // 2 # 初始的总量为上下界的中间值 + while lower_bound <= upper_bound: + response = get_message(total, 100) + if "li" in response.text: + # 请求成功,总量应该在当前总量的右侧 + lower_bound = total + 1 + else: + # 请求失败,总量应该在当前总量的左侧 + upper_bound = total - 1 + total = (lower_bound + upper_bound) // 2 # 更新总量为新的中间值 + return total + + def create_card_list_view(content_items, total_progress): + """ + 创建带有总进度条和卡片列表的Flet组件 + :param content_items: 一个列表,包含需要展示的内容 + :param total_progress: 获取内容的总进度值(0 到 1 之间的小数) + :return: 包含进度条和卡片列表的Flet组件 + """ + # 创建一个进度条组件,进度为 total_progress + progress_bar = ft.ProgressBar(value=total_progress, width=400) + + # 创建一个空的卡片列表,用于存放所有卡片 + card_list = ft.Column(scroll=ft.ScrollMode.AUTO) + + # 遍历 content_items 列表,为每个内容创建一个卡片并加入卡片列表 + for index, item in enumerate(content_items): + # 每个卡片展示内容的名称或信息 + card = create_card("https://picsum.photos/200", item, f"Content {index + 1}") + # 将卡片添加到卡片列表中 + card_list.controls.append(card) + + # 返回一个包含进度条和卡片列表的组件(Column 布局) + return ft.Column([ + ft.Text("正在获取消息列表数量...", style="headlineSmall"), # 标题 + progress_bar, # 进度条 + card_list, # 卡片列表 + ], + data='login', + visible=False + ) + + # 用户信息 user_info = ft.Container( content=ft.Column( @@ -238,8 +434,6 @@ def main(page: ft.Page): padding=20 ) - - # 左侧标签页 tabs = ft.Column( controls=[ @@ -250,30 +444,20 @@ def main(page: ft.Page): ft.ElevatedButton("转发列表", on_click=change_route, data="Forward", width=200, disabled=True), ft.ElevatedButton("其他列表", on_click=change_route, data="Other", width=200, disabled=True), ft.ElevatedButton("图片列表", on_click=change_route, data="Pictures", width=200, disabled=True), - ft.Column( - controls=[ - ft.TextButton("Powered by LibraHp", url="https://github.com/LibraHp"), - ft.TextButton("Bilibili @高数带我飞", url="https://space.bilibili.com/1117414477"), - ft.Text("程序完全免费且开源!", size=12, color="red", text_align="center") - ], - alignment="center", - horizontal_alignment="center", - width=200 - ) + ft.ElevatedButton("退出当前账号登录", on_click=change_route, data="Logout", width=200), + ft.TextButton("Powered by LibraHp", url="https://github.com/LibraHp", width=200), ], - scroll=True, alignment="start", spacing=10 ) - - # 左侧标签容器 left_panel = ft.Container( content=ft.Column( controls=[user_info, tabs], - spacing=30, - horizontal_alignment="start" + spacing=20, + horizontal_alignment="start", + scroll=ft.ScrollMode.HIDDEN ), width=220, bgcolor="#ffffff", @@ -297,7 +481,7 @@ def main(page: ft.Page): ), ], expand=True, - scroll=True + scroll=ft.ScrollMode.HIDDEN ), bgcolor="#ffffff", expand=True,