马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
互助团队月度奖(九月份)颁奖帖
https://fishc.com.cn/thread-183543-1-1.html
觉得一直在线很无聊?又没刷到新回复的帖子?试试下面这个吧
10秒刷新一次论坛(觉得太频繁的话,可以自行修改时间),有新回复的帖子,会弹窗,播放音乐
import requests
from bs4 import BeautifulSoup
import time
import tkinter as tk
from tkinter import messagebox
import pygame
import threading
import webbrowser
class Watch_html(tk.Tk):
def __init__(self):
super().__init__()
self.url = 'https://fishc.com.cn/forum.php?mod=forumdisplay&fid=173&filter=typeid&typeid=392'
self.headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36 Edg/86.0.622.56'}
self.result = ['', '']
self.link = ''
self.music_file = '提示.wav' # 音乐文件路径
self.main_run()
def Get_response(self):
response = requests.get(url=self.url, headers=self.headers)
html_str = response.content.decode('gbk')
return html_str
def Get_data(self, html_str):
soup = BeautifulSoup(html_str, 'lxml')
data = soup.find('table', id='threadlisttableid') # 所有主题的列表tags
data = data.contents[5] # 按照主题tbody的平行标签,查找第一个主题
data_name = data.th.contents[5].text # 帖子主题
data_link = data.th.contents[5]['href'] # 帖子链接
return data_name, data_link
def run(self):#获取帖子的程序
self.start_button['text']='已启动'#设置为已启动,显示状态
self.start_button.config(state=tk.DISABLED)#设置禁用状态
#计数程序
self.tk_var_num = tk.StringVar()
self.ctr = 0
#self.tk_var_num.set("0")
self.label_txt_num = tk.Label(self.frame,textvariable=self.tk_var_num)
self.label_txt_num.pack()
self.updater()
pygame.mixer.init() # 初始化音乐播放
pygame.mixer.music.load(self.music_file)
html_str = self.Get_response()
self.result[0], self.link = self.Get_data(html_str) # 获取第一次主题
while True: # 循环获取
time.sleep(10) # 设置循环刷新间隔
html_str = self.Get_response()
self.result[1], self.link = self.Get_data(html_str) # 获取新主题
print(self.result)
if self.result[0] != self.result[1]: # 将获取的主题做对比
pygame.mixer.music.play(-1, 0)
messagebox.showinfo('提示', '有新回复的帖子')
pygame.mixer.music.stop()
self.tk_var2.set(f'帖子主题为:{self.result[1]}')
self.tk_var3.set(f'帖子链接为:{self.link}')
self.result[0] = self.result[1] # 将第一个主题重新赋值
@staticmethod
def thread_it(func, *args):
'''将函数打包进线程'''
t = threading.Thread(target=func, args=args)
t.setDaemon(True)
t.start()
def open_url(self, event): # 此处必须注意,绑定的事件函数中必须要包含event参数
webbrowser.open(self.link, new=0)
def open_url_1(self, event): # 此处必须注意,绑定的事件函数中必须要包含event参数
url = 'https://fishc.com.cn/forum.php?mod=forumdisplay&fid=173&filter=typeid&typeid=392'
webbrowser.open(url, new=0)
def updater(self):#计数程序
if self.ctr < 10:
self.ctr += 1
self.tk_var_num.set(str(self.ctr))
self.after(1000, self.updater)
else:
self.ctr = 0
self.ctr += 1
self.tk_var_num.set(str(self.ctr))
self.after(1000, self.updater)
def main_run(self):#运行主程序
self.title('论坛新回复贴监控') # 定义顶层窗口的标题
self.frame = tk.Frame(self) # 建立框架frame,并把顶层窗口传进去
self.frame.pack(side=tk.LEFT, padx=60, pady=60) # 框架的自定义边框
self.tk_var1 = tk.StringVar()
self.tk_var1.set(f'鱼C论坛-python交流-问题求助')
self.label_txt1 = tk.Label(self.frame, textvariable=self.tk_var1)
self.label_txt1.pack()
self.label_txt1.bind("<Button-1>", self.open_url_1) # 绑定label单击事件
self.start_button = tk.Button(self.frame, height=3, width=10, text='启动', command=lambda: self.thread_it(self.run))
self.start_button.pack()
self.tk_var2 = tk.StringVar()
self.label_txt2 = tk.Label(self.frame,
textvariable=self.tk_var2,
wraplength=200, # 指定多行的对齐方式
justify='left' # 指定多行的对齐方式
)
self.label_txt2.pack()
self.tk_var3 = tk.StringVar()
self.label_txt3 = tk.Label(self.frame,
textvariable=self.tk_var3,
wraplength=200, # 指定多行的对齐方式
justify='left' # 指定多行的对齐方式
)
self.label_txt3.pack()
self.label_txt3.bind("<Button-1>", self.open_url) # 绑定label单击事件
if __name__ == '__main__':
watch_html = Watch_html()
watch_html.mainloop()
注:音乐要改成本地音乐,需要pyinstaller的话要用wav格式的 |