rtc_backend/apps/music/management/commands/migrate_historical_tracks.py
repair-agent f1bead86f6
Some checks failed
Build and Deploy Backend / build-and-deploy (push) Failing after 56s
fix music
2026-02-12 17:35:54 +08:00

382 lines
13 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""
存量数据迁移:为 18682237028 账户导入历史 Track 记录
"""
from django.core.management.base import BaseCommand
from apps.users.models import User
from apps.music.models import Track
OSS_BASE = 'https://qy-rtc.oss-cn-beijing.aliyuncs.com'
DEFAULT_COVER = f'{OSS_BASE}/music/defaults/Capybara.png'
HISTORICAL_TRACKS = [
{
'title': '卡皮巴拉快乐趴',
'audio_url': f'{OSS_BASE}/music/generated/卡皮巴拉快乐趴.mp3',
'mood': 'custom',
'lyrics': (
'今天不上班\n'
'卡皮巴拉躺平在沙滩\n'
'小小太阳帽\n'
'草帽底下梦见一整片菜园 (好香哦)\n'
'一口咔咔青菜\n'
'两口嘎嘎胡萝卜\n'
'吃着吃着打个嗝\n'
'"我是不是一只蔬菜发动机?"\n'
'\n'
'卡皮巴拉啦啦啦\n'
'快乐像病毒一样传染呀\n'
'你一笑 它一哈\n'
'全场都在哈哈哈\n'
'卡皮巴拉吧啦吧\n'
'烦恼直接按下删除呀\n'
'一起躺 平平趴\n'
'世界马上变得好融化\n'
'\n'
'同桌小鸭鸭\n'
'排队要跟它合个影\n'
'河马举个牌\n'
'"主播别跑看这边一点" (比个耶)\n'
'它说"别催我\n'
'我在加载快乐进度条"\n'
'百分之一百满格\n'
'"叮——情绪已经自动修复"\n'
'\n'
'卡皮巴拉啦啦啦\n'
'快乐像病毒一样传染呀\n'
'你一笑 它一哈\n'
'全场都在哈哈哈\n'
'卡皮巴拉吧啦吧\n'
'烦恼直接按下删除呀\n'
'一起躺 平平趴\n'
'世界马上变得好融化\n'
'\n'
'作业山太高\n'
'先发一张可爱自拍\n'
'配文写:\n'
'"今天也被温柔的小动物拯救了嗷" (冲呀)\n'
'心情掉电时\n'
'就喊出那个暗号——\n'
'"三二一 一起喊"\n'
'"卡皮巴拉 拯救我!"\n'
'\n'
'卡皮巴拉啦啦啦\n'
'快乐像病毒一样传染呀\n'
'你一笑 它一哈\n'
'全场都在哈哈哈\n'
'卡皮巴拉吧啦吧\n'
'烦恼直接按下删除呀\n'
'小朋友 大朋友\n'
'跟着一起摇摆唱起歌\n'
'卡皮巴拉 卡皮巴拉\n'
'明天继续来给你治愈呀'
),
},
{
'title': '专注时刻',
'audio_url': f'{OSS_BASE}/music/generated/专注时刻_1770368018.mp3',
'mood': 'chill',
'lyrics': (
'专注时刻我来了,\n'
'咔咔在思考,世界多美妙。\n'
'咔咔咔咔,静心感受每一秒,\n'
'在这宁静中,找到内心的微笑。\n'
'(水花声...)'
),
},
{
'title': '书房咔咔茶',
'audio_url': f'{OSS_BASE}/music/generated/书房咔咔茶_1770637242.mp3',
'mood': 'chill',
'lyrics': (
'在书房角落里,我找到了安静\n'
'一杯茶香飘来,思绪开始飞腾\n'
'书页轻轻翻动,知识在心间\n'
'咔咔我在这里,享受这宁静\n'
'咔咔咔咔,独自享受\n'
'书中的世界,如此美妙\n'
'咔咔咔咔,心无旁骛\n'
'沉浸在知识的海洋,自在飞翔\n'
'窗外微风轻拂,阳光洒满书桌\n'
'咔咔我在这里,与文字共舞\n'
'每个字每个句,都像是音符\n'
'奏出心灵的乐章,如此动听\n'
'咔咔咔咔,独自享受\n'
'书中的世界,如此美妙\n'
'咔咔咔咔,心无旁骛\n'
'沉浸在知识的海洋,自在飞翔\n'
'(翻书声...风铃声...咔咔的呼吸声...)'
),
},
{
'title': '出去撒点野',
'audio_url': f'{OSS_BASE}/music/generated/出去撒点野_1770367350.mp3',
'mood': 'happy',
'lyrics': (
'咔咔咔咔去探险,草地上打个滚\n'
'阳光洒满身,心情像彩虹\n'
'出去撒点野,自由自在\n'
'咔咔的快乐,谁也挡不住\n'
'风吹过树梢,鸟儿在歌唱\n'
'咔咔的笑声,回荡在山岗\n'
'(咔咔的喘息声...)'
),
},
{
'title': '夜深了窗外下着小雨盖着被子准备入睡',
'audio_url': f'{OSS_BASE}/music/generated/夜深了窗外下着小雨盖着被子准备入睡_1770627405.mp3',
'mood': 'sleepy',
'lyrics': (
'窗外细雨轻敲窗,\n'
'被窝里温暖如常。\n'
'咔咔咔咔,梦乡近了,\n'
'小雨伴我入眠床。\n'
'(雨声和咔咔的呼吸声...)'
),
},
{
'title': '惊喜咔咔派',
'audio_url': f'{OSS_BASE}/music/generated/惊喜咔咔派_1770642290.mp3',
'mood': 'random',
'lyrics': '',
},
{
'title': '慵懒的午后泡在温泉里听水声发呆什么都不想',
'audio_url': f'{OSS_BASE}/music/generated/慵懒的午后泡在温泉里听水声发呆什么都不想_1770627905.mp3',
'mood': 'chill',
'lyrics': '',
},
{
'title': '洗脑咔咔舞',
'audio_url': f'{OSS_BASE}/music/generated/洗脑咔咔舞_1770631313.mp3',
'mood': 'happy',
'lyrics': (
'咔咔咔咔来跳舞,魔性旋律不停步\n'
'跟着节奏摇摆身,洗脑神曲不放手\n'
'重复的旋律像魔法,让人听了就上瘾\n'
'咔咔咔咔的魔力,谁也挡不住\n'
'洗脑咔咔舞,洗脑咔咔舞\n'
'魔性的旋律,让人停不下来\n'
'洗脑咔咔舞,洗脑咔咔舞\n'
'跟着咔咔一起跳,快乐无边\n'
'每个节拍都精准,咔咔的舞步最迷人\n'
'不管走到哪里去,都能听到这魔音\n'
'咔咔的舞蹈最独特,让人看了就想学\n'
'洗脑神曲的魅力,就是让人忘不掉\n'
'洗脑咔咔舞,洗脑咔咔舞\n'
'魔性的旋律,让人停不下来\n'
'洗脑咔咔舞,洗脑咔咔舞\n'
'跟着咔咔一起跳,快乐无边\n'
'咔咔咔咔,魔性洗脑舞\n'
'重复的节奏,快乐的旋律\n'
'洗脑咔咔舞,洗脑咔咔舞\n'
'让快乐无限循环,直到永远'
),
},
{
'title': '洗脑神曲',
'audio_url': f'{OSS_BASE}/music/generated/洗脑神曲_1770368465.mp3',
'mood': 'happy',
'lyrics': (
'咔咔咔咔,洗脑神曲来啦\n'
'洗脑洗脑,咔咔的节奏\n'
'跟着咔咔,摇摆身体\n'
'洗脑洗脑,咔咔的旋律\n'
'(咔咔的笑声...)'
),
},
{
'title': '温泉发呆曲',
'audio_url': f'{OSS_BASE}/music/generated/温泉发呆曲_1770639509.mp3',
'mood': 'chill',
'lyrics': (
'懒懒的午后阳光暖,\n'
'\n'
'温泉里我泡得欢。\n'
'\n'
'水声潺潺耳边响,\n'
'\n'
'什么都不想干。\n'
'\n'
'咔咔咔咔,发呆真好,\n'
'\n'
'懒懒的我,享受这秒。\n'
'\n'
'水波轻摇,心也飘,\n'
'\n'
'咔咔世界,别来无恙。\n'
'\n'
'想着云卷云又舒,\n'
'\n'
'温泉里的我多舒服。\n'
'\n'
'时间慢慢流,不急不徐,\n'
'\n'
'咔咔的梦,轻轻浮。\n'
'\n'
'咔咔咔咔,发呆真好,\n'
'\n'
'懒懒的我,享受这秒。\n'
'\n'
'水波轻摇,心也飘,\n'
'\n'
'咔咔世界,别来无恙。\n'
'\n'
'(水声渐渐远去...)'
),
},
{
'title': '温泉里的咔咔',
'audio_url': f'{OSS_BASE}/music/generated/温泉里的咔咔_1770730481.mp3',
'mood': 'chill',
'lyrics': (
'懒懒的午后阳光暖,\n'
'\n'
'温泉里我泡得欢。\n'
'\n'
'水声潺潺耳边响,\n'
'\n'
'什么都不想干。\n'
'\n'
'咔咔咔咔,悠然自得,\n'
'\n'
'水波荡漾心情悦。\n'
'\n'
'咔咔咔咔,闭上眼,\n'
'\n'
'享受这刻的宁静。\n'
'\n'
'想象自己是条鱼,\n'
'\n'
'在水里自由游来游去。\n'
'\n'
'没有烦恼没有压力,\n'
'\n'
'只有我和这温泉池。\n'
'\n'
'咔咔咔咔,悠然自得,\n'
'\n'
'水波荡漾心情悦。\n'
'\n'
'咔咔咔咔,闭上眼,\n'
'\n'
'享受这刻的宁静。\n'
'\n'
'(水花声...)\n'
'\n'
'咔咔,慵懒午后,\n'
'\n'
'水中世界最逍遥。'
),
},
{
'title': '睡个好觉',
'audio_url': f'{OSS_BASE}/music/generated/睡个好觉_1770371532.mp3',
'mood': 'sleepy',
'lyrics': (
'闭上眼睛 深呼吸\n'
'星星点灯 梦里飞\n'
'咔咔咔咔 好梦来\n'
'轻轻摇摆 梦中海\n'
'(轻柔的风声...)'
),
},
{
'title': '草地上的咔咔',
'audio_url': f'{OSS_BASE}/music/generated/草地上的咔咔_1770640911.mp3',
'mood': 'happy',
'lyrics': (
'阳光洒满地 绿草如茵间\n'
'咔咔跑起来 心情像飞燕\n'
'风儿轻拂过 花香满径边\n'
'快乐如此简单 每一步都新鲜\n'
'咔咔咔咔 快乐咔咔\n'
'草地上的我 自由自在\n'
'阳光下的舞 轻松又欢快\n'
'咔咔咔咔 快乐咔咔\n'
'无忧无虑的我 最爱这蓝天\n'
'蝴蝶翩翩起 蜜蜂忙采蜜\n'
'咔咔我最棒 每个瞬间都美丽\n'
'朋友在旁边 笑声传千里\n'
'这世界多美好 有你有我有草地\n'
'咔咔咔咔 快乐咔咔\n'
'草地上的我 自由自在\n'
'阳光下的舞 轻松又欢快\n'
'咔咔咔咔 快乐咔咔\n'
'无忧无虑的我 最爱这蓝天\n'
'(草地上咔咔的笑声...)'
),
},
{
'title': '阳光灿烂的日子在草地上奔跑撒欢心情超级好',
'audio_url': f'{OSS_BASE}/music/generated/阳光灿烂的日子在草地上奔跑撒欢心情超级好_1770639287.mp3',
'mood': 'happy',
'lyrics': '',
},
{
'title': '泡个热水澡',
'audio_url': f'{OSS_BASE}/music/generated/泡个热水澡_1770366369.mp3',
'mood': 'chill',
'lyrics': (
'躺在浴缸里 水汽氤氲起\n'
'闭上眼感受 温暖包围我\n'
'咔咔咔咔 我是咔咔\n'
'泡澡放松 快乐不假\n'
'(水花声...)'
),
},
]
class Command(BaseCommand):
help = '为 18682237028 账户导入历史 Track 记录15首'
def add_arguments(self, parser):
parser.add_argument(
'--dry-run',
action='store_true',
help='只显示将要创建的数据,不实际写入数据库',
)
def handle(self, *args, **options):
dry_run = options['dry_run']
phone = '18682237028'
try:
user = User.objects.get(phone=phone)
except User.DoesNotExist:
self.stderr.write(self.style.ERROR(f'用户 {phone} 不存在,请先创建账户'))
return
created_count = 0
skipped_count = 0
for item in HISTORICAL_TRACKS:
exists = Track.objects.filter(user=user, title=item['title']).exists()
if exists:
skipped_count += 1
self.stdout.write(f' 跳过(已存在): {item["title"]}')
continue
if dry_run:
self.stdout.write(f' [dry-run] 将创建: {item["title"]}')
created_count += 1
continue
Track.objects.create(
user=user,
title=item['title'],
lyrics=item['lyrics'],
audio_url=item['audio_url'],
cover_url=DEFAULT_COVER,
mood=item['mood'],
is_default=False,
generation_status='completed',
)
created_count += 1
self.stdout.write(f' 创建成功: {item["title"]}')
prefix = '[dry-run] ' if dry_run else ''
self.stdout.write(self.style.SUCCESS(
f'\n{prefix}完成!创建 {created_count} 首,跳过 {skipped_count}'
))