python实现在线音乐播放器(懒皮鼠音乐)
生活随笔
收集整理的這篇文章主要介紹了
python实现在线音乐播放器(懒皮鼠音乐)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
python實現在線音樂播放器(懶皮鼠音樂)
利用qt設計requests庫實現在線音樂播放
文章目錄
- python實現在線音樂播放器(懶皮鼠音樂)
- 前言
- 一、qt設計師設計界面
- 二、使用步驟
- 1.引入庫
- 2.讀入數據
- 3.控件信號函數綁定相應槽函數
- 4.搜索獲取音樂鏈接并播放
- 完整代碼
前言
本文主要提供使用python各種庫的注意事項,內容僅供參考。
提示:以下是本篇文章正文內容,下面案例可供參考
一、qt設計師設計界面
將設計的ui生成py文件
可以參照:https://blog.csdn.net/zq1391345114/article/details/120104695
二、使用步驟
1.引入庫
代碼如下(示例):
from PySide2.QtWidgets import QApplication,QWidget from PySide2.QtCore import QTimer#定時器 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.讀入數據
代碼如下(示例):
def __init__(self):#if not os.path.exists('data'):#判斷文件夾是否存在os.makedirs('data\music',exist_ok=True)super().__init__()# 使用ui文件導入定義界面類self.ui = Ui_Form()# 初始化界面self.ui.setupUi(self)該處省略綁定使用界
3.控件信號函數綁定相應槽函數
代碼如下(示例):
self.ui.pushButton.clicked.connect(self.sousuo)#sousuo不可以帶括號否則調試調用 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)#列表選中行修改信號 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表達式表示匿名函數傳參數
4.搜索獲取音樂鏈接并播放
在各個音樂網站獲取歌曲播放鏈接及時長,采用定時的方式播放下一曲音樂,這里是采用qt中的QwebEngineView實現在線播放
代碼如下(示例):
def bofang(self,m):if m==0:self.ui.web.setUrl("")#暫停第二界面播放i = self.ui.listWidget.currentRow() # 獲取選中序號m, s = self.music[i][2].strip().split(":")Time = int(m) * 60 + int(s) # 獲取歌曲時長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))#定時器綁定函數#timer.setSingleShot(True)#設置單次定時#QTimer.singleShot((Time+1)*1000, self.xia)#定時器self.timer.start((Time+2)*1000)#啟動或重新啟動定時器else:self.ui.webview.setUrl("")#暫停第一界面播放i = self.ui.listWidget_2.currentRow() # 獲取選中序號m, s = self.mylove[i][2].strip().split(":")Time = int(m) * 60 + int(s) # 獲取歌曲時長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)) # 定時器綁定函數self.timer.start((Time + 2) * 1000) # 啟動或重新啟動定時器這里可以看到
這里注意我注釋了很多代碼,他們都是不能正常之執行的。
我的本意是設置定時,歌曲播放完成后自動播放下一曲。那么有以下方法:
其次播放過程中實現動態突出正在播放的歌曲那么就要采用currentItemChanged信號
def change(self,item2,item1):item2.setBackgroundColor(QColor("red"))#設置選中行背景顏色if item1:item1.setBackgroundColor(QColor(0,0,0,0)) # 設置選中行背景顏色這里設置了判斷上一個item是否被選中。
## 5.下載
代碼如下(示例):
def xiazai(self):i = self.ui.listWidget.currentRow() # 獲取選中序號rid =self.music[i][1]downloadurl=self.huoqu(rid) # 根據rid獲取urltry:urllib.request.urlretrieve(url=downloadurl, filename='data/music/{}.mp3'.format(self.music[i][0]))QMessageBox.information(self,"消息", "下載成功.")except:QMessageBox.information(self,"消息", "下載錯誤,產生異常.")提示:這里下載路徑不存在就會下載失敗,所以我們在開始就要判斷下載路徑是否存在,不存在就要利用代碼os.makedirs('data\music',exist_ok=True)新建。
完整代碼
提示:源碼僅供參考。
from PySide2.QtWidgets import QApplication,QWidget from PySide2.QtCore import QTimer#定時器 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文件導入定義界面類self.ui = Ui_Form()# 初始化界面self.ui.setupUi(self)self.shuaxin()# 使用界面定義的控件,也是從ui里面訪問self.ui.pushButton.clicked.connect(self.sousuo)#sousuo不可以帶括號否則調試調用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)#列表選中行修改信號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"))#設置選中行背景顏色if item1:item1.setBackgroundColor(QColor(0,0,0,0)) # 設置選中行背景顏色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(保存收藏音樂信息,請勿隨意修改).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() # 獲取選中序號j=len(self.mylove)self.mylove[j]=self.music[i]s=open("data/my_love(保存收藏音樂信息,請勿隨意修改).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(保存收藏音樂信息,請勿隨意修改).txt"):s=open("data/my_love(保存收藏音樂信息,請勿隨意修改).txt",'r')content=s.read()s.close()p = re.compile(r'\[.*?\]')i=0for one in p.findall(content):self.mylove[i]=eval(one)#將字符串轉換成列表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) # 對字符串進行編碼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"} # 加入后會自動編碼res = requests.request('get', url, headers=headers, params=data, timeout=1)dict = json.loads(res.text)if dict['code'] != 200:misicinfo = [{'name': '獲取失敗,請重試!', '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,時長self.ui.listWidget.addItem( '【{}】'.format(i + 1) + name)#self.ui.listWidget.setCurrentRow(0)#默認選中第一行#self.ui.listWidget.item(1).setBackgroundColor(QColor('red'))#設置顏色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() # 獲取選中序號rid =self.music[i][1]downloadurl=self.huoqu(rid) # 根據rid獲取urltry:urllib.request.urlretrieve(url=downloadurl, filename='data/music/{}.mp3'.format(self.music[i][0]))QMessageBox.information(self,"消息", "下載成功.")except:QMessageBox.information(self,"消息", "下載錯誤,產生異常.")def bofang(self,m):if m==0:self.ui.web.setUrl("")#暫停第二界面播放i = self.ui.listWidget.currentRow() # 獲取選中序號m, s = self.music[i][2].strip().split(":")Time = int(m) * 60 + int(s) # 獲取歌曲時長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))#定時器綁定函數#timer.setSingleShot(True)#設置單次定時#QTimer.singleShot((Time+1)*1000, self.xia)#定時器self.timer.start((Time+2)*1000)#啟動或重新啟動定時器else:self.ui.webview.setUrl("")#暫停第一界面播放i = self.ui.listWidget_2.currentRow() # 獲取選中序號m, s = self.mylove[i][2].strip().split(":")Time = int(m) * 60 + int(s) # 獲取歌曲時長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)) # 定時器綁定函數self.timer.start((Time + 2) * 1000) # 啟動或重新啟動定時器def xia(self,m):if m==0:i = self.ui.listWidget.currentRow()+1 # 獲取選中序號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 # 獲取選中序號if i<0:#判斷是否是第一曲i=self.ui.listWidget.count()-1self.ui.listWidget.setCurrentRow(i)#修改選中項else:i = self.ui.listWidget_2.currentRow() - 1 # 獲取選中序號if i < 0: # 判斷是否是第一曲i = self.ui.listWidget_2.count() - 1self.ui.listWidget_2.setCurrentRow(i) # 修改選中項self.bofang(m) app = QApplication([]) mainw = MainWindow() mainw.show() app.exec_()微信關注公眾號懶皮鼠
總結
以上是生活随笔為你收集整理的python实现在线音乐播放器(懒皮鼠音乐)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysqldump用法
- 下一篇: 计算机绘图课程绘图模式主要有,关于“计算