|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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格式的 |
-
|