疾风怪盗 发表于 2020-10-31 13:03:56

论坛求助最新回复提醒

互助团队月度奖(九月份)颁奖帖
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# 按照主题tbody的平行标签,查找第一个主题
      data_name = data.th.contents.text# 帖子主题
      data_link = data.th.contents['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, self.link = self.Get_data(html_str)# 获取第一次主题

      while True:# 循环获取
            time.sleep(10)# 设置循环刷新间隔
            html_str = self.Get_response()
            self.result, self.link = self.Get_data(html_str)# 获取新主题
            print(self.result)
            if self.result != self.result:# 将获取的主题做对比
                pygame.mixer.music.play(-1, 0)
                messagebox.showinfo('提示', '有新回复的帖子')
                pygame.mixer.music.stop()
                self.tk_var2.set(f'帖子主题为:{self.result}')
                self.tk_var3.set(f'帖子链接为:{self.link}')
                self.result = self.result# 将第一个主题重新赋值

    @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格式的

风过无痕1989 发表于 2020-10-31 13:07:55

这是要做专业回答问题的节奏呀

疾风怪盗 发表于 2020-10-31 13:10:19

风过无痕1989 发表于 2020-10-31 13:07
这是要做专业回答问题的节奏呀

{:10_256:}给需要做专业回答问题的选手看的。。。。。。。

hrp 发表于 2020-10-31 13:37:08

这个可以有

weiter 发表于 2020-10-31 13:42:06

这个必须有!
虽然我也是业余……

疾风怪盗 发表于 2020-10-31 13:57:17

weiter 发表于 2020-10-31 13:42
这个必须有!
虽然我也是业余……

{:10_256:}都是业余的

疾风怪盗 发表于 2020-10-31 13:58:23

hrp 发表于 2020-10-31 13:37
这个可以有

简单小程序,随时关注论坛{:10_256:}

小可爱. 发表于 2020-10-31 14:29:03

疾风怪盗 发表于 2020-10-31 14:55:39

小可爱. 发表于 2020-10-31 14:29
好厉害呀这么怎么搞呀

简单的程序,代码在上面,自己看看呗

liuzhengyuan 发表于 2020-11-3 18:30:57

我也做过,(看我的日志)

https://fishc.com.cn/blog-566159-5875.html

疾风怪盗 发表于 2020-11-3 18:40:44

liuzhengyuan 发表于 2020-11-3 18:30
我也做过,(看我的日志)

https://fishc.com.cn/blog-566159-5875.html

嗯,类似的,你这还有回答数和时间,我就简单的判断了是否新回复

LuLD 发表于 2020-11-6 16:11:18

赶超 sun 大佬?

昨非 发表于 2020-11-6 17:37:40

LuLD 发表于 2020-11-6 16:11
赶超 sun 大佬?

应该是赶超zltzlt大佬{:10_256:}

疾风怪盗 发表于 2020-11-6 18:38:36

LuLD 发表于 2020-11-6 16:11
赶超 sun 大佬?

{:10_284:}这怎么赶超。。。。。。。。。。。。。没本法超越
页: [1]
查看完整版本: 论坛求助最新回复提醒