添加GUI模式解析

This commit is contained in:
苏晓晴 2025-01-15 23:35:34 +08:00 committed by GitHub
parent ce9c060704
commit ced1295054
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

115
main.py
View File

@ -1,4 +1,5 @@
from flask import Flask, request, jsonify ,redirect ,Response import argparse
from flask import Flask, request, render_template, redirect, jsonify
import json import json
import os import os
import urllib.parse import urllib.parse
@ -45,7 +46,6 @@ def post(url, params, cookie):
response = requests.post(url, headers=headers, cookies=cookies, data={"params": params}) response = requests.post(url, headers=headers, cookies=cookies, data={"params": params})
return response.text return response.text
# 输入id选项
def ids(ids): def ids(ids):
if '163cn.tv' in ids: if '163cn.tv' in ids:
response = requests.get(ids, allow_redirects=False) response = requests.get(ids, allow_redirects=False)
@ -55,34 +55,26 @@ def ids(ids):
ids = ids[index:].split('&')[0] ids = ids[index:].split('&')[0]
return ids return ids
#转换文件大小
def size(value): def size(value):
units = ["B", "KB", "MB", "GB", "TB", "PB"] units = ["B", "KB", "MB", "GB", "TB", "PB"]
size = 1024.0 size = 1024.0
for i in range(len(units)): for i in range(len(units)):
if (value / size) < 1: if (value / size) < 1:
return "%.2f%s" % (value, units[i]) return "%.2f%s" % (value, units[i])
value = value / size value = value / size
return value return value
#转换音质
def music_level1(value): def music_level1(value):
if value == 'standard': levels = {
return "标准音质" 'standard': "标准音质",
elif value == 'exhigh': 'exhigh': "极高音质",
return "极高音质" 'lossless': "无损音质",
elif value == 'lossless': 'hires': "Hires音质",
return "无损音质" 'sky': "沉浸环绕声",
elif value == 'hires': 'jyeffect': "高清环绕声",
return "Hires音质" 'jymaster': "超清母带"
elif value == 'sky': }
return "沉浸环绕声" return levels.get(value, "未知音质")
elif value == 'jyeffect':
return "高清环绕声"
elif value == 'jymaster':
return "超清母带"
else:
return "未知音质"
def url_v1(id, level, cookies): def url_v1(id, level, cookies):
url = "https://interface3.music.163.com/eapi/song/enhance/player/url/v1" url = "https://interface3.music.163.com/eapi/song/enhance/player/url/v1"
@ -118,24 +110,23 @@ def url_v1(id, level, cookies):
return json.loads(response) return json.loads(response)
def name_v1(id): def name_v1(id):
#歌曲信息接口
urls = "https://interface3.music.163.com/api/v3/song/detail" urls = "https://interface3.music.163.com/api/v3/song/detail"
data = {'c': json.dumps([{"id":id,"v":0}])} data = {'c': json.dumps([{"id":id,"v":0}])}
response = requests.post(url=urls, data=data) response = requests.post(url=urls, data=data)
return response.json() return response.json()
def lyric_v1(id,cookies): def lyric_v1(id, cookies):
#歌词接口
url = "https://interface3.music.163.com/api/song/lyric" url = "https://interface3.music.163.com/api/song/lyric"
data = {'id' : id,'cp' : 'false','tv' : '0','lv' : '0','rv' : '0','kv' : '0','yv' : '0','ytv' : '0','yrv' : '0'} data = {'id': id, 'cp': 'false', 'tv': '0', 'lv': '0', 'rv': '0', 'kv': '0', 'yv': '0', 'ytv': '0', 'yrv': '0'}
response = requests.post(url=url, data=data, cookies=cookies) response = requests.post(url=url, data=data, cookies=cookies)
return response.json() return response.json()
# Flask 应用部分
app = Flask(__name__) app = Flask(__name__)
@app.route('/') @app.route('/', methods=['GET', 'POST'])
def hello_world(): def index():
return '你好,世界!' return render_template('index.html')
@app.route('/Song_V1', methods=['GET', 'POST']) @app.route('/Song_V1', methods=['GET', 'POST'])
def Song_v1(): def Song_v1():
@ -190,13 +181,61 @@ def Song_v1():
"level":music_level1(urlv1['data'][0]['level']), "level":music_level1(urlv1['data'][0]['level']),
"size": size(urlv1['data'][0]['size']), "size": size(urlv1['data'][0]['size']),
"url": song_url.replace("http://", "https://", 1), "url": song_url.replace("http://", "https://", 1),
"lyric": lyricv1.get('lrc', {}).get('lyric', '无歌词'), "lyric": lyricv1['lrc']['lyric'],
"tlyric": lyricv1.get('tlyric', {}).get('lyric', '无翻译歌词') "tlyric": lyricv1.get('tlyric', {}).get('lyric', None)
} }
data = Response(json.dumps(data), content_type='application/json') data = jsonify(data)
else: else:
data = jsonify({"status": 400,'msg': '解析失败!请检查参数是否完整!'}), 400 data = jsonify({"status": 400,'msg': '解析失败!请检查参数是否完整!'}), 400
return data return data
if __name__ == '__main__': def start_gui(url=None, level='lossless'):
if url:
print(f"正在处理 URL: {url},音质:{level}")
song_ids = ids(url)
cookies = parse_cookie(read_cookie())
urlv1 = url_v1(song_ids, level, cookies)
namev1 = name_v1(urlv1['data'][0]['id'])
lyricv1 = lyric_v1(urlv1['data'][0]['id'], cookies)
song_name = namev1['songs'][0]['name']
song_pic = namev1['songs'][0]['al']['picUrl']
artist_names = ', '.join(artist['name'] for artist in namev1['songs'][0]['ar'])
album_name = namev1['songs'][0]['al']['name']
music_quality = music_level1(urlv1['data'][0]['level'])
file_size = size(urlv1['data'][0]['size'])
music_url = urlv1['data'][0]['url']
lyrics = lyricv1['lrc']['lyric']
translated_lyrics = lyricv1.get('tlyric', {}).get('lyric', None)
output_text = f"""
歌曲名称: {song_name}
歌曲图片: {song_pic}
歌手: {artist_names}
专辑名称: {album_name}
音质: {music_quality}
大小: {file_size}
音乐链接: {music_url}
歌词: {lyrics}
翻译歌词: {translated_lyrics if translated_lyrics else '没有翻译歌词'}
"""
print(output_text)
else:
print("没有提供 URL 参数")
def start_api():
app.run(host='0.0.0.0', port=5000, debug=False) app.run(host='0.0.0.0', port=5000, debug=False)
# 启动模式解析
if __name__ == '__main__':
parser = argparse.ArgumentParser(description="启动 API 或 GUI")
parser.add_argument('--mode', choices=['api', 'gui'], help="选择启动模式api 或 gui")
parser.add_argument('--url', help="提供 URL 参数供 GUI 模式使用")
parser.add_argument('--level', default='jymaster', choices=['standard', 'exhigh', 'lossless', 'hires', 'sky', 'jyeffect', 'jymaster'], help="选择音质等级,默认是 lossless")
args = parser.parse_args()
if args.mode == 'api':
start_api()
elif args.mode == 'gui':
start_gui(args.url, args.level)