版本: 1.0.0 | 最后更新: 2025年3月27日
本文档描述了MV生成API的使用方法,包括请求参数、响应格式和代码示例。
生产一个MV为¥59.00元
所有API请求需要在Header中包含以下认证信息:
Authorization: [联系管理员获得的APIKEY] Salt: [随机6位数字]
创建新的音乐视频
参数 | 类型 | 是否必需 | 描述 |
---|---|---|---|
img_url | string | 是 | 人物形象URL(清晰正脸半身或全身照,衣着不能过于暴露,服饰不能有蓝色,头部距照片顶部距离不宜过大) |
mp3_url | string | 是 | 音频文件URL |
srt_url | string | 是 | 字幕文件URL |
video_url | string | 是 | 背景视频URL(当值为""时由ai自动生成) |
key1 | string | 是 | 音乐关键字1 在“airplane,animals,business,car,clouds,dance,drink,drive earth,family,fashion,fire,flower,funny,kiss,light,love, motorcycle,night,rain,road,romance,sea,smoke,snow,sport,street,trains”中选三个最符合歌词意境的作为关键词 |
key2 | string | 是 | 音乐关键字2 |
key3 | string | 是 | 音乐关键字3 |
sex | string | 是 | 演唱者性别(男、女) |
message为success,代表已经成功开始生产MV,这时候才会扣除费用。 响应代码:200 { "downloadurl": "http://47.121.217.1/uploads/MV_6946297691.mp4", "info": "已下达了视频生产命令", "message": "success", "task_id": "MY-taskid6946297691" }
message为failed,代表请求已失败,失败的原因包括令牌无效、费用不足以支付视频生产、照片未通过检测等,可参考info返回的内容 响应代码:200 { "info": "照片未通过检测", "message": "failed", "task_id": "1234" }
响应代码不是200,可能是网络波动或者是超时等原因引起,需要重新发起请求(注:重新发起请求但salt得保持和上次请求的一致,否则可能导致多次扣费) 响应代码:400 { "info": "任务已接收,正在处理", "message": "pending", "task_id": "1234" }
import requests import random import time def generate_random_salt(): """生成随机 salt 值""" return str(random.randint(100000, 999999)) def make_api_request_with_retry(max_retries=10, retry_delay=5): """ 发送 POST 请求并支持重试 参数: max_retries: 最大重试次数 (默认10次) retry_delay: 重试间隔秒数 (默认5秒) """ url = "https://ai.qingyunvip.cn/new_full_mv_create" # 请求参数 params = { "img_url": "http://www.qingyunvip.cn/uploads/image123.png",#MV主角照片下载地址 "mp3_url": "http://www.qingyunvip.cn/uploads/audio123.mp3",#MV歌曲下载地址 "srt_url": "http://www.qingyunvip.cn/uploads/srt123.srt",#歌曲字幕文件下载地址 "video_url":"",#背景视频下载地址,可为空 "key1": "love",#歌曲关键词1 "key2": "fire",#歌曲关键词2 "key3": "night",#歌曲关键词3 "sex": "男"#演唱者性别 } # 请求头 headers = { "authorization": "APIKEY_248349582",#管理员处获取的apikey "salt": generate_random_salt(),#随机数 "Content-Type": "application/x-www-form-urlencoded" } for attempt in range(max_retries): try: print(f"尝试第 {attempt + 1} 次请求...") response = requests.post( url, data=params, headers=headers, timeout=100 # 设置超时时间 ) # 打印响应信息 print(f"HTTP 状态码: {response.status_code}") print(f"响应内容: {response.text}") # 如果成功则返回响应 if response.status_code == 200: return response # 如果不是200,等待后重试 if attempt < max_retries - 1: print(f"请求失败,{retry_delay}秒后重试...") time.sleep(retry_delay) except requests.exceptions.RequestException as e: print(f"请求异常: {str(e)}") if attempt < max_retries - 1: print(f"{retry_delay}秒后重试...") time.sleep(retry_delay) print(f"请求失败,已达最大重试次数 {max_retries} 次") return None # 调用函数发送请求 response = make_api_request_with_retry() # 处理最终响应 if response and response.status_code == 200: print("请求成功!") print(response.json()) # 如果是JSON响应 else: print("请求最终失败")
获取MV生产状态
参数 | 类型 | 是否必需 | 描述 |
---|---|---|---|
task_id | string | 是 | 生产视频时获取的任务id |
downloadurl | string | 是 | 生产视频时获取的临时下载地址 |
openid | string | 是 | 自定义的id,便于日志查询 |
success为True,代表视频已经可以下载。 响应代码:200 { "success":True,#视频可以下载 "videoUrl":"https://ai.qingyunvip.cn/uploads/MV_12345.mp4",#视频下载地址 "info":"succeeded"#提示信息 }
success为False,代表视频还在生产中,或者已生产失败 响应代码:200 { "success":False,#视频还未就绪 "info":"TIMEOUT"#视频生产已超时,代表已失败 }
success为False,代表视频还在生产中,或者已生产失败 响应代码:200 { "success":False,#视频还未就绪 "info":"PENDING"#视频还在生产中 }
代码 | 描述 | 解决方案 |
---|---|---|
400 | 网络波动 | 尝试重新发起请求 |