python实现在线音乐播放器(懒皮鼠音乐)
python實(shí)現(xiàn)在線音樂播放器(懶皮鼠音樂)
利用qt設(shè)計(jì)requests庫實(shí)現(xiàn)在線音樂播放
文章目錄
- python實(shí)現(xiàn)在線音樂播放器(懶皮鼠音樂)
- 前言
- 一、qt設(shè)計(jì)師設(shè)計(jì)界面
- 二、使用步驟
- 1.引入庫
- 2.讀入數(shù)據(jù)
- 3.控件信號(hào)函數(shù)綁定相應(yīng)槽函數(shù)
- 4.搜索獲取音樂鏈接并播放
- 完整代碼
前言
本文主要提供使用python各種庫的注意事項(xiàng),內(nèi)容僅供參考。
提示:以下是本篇文章正文內(nèi)容,下面案例可供參考
一、qt設(shè)計(jì)師設(shè)計(jì)界面
將設(shè)計(jì)的ui生成py文件
可以參照:https://blog.csdn.net/zq1391345114/article/details/120104695
二、使用步驟
1.引入庫
代碼如下(示例):
from PySide2.QtWidgets import QApplication,QWidget from PySide2.QtCore import QTimer#定時(shí)器 from PySide2.QtGui import QColor,QIcon import os import re import requests import json import urllib from ui_ma import Ui_Form from PySide2.QtWidgets import QMessageBox2.讀入數(shù)據(jù)
代碼如下(示例):
def __init__(self):#if not os.path.exists('data'):#判斷文件夾是否存在os.makedirs('data\music',exist_ok=True)super().__init__()# 使用ui文件導(dǎo)入定義界面類self.ui = Ui_Form()# 初始化界面self.ui.setupUi(self)該處省略綁定使用界
3.控件信號(hào)函數(shù)綁定相應(yīng)槽函數(shù)
代碼如下(示例):
self.ui.pushButton.clicked.connect(self.sousuo)#sousuo不可以帶括號(hào)否則調(diào)試調(diào)用 self.ui.pushButton_2.clicked.connect(self.my_love) self.ui.pushButton_3.clicked.connect(self.xiazai) self.ui.pushButton_4.clicked.connect(lambda :self.xia(0)) self.ui.pushButton_5.clicked.connect(lambda :self.shang(0)) self.ui.pushButton_6.clicked.connect(self.no_love) self.ui.pushButton_7.clicked.connect(lambda: self.shang(1)) self.ui.pushButton_8.clicked.connect(lambda: self.xia(1)) self.ui.pushButton_9.clicked.connect(self.exit) self.ui.lineEdit.returnPressed.connect(self.sousuo) """************************************************""" self.ui.listWidget_2.currentItemChanged.connect(self.change)#列表選中行修改信號(hào) self.ui.listWidget.currentItemChanged.connect(self.change)self.ui.listWidget.itemClicked.connect(lambda: self.bofang(0)) # 單擊播放 #self.ui.listWidget.itemDoubleClicked.connect(self.my_love) # 雙擊喜歡 #self.ui.listWidget_2.setCurrentRow(0) #self.ui.listWidget_2.itemDoubleClicked.connect(self.no_love)#雙擊取消收藏 self.ui.listWidget_2.itemPressed.connect(lambda: self.bofang(1)) # 單擊播放提示:該處使用了lambda表達(dá)式表示匿名函數(shù)傳參數(shù)
4.搜索獲取音樂鏈接并播放
在各個(gè)音樂網(wǎng)站獲取歌曲播放鏈接及時(shí)長,采用定時(shí)的方式播放下一曲音樂,這里是采用qt中的QwebEngineView實(shí)現(xiàn)在線播放
代碼如下(示例):
def bofang(self,m):if m==0:self.ui.web.setUrl("")#暫停第二界面播放i = self.ui.listWidget.currentRow() # 獲取選中序號(hào)m, s = self.music[i][2].strip().split(":")Time = int(m) * 60 + int(s) # 獲取歌曲時(shí)長rid = self.music[i][1]url = self.huoqu(rid)self.ui.webview.setUrl(url)self.timer = QTimer()#timer.stop()self.timer.timeout.connect(lambda:self.xia(0))#定時(shí)器綁定函數(shù)#timer.setSingleShot(True)#設(shè)置單次定時(shí)#QTimer.singleShot((Time+1)*1000, self.xia)#定時(shí)器self.timer.start((Time+2)*1000)#啟動(dòng)或重新啟動(dòng)定時(shí)器else:self.ui.webview.setUrl("")#暫停第一界面播放i = self.ui.listWidget_2.currentRow() # 獲取選中序號(hào)m, s = self.mylove[i][2].strip().split(":")Time = int(m) * 60 + int(s) # 獲取歌曲時(shí)長rid = self.mylove[i][1]url = self.huoqu(rid)self.ui.web.setUrl(url)self.timer = QTimer()self.timer.timeout.connect(lambda:self.xia(1)) # 定時(shí)器綁定函數(shù)self.timer.start((Time + 2) * 1000) # 啟動(dòng)或重新啟動(dòng)定時(shí)器這里可以看到
這里注意我注釋了很多代碼,他們都是不能正常之執(zhí)行的。
我的本意是設(shè)置定時(shí),歌曲播放完成后自動(dòng)播放下一曲。那么有以下方法:
其次播放過程中實(shí)現(xiàn)動(dòng)態(tài)突出正在播放的歌曲那么就要采用currentItemChanged信號(hào)
def change(self,item2,item1):item2.setBackgroundColor(QColor("red"))#設(shè)置選中行背景顏色if item1:item1.setBackgroundColor(QColor(0,0,0,0)) # 設(shè)置選中行背景顏色這里設(shè)置了判斷上一個(gè)item是否被選中。
## 5.下載
代碼如下(示例):
def xiazai(self):i = self.ui.listWidget.currentRow() # 獲取選中序號(hào)rid =self.music[i][1]downloadurl=self.huoqu(rid) # 根據(jù)rid獲取urltry:urllib.request.urlretrieve(url=downloadurl, filename='data/music/{}.mp3'.format(self.music[i][0]))QMessageBox.information(self,"消息", "下載成功.")except:QMessageBox.information(self,"消息", "下載錯(cuò)誤,產(chǎn)生異常.")提示:這里下載路徑不存在就會(huì)下載失敗,所以我們?cè)陂_始就要判斷下載路徑是否存在,不存在就要利用代碼os.makedirs('data\music',exist_ok=True)新建。
完整代碼
提示:源碼僅供參考。
from PySide2.QtWidgets import QApplication,QWidget from PySide2.QtCore import QTimer#定時(shí)器 from PySide2.QtGui import QColor,QIcon import os import re import requests import json import urllib from ui_ma import Ui_Form from PySide2.QtWidgets import QMessageBoxclass MainWindow(QWidget):music={}mylove={}def __init__(self):#if not os.path.exists('data'):#判斷文件夾是否存在os.makedirs('data\music',exist_ok=True)super().__init__()# 使用ui文件導(dǎo)入定義界面類self.ui = Ui_Form()# 初始化界面self.ui.setupUi(self)self.shuaxin()# 使用界面定義的控件,也是從ui里面訪問self.ui.pushButton.clicked.connect(self.sousuo)#sousuo不可以帶括號(hào)否則調(diào)試調(diào)用self.ui.pushButton_2.clicked.connect(self.my_love)self.ui.pushButton_3.clicked.connect(self.xiazai)self.ui.pushButton_4.clicked.connect(lambda :self.xia(0))self.ui.pushButton_5.clicked.connect(lambda :self.shang(0))self.ui.pushButton_6.clicked.connect(self.no_love)self.ui.pushButton_7.clicked.connect(lambda: self.shang(1))self.ui.pushButton_8.clicked.connect(lambda: self.xia(1))self.ui.pushButton_9.clicked.connect(self.exit)self.ui.lineEdit.returnPressed.connect(self.sousuo)"""************************************************"""self.ui.listWidget_2.currentItemChanged.connect(self.change)#列表選中行修改信號(hào)self.ui.listWidget.currentItemChanged.connect(self.change)self.ui.listWidget.itemClicked.connect(lambda: self.bofang(0)) # 單擊播放#self.ui.listWidget.itemDoubleClicked.connect(self.my_love) # 雙擊喜歡#self.ui.listWidget_2.setCurrentRow(0)#self.ui.listWidget_2.itemDoubleClicked.connect(self.no_love)#雙擊取消收藏self.ui.listWidget_2.itemPressed.connect(lambda: self.bofang(1)) # 單擊播放def change(self,item2,item1):item2.setBackgroundColor(QColor("red"))#設(shè)置選中行背景顏色if item1:item1.setBackgroundColor(QColor(0,0,0,0)) # 設(shè)置選中行背景顏色def exit(self):self.ui.webview.setUrl("")self.ui.web.setUrl("")self.timer.stop()def no_love(self):i=self.ui.listWidget_2.currentRow()for j in range(len(self.mylove)-i-1):self.mylove[i]=self.mylove[i+1]i+=1del self.mylove[i]s=open("data/my_love(保存收藏音樂信息,請(qǐng)勿隨意修改).txt","w")for j in range(len(self.mylove)):s.write(str(self.mylove[j]))s.close()self.shuaxin()def my_love(self):i = self.ui.listWidget.currentRow() # 獲取選中序號(hào)j=len(self.mylove)self.mylove[j]=self.music[i]s=open("data/my_love(保存收藏音樂信息,請(qǐng)勿隨意修改).txt",'a')s.write(str(self.music[i]))s.close()self.ui.listWidget_2.addItem('【{}】'.format(j+1) + self.mylove[j][0])def shuaxin(self):self.ui.listWidget_2.clear()if os.path.exists("data/my_love(保存收藏音樂信息,請(qǐng)勿隨意修改).txt"):s=open("data/my_love(保存收藏音樂信息,請(qǐng)勿隨意修改).txt",'r')content=s.read()s.close()p = re.compile(r'\[.*?\]')i=0for one in p.findall(content):self.mylove[i]=eval(one)#將字符串轉(zhuǎn)換成列表self.ui.listWidget_2.addItem('【{}】'.format(i + 1)+self.mylove[i][0])i+=1def sousuo(self): # 獲取下載ridmusicname = self.ui.lineEdit.text()encodename = urllib.parse.quote(musicname) # 對(duì)字符串進(jìn)行編碼url = 'https://www.kuwo.cn/api/www/search/searchMusicBykeyWord'headers = {"Cookie": "Hm_lvt_cdb524f42f0ce19b169a8071123a4797=1611813721; _ga=GA1.2.1711987833.1611813721; _gid=GA1.2.1936491096.1611813721; Hm_lpvt_cdb524f42f0ce19b169a8071123a4797=1611813751; _gat=1; kw_token=AMJKSZZ014","csrf": "AMJKSZZ014", "Host": "www.kuwo.cn","Referer": "http://www.kuwo.cn/search/list?key={}".format(encodename),"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36 Edg/88.0.705.53", }data = {"key": "{}".format(musicname), 'pn': 1, "rn": 30, "httpsStatus": 1,"reqId": " f1b198b0-612e-11eb-b682-25ec8c838219"} # 加入后會(huì)自動(dòng)編碼res = requests.request('get', url, headers=headers, params=data, timeout=1)dict = json.loads(res.text)if dict['code'] != 200:misicinfo = [{'name': '獲取失敗,請(qǐng)重試!', 'artist': ''}]else:misicinfo = dict['data']['list']self.ui.listWidget.clear()for i in range(len(misicinfo)):name = misicinfo[i]['name'] + '-' + misicinfo[i]['artist']self.music[i] = [name,misicinfo[i]['rid'],misicinfo[i]['songTimeMinutes']]#組建歌曲信息:名字,rid,時(shí)長self.ui.listWidget.addItem( '【{}】'.format(i + 1) + name)#self.ui.listWidget.setCurrentRow(0)#默認(rèn)選中第一行#self.ui.listWidget.item(1).setBackgroundColor(QColor('red'))#設(shè)置顏色def huoqu(self,rid): # 獲取urlurl = 'http://www.kuwo.cn/url?'data1 = {"format": "mp3","rid": "{}".format(rid),"response": "url","type": "convert_url3","br": "128kmp3","from": "web","t": 1611821852163,"httpsStatus": 1}header1 = {"User-Agent": "ozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36 Edg/88.0.705.53"}res1 = requests.get(url, headers=header1, params=data1, timeout=1)return json.loads(res1.text)['url']def xiazai(self):i = self.ui.listWidget.currentRow() # 獲取選中序號(hào)rid =self.music[i][1]downloadurl=self.huoqu(rid) # 根據(jù)rid獲取urltry:urllib.request.urlretrieve(url=downloadurl, filename='data/music/{}.mp3'.format(self.music[i][0]))QMessageBox.information(self,"消息", "下載成功.")except:QMessageBox.information(self,"消息", "下載錯(cuò)誤,產(chǎn)生異常.")def bofang(self,m):if m==0:self.ui.web.setUrl("")#暫停第二界面播放i = self.ui.listWidget.currentRow() # 獲取選中序號(hào)m, s = self.music[i][2].strip().split(":")Time = int(m) * 60 + int(s) # 獲取歌曲時(shí)長rid = self.music[i][1]url = self.huoqu(rid)self.ui.webview.setUrl(url)self.timer = QTimer()#timer.stop()self.timer.timeout.connect(lambda:self.xia(0))#定時(shí)器綁定函數(shù)#timer.setSingleShot(True)#設(shè)置單次定時(shí)#QTimer.singleShot((Time+1)*1000, self.xia)#定時(shí)器self.timer.start((Time+2)*1000)#啟動(dòng)或重新啟動(dòng)定時(shí)器else:self.ui.webview.setUrl("")#暫停第一界面播放i = self.ui.listWidget_2.currentRow() # 獲取選中序號(hào)m, s = self.mylove[i][2].strip().split(":")Time = int(m) * 60 + int(s) # 獲取歌曲時(shí)長rid = self.mylove[i][1]url = self.huoqu(rid)self.ui.web.setUrl(url)self.timer = QTimer()self.timer.timeout.connect(lambda:self.xia(1)) # 定時(shí)器綁定函數(shù)self.timer.start((Time + 2) * 1000) # 啟動(dòng)或重新啟動(dòng)定時(shí)器def xia(self,m):if m==0:i = self.ui.listWidget.currentRow()+1 # 獲取選中序號(hào)if i>=self.ui.listWidget.count():#判斷是否是最后一曲i=0self.ui.listWidget.setCurrentRow(i)else:i=self.ui.listWidget_2.currentRow()+1if i>=self.ui.listWidget_2.count():#判斷是否是最后一曲i=0self.ui.listWidget_2.setCurrentRow(i)self.bofang(m)def shang(self,m):if m==0:i = self.ui.listWidget.currentRow()-1 # 獲取選中序號(hào)if i<0:#判斷是否是第一曲i=self.ui.listWidget.count()-1self.ui.listWidget.setCurrentRow(i)#修改選中項(xiàng)else:i = self.ui.listWidget_2.currentRow() - 1 # 獲取選中序號(hào)if i < 0: # 判斷是否是第一曲i = self.ui.listWidget_2.count() - 1self.ui.listWidget_2.setCurrentRow(i) # 修改選中項(xiàng)self.bofang(m) app = QApplication([]) mainw = MainWindow() mainw.show() app.exec_()微信關(guān)注公眾號(hào)懶皮鼠
總結(jié)
以上是生活随笔為你收集整理的python实现在线音乐播放器(懒皮鼠音乐)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysqldump用法
- 下一篇: 计算机绘图课程绘图模式主要有,关于“计算