# code:utf-8
import sys
from PyQt5.Qt import *
from PyQt5.QtWidgets import QTableWidget, QPlainTextEdit,QApplication, QWidget, QPushButton
import requests
import json
import os
class MyTable(QTableWidget,QWidget):
def __init__(self, *args,**kwargs):
super(MyTable, self).__init__(*args,**kwargs)
self.setWindowTitle("酷我音乐下载器")
self.resize(800, 450)
self.setFixedSize(800,450)
self.setup_ui()
def setup_ui(self):
self.textLine()
self.table()
self.btn()
def table(self):
self.setColumnCount(2)
self.setRowCount(25)
self.setColumnWidth(0, 240)
self.setColumnWidth(1, 330)
self.setEditTriggers(QTableWidget.DoubleClicked)
column_name = [
'歌曲名称',
'歌曲作者',
]
self.setHorizontalHeaderLabels(column_name)
self.setContextMenuPolicy(
Qt.CustomContextMenu) # 右键菜单,如果不设为CustomContextMenu,无法使用customContextMenuRequested
self.customContextMenuRequested.connect(self.showContextMenu)
def textLine(self):
self.musicname = QPlainTextEdit(self)
self.musicname.resize(150, 32)
self.musicname.move(620, 100)
def btn(self):
self.btn_get = QPushButton(self)
self.btn_get.setText("搜索")
self.btn_get.move(650, 50)
self.btn_get.clicked.connect(self.find_music)
def showContextMenu(self):
self.contextMenu = QMenu(self)
self.actionA = self.contextMenu.addAction(u'下载歌曲')
self.contextMenu.popup(QCursor.pos())
self.index=self.currentRow()
self.actionA.triggered.connect(self.down_music)
self.contextMenu.show()
def down_music(self):
root = './downMusic/'
if not os.path.exists(root):
os.mkdir(root)
music_content = requests.get(url=self.music_url[self.index]).content
with open(root + "{}({}).mp3".format(self.music_list[self.index]['name'], self.music_list[self.index]['singer']), "wb") as f:
f.write(music_content)
QMessageBox.information(self, "提示", "歌曲下载完毕!", QMessageBox.Yes)
def find_music(self):
kw_txt = self.musicname.toPlainText()
self.btn_get.setEnabled(False)
kw=kw_txt.replace(" ","")
if kw!='':
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36 Edg/84.0.522.63",
"Cookie": "_ga=GA1.2.1083049585.1590317697; _gid=GA1.2.2053211683.1598526974; _gat=1; Hm_lvt_cdb524f42f0ce19b169a8071123a4797=1597491567,1598094297,1598096480,1598526974; Hm_lpvt_cdb524f42f0ce19b169a8071123a4797=1598526974; kw_token=HYZQI4KPK3P",
"Referer": "http://www.kuwo.cn/search/list?key=%E5%91%A8%E6%9D%B0%E4%BC%A6",
"csrf": "HYZQI4KPK3P",
}
params = {
"key": kw,
"pn": "1",
"rn": "25",
"httpsStatus": "1",
"reqId": "cc337fa0-e856-11ea-8e2d-ab61b365fb50",
}
self.music_list = []
self.music_url=[]
url = "http://www.kuwo.cn/api/www/search/searchMusicBykeyWord?"
res = requests.get(url=url, headers=headers, params=params)
if res.status_code==200:
res.encoding = "utf-8"
text = res.text
json_list = json.loads(text)
datapack = json_list["data"]["list"]
for i in datapack:
music_name = i["name"]
music_singer = i["artist"]
rid = i["rid"]
api_music = "http://www.kuwo.cn/url?format=mp3&rid={}&response=url&type=convert_url3" \
"&br=128kmp3&from=web&t=1598528574799&httpsStatus=1" \
"&reqId=72259df1-e85a-11ea-a367-b5a64c5660e5".format(rid)
api_res = requests.get(url=api_music)
music_url = json.loads(api_res.text)["url"]
print(music_name+" "+music_singer+" "+music_url)
music_dict = {}
music_dict["name"] = music_name
music_dict["singer"] = music_singer
self.music_list.append(music_dict)
self.music_url.append(music_url)
self.updateTable(self.music_list)
else:
QMessageBox.information(self, "提示", "网络出现故障!", QMessageBox.Yes)
else:
QMessageBox.information(self, "提示", "请输入歌曲名字", QMessageBox.Yes)
def updateTable(self,data):
if len(data)>0:
for row in range(0, len(data)):
name = data[row]['name']
self.setItem(row, 0, QTableWidgetItem(name))
for col in range(0, len(data)):
url = data[col]['singer']
self.setItem(col, 1, QTableWidgetItem(url))
QMessageBox.information(self, "提示", "歌曲搜索完毕!", QMessageBox.Yes)
else:
QMessageBox.information(self, "提示", "未查询到相关信息!", QMessageBox.Yes)
self.btn_get.setEnabled(True)
if __name__ == '__main__':
app = QApplication(sys.argv)
myTable = MyTable()
desktop = QApplication.desktop()
x = (desktop.width() - myTable.width()) // 2
y = (desktop.height() - myTable.height()) // 2
myTable.move(x,y)
myTable.show()
app.exit(app.exec_())
python-酷我音乐下载器
最新推荐文章于 2024-02-29 19:50:00 发布