|
|
禁止求评分、诱导评分、互刷评分、互刷悬赏值,违规者封号处理。
禁止发布推广、邀请码、邀请链接、二维码或者有利益相关的任何推广行为。
所有非原创软件请发布在【精品软件区】,发帖必须按照本版块版规格式发帖。
论坛里音乐下载的好像没有界面,我试着用pyqt5作个界面,看好不好用
[mw_shl_code=python,true]from mp30620 import Ui_MainWindow
import sys
import os
from PyQt5 import QtCore
from PyQt5.QtCore import QThread, pyqtSignal,QCoreApplication
import requests
import json
import random
from PyQt5.QtWidgets import QDesktopWidget, QApplication, QFileDialog, QMessageBox, QTableWidgetItem
from PyQt5 import QtWidgets
def random_user():
user1 = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"
user2 = "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50"
user3 = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0;"
user4 = "Mozilla/5.0 (Windows NT 6.1; rv,2.0.1) Gecko/20100101 Firefox/4.0.1"
user5 = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; TencentTraveler 4.0)"
user6 = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; SE 2.X MetaSr 1.0; SE 2.X MetaSr 1.0; .NET CLR 2.0.50727; SE 2.X MetaSr 1.0)"
user7 = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)"
user8 = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Avant Browser)"
user = [user1, user2, user3, user4, user5, user6, user7, user8]
user = random.choice(user)
header = {"User-Agent": user}
return header
class BackendThread(QThread):
updata_data = pyqtSignal(str, int)
def __init__(self, parent=None):
super(BackendThread, self).__init__(parent)
def run_(self, url, muc_name, count):
self.url = url
self.muc_name = muc_name
self.count = count
def run(self):
reponse = requests.get(self.url, headers=random_user())
try:
if reponse.status_code == 200:
with open(self.muc_name, 'wb') as f:
for chunk in reponse.iter_content(chunk_size=512):
if chunk:
f.write(chunk)
cc=os.path.getsize(self.muc_name)
if cc<=970000:
os.remove(self.muc_name)
os.remove(self.muc_name.split('.')[-2]+'.lrc')
self.updata_data.emit('文件太小,下载失败!', self.count)
else:
self.updata_data.emit('下载成功!', self.count)
except:
self.updata_data.emit('下载失败!', self.count)
class firstfrom(QtWidgets.QMainWindow):
def __init__(self):
QtWidgets.QMainWindow.__init__(self)
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
self.ui.radioButton.setChecked(True)
self.ui.pushButton.clicked.connect(self.star_find)
self.ui.pushButton_4.clicked.connect(self.down)
self.ui.pushButton_2.clicked.connect(self.change_dir)
self.ui.checkBox.clicked.connect(self.check)
self.ui.pushButton_5.clicked.connect(QCoreApplication.instance().quit)
def check(self):
if self.ui.tableWidget.rowCount() != 0:
for i in range(0, self.ui.tableWidget.rowCount()):
self.ui.tableWidget.item(i, 0).setCheckState(self.ui.checkBox.checkState())
def change_dir(self):
dir_ = QFileDialog.getExistingDirectory(self, '选择文件夹', '/')
if dir_ != '':
self.ui.label_2.setText(dir_)
else:
self.ui.label_2.setText('./mp3')
def text_write(self, wrd, cont):
new_item = QTableWidgetItem(wrd)
new_item.setTextAlignment(QtCore.Qt.AlignCenter)
self.ui.tableWidget.setItem(cont, 4, new_item)
def down(self):
if self.ui.tableWidget.rowCount() == 0:
msg_box = QMessageBox(QMessageBox.Warning, '警告', '请先搜索歌曲!')
msg_box.exec_()
else:
if not os.path.exists(self.ui.label_2.text()):
os.mkdir(self.ui.label_2.text())
kk = self.ui.tableWidget.rowCount()
for num in range(0, kk):
if self.ui.tableWidget.item(num, 0).checkState() == 2:
new_item = QTableWidgetItem('正在下载')
new_item.setTextAlignment(QtCore.Qt.AlignCenter)
self.ui.tableWidget.setItem(num, 4, new_item )
muc_url = self.ui.tableWidget.item(num, 5).text()
muc_lrc = self.ui.tableWidget.item(num, 6).text().encode('utf-8')
muc_name = self.ui.label_2.text() + '/' + self.ui.tableWidget.item(num,
0).text() + '_' + self.ui.tableWidget.item(
num, 1).text() + '.' + muc_url.split('.')[-1]
count = num
if muc_lrc != '':
lrc_name = self.ui.label_2.text() + '/' + self.ui.tableWidget.item(num,
0).text() + '_' + self.ui.tableWidget.item(
num, 1).text() + '.lrc'
with open(lrc_name, 'wb') as f:
f.write(muc_lrc)
self.backend = BackendThread()
self.backend.run_(muc_url, muc_name, count)
self.backend.start()
self.backend.updata_data.connect(self.text_write)
def star_find(self):
if self.ui.lineEdit.text() == '':
msg_box = QMessageBox(QMessageBox.Warning, '警告', '请输入要搜索的关键词')
msg_box.exec_()
else:
self.ui.tableWidget.clear()
self.ui.tableWidget.setColumnCount(7)
self.ui.tableWidget.setColumnWidth(0, 250)
self.ui.tableWidget.setColumnWidth(1, 150)
self.ui.tableWidget.setColumnWidth(2, 100)
self.ui.tableWidget.setColumnWidth(3, 120)
self.ui.tableWidget.setColumnWidth(4, 120)
self.ui.tableWidget.setColumnWidth(5, 0)
self.ui.tableWidget.setColumnWidth(6, 0)
# self.ui.tableWidget.setRowCount(30)
self.ui.tableWidget.setHorizontalHeaderLabels(['歌曲名', '歌手信息', '歌曲时长', '歌曲尺寸', '下载状态'])
key_word = self.ui.lineEdit.text()
url = 'https://songsearch.kugou.com/song_search_v2?callback=jQuery112404852453033521309_1585374178035&keyword={}&page=1&pagesize=100&userid=-1&clientver=&platform=WebFilter&tag=em&filter=2&iscorrection=1&privilege_filter=0&_=1585374178039'.format(
key_word)
r = requests.get(url, headers=random_user())
r.encoding = r.apparent_encoding
JsonText = json.loads(str(r.text).strip('jQuery112404852453033521309_1585374178035(')[:-2])
m = 0
for i in JsonText["data"]["lists"]:
if self.ui.radioButton.isChecked() == True:
FileHash = i['SQFileHash']
elif self.ui.radioButton_2.isChecked() == True:
FileHash = i['FileHash']
AlbumID = i['AlbumID']
downurl = 'https://wwwapi.kugou.com/yy/index.php?r=play/getdata&callback=jQuery191012215974743400859_1585619590127&hash={}&album_id={}&dfid=0zI24KbQfP0cPOWD2MSu40&mid=415d42b77b039a48daf4f63d5b411ceb&platid=4&_=1585619590128'.format(
FileHash, AlbumID)
response = requests.get(downurl, headers=random_user())
if 'play_url' in response.text:
json_TEXt = json.loads(str(response.text).strip("jQuery19108584376284926096_1585328784250(")[:-2])[
'data']
url = json_TEXt['play_url']
if url != '':
m += 1
self.ui.tableWidget.setRowCount(m)
music_mane = json_TEXt['song_name']
singer = json_TEXt['author_name']
lyr = json_TEXt['lyrics']
music_time = str(int(json_TEXt['timelength']) // 60000) + '分' + str(
int(json_TEXt['timelength'] / 1000) % 60) + '秒'
music_size = round(int(json_TEXt['filesize']) / 1024 / 1024, 2)
new_item1 = QTableWidgetItem(music_mane)
new_item1.setTextAlignment(QtCore.Qt.AlignCenter)
new_item2 = QTableWidgetItem(singer)
new_item2.setTextAlignment(QtCore.Qt.AlignCenter)
new_item3 = QTableWidgetItem(music_time)
new_item3.setTextAlignment(QtCore.Qt.AlignCenter)
new_item4 = QTableWidgetItem(str(music_size) + 'MB')
new_item4.setTextAlignment(QtCore.Qt.AlignCenter)
new_item6 = QTableWidgetItem(url)
new_item6.setTextAlignment(QtCore.Qt.AlignCenter)
new_item7 = QTableWidgetItem(lyr)
new_item7.setTextAlignment(QtCore.Qt.AlignCenter)
self.ui.tableWidget.setItem(m-1, 0, QTableWidgetItem(new_item1))
self.ui.tableWidget.item(m-1, 0).setCheckState(0)
self.ui.tableWidget.setItem(m-1, 1, QTableWidgetItem(new_item2))
self.ui.tableWidget.setItem(m-1, 2, QTableWidgetItem(new_item3))
self.ui.tableWidget.setItem(m-1, 3, QTableWidgetItem(new_item4))
self.ui.tableWidget.setItem(m-1, 5, QTableWidgetItem(new_item6))
self.ui.tableWidget.setItem(m-1, 6, QTableWidgetItem(new_item7))
QApplication.processEvents()
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
w = firstfrom()
screen = QDesktopWidget().screenGeometry()
size = w.geometry()
w.setWindowTitle('全网音乐下载器')
left = (screen.width() - size.width()) / 2
hight = (screen.height() - size.height()) / 2
w.move(left, hight)
w.show()
sys.exit(app.exec_())[/mw_shl_code]
上面的是主程序代码,下面是界面的代码
[mw_shl_code=python,true]# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file '0501mp3.ui'
#
# Created by: PyQt5 UI code generator 5.15.4
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again. Do not edit this file unless you know what you are doing.
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(772, 528)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.tableWidget = QtWidgets.QTableWidget(self.centralwidget)
self.tableWidget.setGeometry(QtCore.QRect(0, 160, 791, 351))
self.tableWidget.setObjectName("tableWidget")
self.tableWidget.setColumnCount(0)
self.tableWidget.setRowCount(0)
self.groupBox = QtWidgets.QGroupBox(self.centralwidget)
self.groupBox.setGeometry(QtCore.QRect(550, 20, 201, 121))
self.groupBox.setObjectName("groupBox")
self.layoutWidget = QtWidgets.QWidget(self.groupBox)
self.layoutWidget.setGeometry(QtCore.QRect(20, 20, 161, 101))
self.layoutWidget.setObjectName("layoutWidget")
self.verticalLayout = QtWidgets.QVBoxLayout(self.layoutWidget)
self.verticalLayout.setContentsMargins(0, 0, 0, 0)
self.verticalLayout.setObjectName("verticalLayout")
self.radioButton = QtWidgets.QRadioButton(self.layoutWidget)
font = QtGui.QFont()
font.setFamily("楷体")
font.setPointSize(18)
self.radioButton.setFont(font)
self.radioButton.setObjectName("radioButton")
self.verticalLayout.addWidget(self.radioButton)
self.radioButton_2 = QtWidgets.QRadioButton(self.layoutWidget)
font = QtGui.QFont()
font.setFamily("楷体")
font.setPointSize(18)
self.radioButton_2.setFont(font)
self.radioButton_2.setObjectName("radioButton_2")
self.verticalLayout.addWidget(self.radioButton_2)
self.checkBox = QtWidgets.QCheckBox(self.centralwidget)
self.checkBox.setGeometry(QtCore.QRect(350, 110, 191, 31))
font = QtGui.QFont()
font.setFamily("楷体")
font.setPointSize(18)
self.checkBox.setFont(font)
self.checkBox.setObjectName("checkBox")
self.layoutWidget1 = QtWidgets.QWidget(self.centralwidget)
self.layoutWidget1.setGeometry(QtCore.QRect(10, 10, 521, 34))
self.layoutWidget1.setObjectName("layoutWidget1")
self.horizontalLayout = QtWidgets.QHBoxLayout(self.layoutWidget1)
self.horizontalLayout.setContentsMargins(0, 0, 0, 0)
self.horizontalLayout.setObjectName("horizontalLayout")
self.label = QtWidgets.QLabel(self.layoutWidget1)
font = QtGui.QFont()
font.setFamily("楷体")
font.setPointSize(16)
self.label.setFont(font)
self.label.setObjectName("label")
self.horizontalLayout.addWidget(self.label)
self.lineEdit = QtWidgets.QLineEdit(self.layoutWidget1)
self.lineEdit.setObjectName("lineEdit")
self.horizontalLayout.addWidget(self.lineEdit)
self.pushButton = QtWidgets.QPushButton(self.layoutWidget1)
font = QtGui.QFont()
font.setFamily("楷体")
font.setPointSize(18)
self.pushButton.setFont(font)
self.pushButton.setObjectName("pushButton")
self.horizontalLayout.addWidget(self.pushButton)
self.layoutWidget2 = QtWidgets.QWidget(self.centralwidget)
self.layoutWidget2.setGeometry(QtCore.QRect(10, 60, 521, 31))
self.layoutWidget2.setObjectName("layoutWidget2")
self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.layoutWidget2)
self.horizontalLayout_2.setContentsMargins(0, 0, 0, 0)
self.horizontalLayout_2.setObjectName("horizontalLayout_2")
self.pushButton_2 = QtWidgets.QPushButton(self.layoutWidget2)
font = QtGui.QFont()
font.setFamily("楷体")
font.setPointSize(16)
self.pushButton_2.setFont(font)
self.pushButton_2.setObjectName("pushButton_2")
self.horizontalLayout_2.addWidget(self.pushButton_2)
self.label_2 = QtWidgets.QLabel(self.layoutWidget2)
font = QtGui.QFont()
font.setFamily("楷体")
font.setPointSize(18)
self.label_2.setFont(font)
self.label_2.setObjectName("label_2")
self.horizontalLayout_2.addWidget(self.label_2)
self.layoutWidget3 = QtWidgets.QWidget(self.centralwidget)
self.layoutWidget3.setGeometry(QtCore.QRect(10, 110, 306, 33))
self.layoutWidget3.setObjectName("layoutWidget3")
self.horizontalLayout_4 = QtWidgets.QHBoxLayout(self.layoutWidget3)
self.horizontalLayout_4.setContentsMargins(0, 0, 0, 0)
self.horizontalLayout_4.setObjectName("horizontalLayout_4")
self.horizontalLayout_3 = QtWidgets.QHBoxLayout()
self.horizontalLayout_3.setObjectName("horizontalLayout_3")
self.pushButton_4 = QtWidgets.QPushButton(self.layoutWidget3)
font = QtGui.QFont()
font.setFamily("楷体")
font.setPointSize(16)
self.pushButton_4.setFont(font)
self.pushButton_4.setObjectName("pushButton_4")
self.horizontalLayout_3.addWidget(self.pushButton_4)
self.pushButton_5 = QtWidgets.QPushButton(self.layoutWidget3)
font = QtGui.QFont()
font.setFamily("楷体")
font.setPointSize(16)
self.pushButton_5.setFont(font)
self.pushButton_5.setObjectName("pushButton_5")
self.horizontalLayout_3.addWidget(self.pushButton_5)
self.horizontalLayout_4.addLayout(self.horizontalLayout_3)
MainWindow.setCentralWidget(self.centralwidget)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.groupBox.setTitle(_translate("MainWindow", "歌曲音质:"))
self.radioButton.setText(_translate("MainWindow", "无损音质"))
self.radioButton_2.setText(_translate("MainWindow", "高清音质"))
self.checkBox.setText(_translate("MainWindow", "全选/全不选"))
self.label.setText(_translate("MainWindow", "请输入要搜索的歌曲"))
self.pushButton.setText(_translate("MainWindow", "搜索"))
self.pushButton_2.setText(_translate("MainWindow", "保存路径选择"))
self.label_2.setText(_translate("MainWindow", "./mp3"))
self.pushButton_4.setText(_translate("MainWindow", "下载"))
self.pushButton_5.setText(_translate("MainWindow", "退出"))[/mw_shl_code]
都是在刚学习状态,大伙多多指教。下面是成品链接:
无损高清MP3下载
https://wws.lanzoui.com/ilMe0qjszdg
|
|