日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python实现在线音乐播放器(懒皮鼠音乐)

發布時間:2024/1/1 python 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 QMessageBox

2.讀入數據

代碼如下(示例):

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) # 啟動或重新啟動定時器

這里可以看到
這里注意我注釋了很多代碼,他們都是不能正常之執行的。

我的本意是設置定時,歌曲播放完成后自動播放下一曲。那么有以下方法:

  • sleep睡眠機制,很顯然是行不通的,程序睡眠,歌曲也就不能播放。
  • 多線程機制sleep單個線程,pyqt是不允許多線程機制的,我百度了下早期的python會直接報錯,但是我這里沒有報錯,即使不用sleep睡眠,程序也會直接卡死。但是創建的子線程能夠正常輸出結果。
  • threading定時器,這個定時器的原理也是創建一個子線程,所以它仍然不可用。
  • QTimer定時器,它是pyqt中的定時器,可用。在我的代碼中有注釋掉一個QTimer,是因為他是一個成員變量,當點下一曲后上一個定時器還存在,所以后面就會出現歌曲沒有播放完就下一曲的情況,解決方法是采用類變量。所有定時器共用一個內存。
  • 其次播放過程中實現動態突出正在播放的歌曲那么就要采用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实现在线音乐播放器(懒皮鼠音乐)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。