mirror of
https://github.com/Suxiaoqinx/Netease_url.git
synced 2026-10-02 18:08:05 +08:00
feat: 新增杜比全景声支持,重构Cookie管理与项目配置
- 添加前端页面的杜比全景声音质选择选项,更新后端音质参数验证列表 - 适配杜比全景声的编码格式,将dolby音质的encodeType设为mp4 - 重构Cookie管理模块:移除独立的cookie_manager.py,将Cookie读写、解析逻辑迁移至music_api.py,简化qr_login工具实现 - 更新Dockerfile,添加ffmpeg依赖以支持音频转码处理 - 更新requirements.txt依赖配置 - 更新使用文档,调整项目文件结构说明 - 优化项目依赖,移除冗余的cookie_manager模块依赖
This commit is contained in:
+53
-2
@@ -10,6 +10,7 @@
|
||||
"""
|
||||
|
||||
import json
|
||||
import os
|
||||
import urllib.parse
|
||||
import time
|
||||
from random import randrange
|
||||
@@ -177,10 +178,10 @@ class NeteaseAPI:
|
||||
payload = {
|
||||
'ids': [song_id],
|
||||
'level': quality,
|
||||
'encodeType': 'flac',
|
||||
'encodeType': 'mp4' if quality == 'dolby' else 'flac',
|
||||
'header': json.dumps(config),
|
||||
}
|
||||
|
||||
|
||||
if quality == 'sky':
|
||||
payload['immerseType'] = 'c51'
|
||||
|
||||
@@ -661,6 +662,56 @@ def qr_login() -> Optional[str]:
|
||||
return manager.qr_login()
|
||||
|
||||
|
||||
# ============ Cookie 工具 ============
|
||||
|
||||
DEFAULT_COOKIE_FILE = "cookie.txt"
|
||||
|
||||
|
||||
def load_cookies(path: str = DEFAULT_COOKIE_FILE) -> Dict[str, str]:
|
||||
"""从 cookie.txt 直接读取并解析为 dict
|
||||
|
||||
支持标准 ``NMTID=xxx; _ntes_nnid=xxx; ...`` 格式。
|
||||
文件不存在或解析失败返回空 dict(不抛异常,调用方决定如何处理)。
|
||||
"""
|
||||
if not os.path.isfile(path):
|
||||
return {}
|
||||
try:
|
||||
with open(path, "r", encoding="utf-8") as f:
|
||||
content = f.read().strip()
|
||||
except OSError:
|
||||
return {}
|
||||
return parse_cookie_string(content)
|
||||
|
||||
|
||||
def parse_cookie_string(cookie_string: str) -> Dict[str, str]:
|
||||
"""把 ``k1=v1; k2=v2`` 格式字符串解析为 dict
|
||||
|
||||
支持 ``;`` 或 ``\\n`` 作为分隔符。
|
||||
"""
|
||||
cookies: Dict[str, str] = {}
|
||||
if not cookie_string:
|
||||
return cookies
|
||||
cookie_string = cookie_string.strip()
|
||||
if not cookie_string:
|
||||
return cookies
|
||||
for sep in (";", "\n"):
|
||||
if sep in cookie_string:
|
||||
pairs = cookie_string.split(sep)
|
||||
break
|
||||
else:
|
||||
pairs = [cookie_string]
|
||||
for pair in pairs:
|
||||
pair = pair.strip()
|
||||
if not pair or "=" not in pair:
|
||||
continue
|
||||
key, value = pair.split("=", 1)
|
||||
key = key.strip()
|
||||
value = value.strip()
|
||||
if key and value:
|
||||
cookies[key] = value
|
||||
return cookies
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
# 测试代码
|
||||
print("网易云音乐API模块")
|
||||
|
||||
Reference in New Issue
Block a user