Ai_GirlFriend/test_external_music_api.py

247 lines
7.1 KiB
Python
Raw Normal View History

"""
测试音乐库外部链接 API
"""
import requests
import json
# 配置
BASE_URL = "http://localhost:30101"
# 需要替换为实际的 token
TOKEN = "your_token_here"
headers = {
"Authorization": f"Bearer {TOKEN}",
"Content-Type": "application/json"
}
def test_add_netease_music():
"""测试添加网易云音乐"""
print("\n=== 测试添加网易云音乐 ===")
data = {
"title": "七里香",
"artist": "周杰伦",
"platform": "netease",
"external_id": "186016",
"external_url": "https://music.163.com/#/song?id=186016",
"cover_url": "https://p1.music.126.net/P1ciTpERjRdYqk1v7MD05w==/109951163076136658.jpg",
"duration": 300
}
try:
response = requests.post(
f"{BASE_URL}/music/add-external",
headers=headers,
json=data
)
print(f"状态码: {response.status_code}")
print(f"响应: {json.dumps(response.json(), indent=2, ensure_ascii=False)}")
return response.json()
except Exception as e:
print(f"错误: {e}")
return None
def test_add_qq_music():
"""测试添加 QQ 音乐"""
print("\n=== 测试添加 QQ 音乐 ===")
data = {
"title": "稻香",
"artist": "周杰伦",
"platform": "qq",
"external_id": "003aAYrm3GE0Ac",
"external_url": "https://y.qq.com/n/ryqq/songDetail/003aAYrm3GE0Ac",
"cover_url": "https://y.gtimg.cn/music/photo_new/T002R300x300M000003Nz2So3XXYek.jpg",
"duration": 223
}
try:
response = requests.post(
f"{BASE_URL}/music/add-external",
headers=headers,
json=data
)
print(f"状态码: {response.status_code}")
print(f"响应: {json.dumps(response.json(), indent=2, ensure_ascii=False)}")
return response.json()
except Exception as e:
print(f"错误: {e}")
return None
def test_add_kugou_music():
"""测试添加酷狗音乐"""
print("\n=== 测试添加酷狗音乐 ===")
data = {
"title": "青花瓷",
"artist": "周杰伦",
"platform": "kugou",
"external_id": "sample_id",
"external_url": "https://www.kugou.com/song/#hash=sample",
"cover_url": "",
"duration": 230
}
try:
response = requests.post(
f"{BASE_URL}/music/add-external",
headers=headers,
json=data
)
print(f"状态码: {response.status_code}")
print(f"响应: {json.dumps(response.json(), indent=2, ensure_ascii=False)}")
return response.json()
except Exception as e:
print(f"错误: {e}")
return None
def test_get_music_library():
"""测试获取音乐库列表"""
print("\n=== 测试获取音乐库列表 ===")
try:
response = requests.get(
f"{BASE_URL}/music/library?page=1&page_size=10",
headers=headers
)
print(f"状态码: {response.status_code}")
result = response.json()
print(f"总数: {result.get('data', {}).get('total', 0)}")
# 显示前 5 条
music_list = result.get('data', {}).get('list', [])
print(f"\n{min(5, len(music_list))} 首音乐:")
for i, music in enumerate(music_list[:5], 1):
print(f"\n{i}. {music.get('title')} - {music.get('artist')}")
print(f" 类型: {music.get('upload_type')}")
if music.get('external_platform'):
print(f" 平台: {music.get('external_platform')}")
print(f" 链接: {music.get('external_url')}")
else:
print(f" 链接: {music.get('music_url')[:50]}...")
return result
except Exception as e:
print(f"错误: {e}")
return None
def test_get_my_music():
"""测试获取我的音乐"""
print("\n=== 测试获取我的音乐 ===")
try:
response = requests.get(
f"{BASE_URL}/music/my?page=1&page_size=10",
headers=headers
)
print(f"状态码: {response.status_code}")
result = response.json()
print(f"总数: {result.get('data', {}).get('total', 0)}")
# 按类型统计
music_list = result.get('data', {}).get('list', [])
type_count = {}
for music in music_list:
upload_type = music.get('upload_type')
type_count[upload_type] = type_count.get(upload_type, 0) + 1
print("\n按类型统计:")
for upload_type, count in type_count.items():
print(f" {upload_type}: {count}")
return result
except Exception as e:
print(f"错误: {e}")
return None
def test_invalid_platform():
"""测试无效的平台"""
print("\n=== 测试无效的平台 ===")
data = {
"title": "测试歌曲",
"artist": "测试歌手",
"platform": "invalid_platform",
"external_id": "123",
"external_url": "https://example.com/song/123",
"cover_url": "",
"duration": 200
}
try:
response = requests.post(
f"{BASE_URL}/music/add-external",
headers=headers,
json=data
)
print(f"状态码: {response.status_code}")
print(f"响应: {json.dumps(response.json(), indent=2, ensure_ascii=False)}")
return response.json()
except Exception as e:
print(f"错误: {e}")
return None
def main():
"""主函数"""
print("=" * 60)
print("音乐库外部链接 API 测试")
print("=" * 60)
# 检查 token
if TOKEN == "your_token_here":
print("\n⚠️ 警告: 请先设置有效的 TOKEN")
print(" 1. 登录应用获取 token")
print(" 2. 修改此脚本中的 TOKEN 变量")
print(" 3. 重新运行测试")
return
# 运行测试
tests = [
("添加网易云音乐", test_add_netease_music),
("添加 QQ 音乐", test_add_qq_music),
("添加酷狗音乐", test_add_kugou_music),
("获取音乐库列表", test_get_music_library),
("获取我的音乐", test_get_my_music),
("测试无效平台", test_invalid_platform),
]
results = []
for name, test_func in tests:
try:
result = test_func()
success = result and result.get('code') == 200
results.append((name, success))
except Exception as e:
print(f"\n测试 {name} 时出错: {e}")
results.append((name, False))
# 显示测试结果
print("\n" + "=" * 60)
print("测试结果汇总")
print("=" * 60)
for name, success in results:
status = "✅ 通过" if success else "❌ 失败"
print(f"{status} - {name}")
# 统计
passed = sum(1 for _, success in results if success)
total = len(results)
print(f"\n总计: {passed}/{total} 通过")
if passed == total:
print("\n🎉 所有测试通过!")
else:
print(f"\n⚠️ 有 {total - passed} 个测试失败")
if __name__ == "__main__":
main()