项目地址https://github.com/jonssonyan...开发工具python3.7.9pycharm2019.3.5codeimportthreadingimporttimeimporttkinter.simpledialogfromtkinterimportEND,simpledialog,messageboximportrequestsclassDanmu():def__init__(self,room_id):#弹幕urlself.url='https://api.live.bilibili.com/xlive/web-room/v1/dM/gethistory'#请求头self.headers={'Host':'api.live.bilibili.com','User-Agent':'Mozilla/5.0(WindowsNT10.0;Win64;x64;rv:78.0)Gecko/20100101Firefox/78.0',}#定义POST传递的参数self.data={'roomid':room_id,'csrf_token':'','csrf':'','visit_id':'',}#日志写入对象self.log_file_write=open('danmu.log',mode='a',encoding='utf-8')#读取日志log_file_read=open('danmu.log',mode='r',encoding='utf-8')self.log=log_file_read.readlines()defget_danmu(self):#暂停0.5以防止CPU使用率过高time.sleep(1)#获取直播间的弹幕html=requests.post(url=self.url,headers=self.headers,data=self.data).json()#解析弹幕列表内容inhtml['data']['room']:#获取昵称nickname=content['nickname']#获取语音text=content['text']#获取语音时间timeline=content['timeline']#录制语音msg=timeline+''+nickname+':'+text#判断log中是否存在对应的message,若与上一条相同则打印保存ifmsg+'\n'notinself.log:#打印消息listb.insert(END,msg)listb.see(END)#保存日志self.log_file_write.write(msg+'\n')#添加到日志列表self.log.append(msg+'\n')#清除变量缓存nickname=''text=''timeline=''msg=''defbilibili(delay,room_id):#创建bDanmu实例bDanmu=Danmu(room_id)whileTrue:#Pauseto防止CPUtime.sleep(delay)#获取弹幕bDanmu.get_danmu()defauthor():#弹窗messagebox.showinfo(title='About',message='Author:AZhuangJonson\nDate:2021February4,2020\n微信公众号:科技猫')#tkinterGUIwindow=tkinter.Tk()window.title('哔哩哔哩弹幕查看工具')window.minsize(300,500)window.geometry('400x600+250+100')#菜单栏menubar=tkinter.Menu(window)#open放在菜单栏中,加载到容器中menubar.add_command(label='about',command=author)#创建菜单栏后,配置显示菜单栏menubarwindow.config(menu=menubar)#Scrollbarsc=tkinter.Scrollbar(window)sc.pack(side=tkinter.RIGHT,fill=tkinter.Y)#Listboxcontrollistb=tkinter.Listbox(window,yscrollcommand=sc.set)#在主窗口中放置组件listb.pack(side=tkinter.LEFT,fill=tkinter.BOTH,expand=True)#滚动条移动,列表跟随sc。config(command=listb.yview)#获取字符串(title,prompt,initialvalue)room_id=simpledialog.askstring(title='Pleaseentertheroomnumber',prompt='Pleaseentertheroomnumber:',initialvalue='21089733')ifroom_idisnotNone:#创建并获取弹幕线程try:t=threading.Thread(target=bilibili,args=(0.5,str(room_id),))t.setDaemon(True)t.start()except:print("错误:启动失败!请检查房间号是否正确")#进入循环显示window.mainloop()编译使用第三方包:pyinstaller命令pyinstaller-F-wbilibli-danmu.py参数说明-F,-onefile生成单个可执行文件-w,--windowed,--noconsolc指定命令行窗口不显示时程序正在运行(只对windows有效)PyInstaller支持的常用选项补充执行命令后,项目目录下会多出一个dist文件夹,编译后的文件就在这个文件夹下。pyinstaller不能跨平台编译,在windows下只能编译成可执行文件(.exe),maclinux也一样
