Ai_GirlFriend/test_music_links.py
2026-02-04 18:47:56 +08:00

132 lines
5.8 KiB
Python

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
测试音乐链接是否可用
"""
import requests
from concurrent.futures import ThreadPoolExecutor, as_completed
# 音乐列表
MUSIC_LIST = [
{"title": "Love", "url": "https://www.bensound.com/bensound-music/bensound-love.mp3"},
{"title": "Romantic", "url": "https://www.bensound.com/bensound-music/bensound-romantic.mp3"},
{"title": "Piano Moment", "url": "https://www.bensound.com/bensound-music/bensound-pianomoment.mp3"},
{"title": "Tenderness", "url": "https://www.bensound.com/bensound-music/bensound-tenderness.mp3"},
{"title": "Sweet", "url": "https://www.bensound.com/bensound-music/bensound-sweet.mp3"},
{"title": "A New Beginning", "url": "https://www.bensound.com/bensound-music/bensound-anewbeginning.mp3"},
{"title": "Memories", "url": "https://www.bensound.com/bensound-music/bensound-memories.mp3"},
{"title": "Once Again", "url": "https://www.bensound.com/bensound-music/bensound-onceagain.mp3"},
{"title": "Slowmotion", "url": "https://www.bensound.com/bensound-music/bensound-slowmotion.mp3"},
{"title": "Tomorrow", "url": "https://www.bensound.com/bensound-music/bensound-tomorrow.mp3"},
{"title": "Ukulele", "url": "https://www.bensound.com/bensound-music/bensound-ukulele.mp3"},
{"title": "Happy Rock", "url": "https://www.bensound.com/bensound-music/bensound-happyrock.mp3"},
{"title": "Summer", "url": "https://www.bensound.com/bensound-music/bensound-summer.mp3"},
{"title": "Sunny", "url": "https://www.bensound.com/bensound-music/bensound-sunny.mp3"},
{"title": "Little Idea", "url": "https://www.bensound.com/bensound-music/bensound-littleidea.mp3"},
{"title": "Cute", "url": "https://www.bensound.com/bensound-music/bensound-cute.mp3"},
{"title": "Funny Song", "url": "https://www.bensound.com/bensound-music/bensound-funnysong.mp3"},
{"title": "Jazzy Frenchy", "url": "https://www.bensound.com/bensound-music/bensound-jazzyfrenchy.mp3"},
{"title": "Acoustic Breeze", "url": "https://www.bensound.com/bensound-music/bensound-acousticbreeze.mp3"},
{"title": "Clear Day", "url": "https://www.bensound.com/bensound-music/bensound-clearday.mp3"},
{"title": "Relaxing", "url": "https://www.bensound.com/bensound-music/bensound-relaxing.mp3"},
{"title": "Calm", "url": "https://www.bensound.com/bensound-music/bensound-calm.mp3"},
{"title": "November", "url": "https://www.bensound.com/bensound-music/bensound-november.mp3"},
{"title": "Sad Day", "url": "https://www.bensound.com/bensound-music/bensound-sadday.mp3"},
{"title": "The Lounge", "url": "https://www.bensound.com/bensound-music/bensound-thelounge.mp3"},
{"title": "Inspire", "url": "https://www.bensound.com/bensound-music/bensound-inspire.mp3"},
{"title": "Dreams", "url": "https://www.bensound.com/bensound-music/bensound-dreams.mp3"},
{"title": "Perception", "url": "https://www.bensound.com/bensound-music/bensound-perception.mp3"},
{"title": "Moose", "url": "https://www.bensound.com/bensound-music/bensound-moose.mp3"},
{"title": "Night Owl", "url": "https://www.bensound.com/bensound-music/bensound-nightowl.mp3"},
]
def test_music_link(music):
"""测试单个音乐链接"""
try:
response = requests.head(music["url"], timeout=10, allow_redirects=True)
if response.status_code == 200:
size = int(response.headers.get('Content-Length', 0)) / (1024 * 1024) # MB
return {
"title": music["title"],
"status": "✓ 可用",
"size": f"{size:.2f} MB",
"code": response.status_code
}
else:
return {
"title": music["title"],
"status": "✗ 不可用",
"size": "N/A",
"code": response.status_code
}
except Exception as e:
return {
"title": music["title"],
"status": "✗ 错误",
"size": "N/A",
"code": str(e)
}
def main():
print("=" * 80)
print(" 测试音乐链接可用性")
print("=" * 80)
print()
print(f"总共 {len(MUSIC_LIST)} 首音乐")
print()
results = []
available_count = 0
unavailable_count = 0
# 使用线程池并发测试
with ThreadPoolExecutor(max_workers=10) as executor:
futures = {executor.submit(test_music_link, music): music for music in MUSIC_LIST}
for idx, future in enumerate(as_completed(futures), 1):
result = future.result()
results.append(result)
# 实时显示进度
status_icon = "" if result["status"] == "✓ 可用" else ""
print(f"[{idx}/{len(MUSIC_LIST)}] {status_icon} {result['title']:<25} {result['size']:<12} (HTTP {result['code']})")
if result["status"] == "✓ 可用":
available_count += 1
else:
unavailable_count += 1
# 统计结果
print()
print("=" * 80)
print(" 测试结果")
print("=" * 80)
print()
print(f"✓ 可用: {available_count}")
print(f"✗ 不可用: {unavailable_count}")
print(f"成功率: {available_count / len(MUSIC_LIST) * 100:.1f}%")
print()
if unavailable_count > 0:
print("=" * 80)
print(" 不可用的音乐")
print("=" * 80)
print()
for result in results:
if result["status"] != "✓ 可用":
print(f"{result['title']}: {result['code']}")
print()
if available_count == len(MUSIC_LIST):
print("🎉 所有音乐链接都可用!可以安全导入数据库。")
else:
print("⚠️ 部分音乐链接不可用,请检查后再导入。")
print()
if __name__ == "__main__":
main()