This commit is contained in:
@@ -89,32 +89,34 @@ class AliyunTingwuService:
|
|||||||
# 根据官方文档,离线任务的 type 通常就是 'offline'
|
# 根据官方文档,离线任务的 type 通常就是 'offline'
|
||||||
request.add_query_param('type', 'offline')
|
request.add_query_param('type', 'offline')
|
||||||
|
|
||||||
# AppKey
|
# 构造请求体 (Body)
|
||||||
request.add_query_param('AppKey', self.tingwu_app_key)
|
# 根据听悟 API 文档,AppKey, Input, Parameters 应位于 JSON Body 中
|
||||||
|
# 而不是 Query Parameter
|
||||||
# 配置 Input
|
body = {
|
||||||
input_param = {
|
"AppKey": self.tingwu_app_key,
|
||||||
"FileUrl": file_url,
|
"Input": {
|
||||||
"SourceLanguage": language,
|
"FileUrl": file_url,
|
||||||
"TaskKey": str(uuid.uuid4())
|
"SourceLanguage": language,
|
||||||
}
|
"TaskKey": str(uuid.uuid4())
|
||||||
request.add_query_param('Input', json.dumps(input_param))
|
|
||||||
|
|
||||||
# 配置 Parameters (开启自动章节和摘要)
|
|
||||||
parameters = {
|
|
||||||
"Transcoding": {
|
|
||||||
"TargetAudioFormat": "mp3"
|
|
||||||
},
|
},
|
||||||
"AutoChaptersEnabled": True,
|
"Parameters": {
|
||||||
"SummarizationEnabled": True
|
"Transcoding": {
|
||||||
|
"TargetAudioFormat": "mp3"
|
||||||
|
},
|
||||||
|
"AutoChaptersEnabled": True,
|
||||||
|
"SummarizationEnabled": True
|
||||||
|
}
|
||||||
}
|
}
|
||||||
request.add_query_param('Parameters', json.dumps(parameters))
|
|
||||||
|
# 设置 Body 内容
|
||||||
|
request.set_content(json.dumps(body))
|
||||||
|
request.add_header('Content-Type', 'application/json')
|
||||||
|
|
||||||
# 强制设置 Endpoint,避免 SDK.EndpointResolvingError
|
# 强制设置 Endpoint,避免 SDK.EndpointResolvingError
|
||||||
# 听悟目前主要服务点在北京
|
# 听悟目前主要服务点在北京
|
||||||
request.set_endpoint("tingwu.cn-beijing.aliyuncs.com")
|
request.set_endpoint("tingwu.cn-beijing.aliyuncs.com")
|
||||||
|
|
||||||
# 显式设置 Method 为 POST,因为 SDK 默认可能是 PUT (针对 CreateTask)
|
# 显式设置 Method 为 PUT
|
||||||
request.set_method('PUT')
|
request.set_method('PUT')
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
|||||||
@@ -102,7 +102,12 @@ class TranscriptionTaskViewSet(viewsets.ModelViewSet):
|
|||||||
# 3. 调用听悟接口创建任务
|
# 3. 调用听悟接口创建任务
|
||||||
try:
|
try:
|
||||||
tingwu_response = service.create_transcription_task(oss_url)
|
tingwu_response = service.create_transcription_task(oss_url)
|
||||||
task_id = tingwu_response.get('TaskId')
|
|
||||||
|
# 兼容处理响应结构,通常为 {"Data": {"TaskId": "...", ...}}
|
||||||
|
if 'Data' in tingwu_response and isinstance(tingwu_response['Data'], dict):
|
||||||
|
task_id = tingwu_response['Data'].get('TaskId')
|
||||||
|
else:
|
||||||
|
task_id = tingwu_response.get('TaskId')
|
||||||
|
|
||||||
if task_id:
|
if task_id:
|
||||||
task_record.task_id = task_id
|
task_record.task_id = task_id
|
||||||
@@ -152,13 +157,19 @@ class TranscriptionTaskViewSet(viewsets.ModelViewSet):
|
|||||||
service = AliyunTingwuService()
|
service = AliyunTingwuService()
|
||||||
try:
|
try:
|
||||||
result = service.get_task_info(task.task_id)
|
result = service.get_task_info(task.task_id)
|
||||||
task_status = result.get('TaskStatus')
|
|
||||||
|
# 兼容处理响应结构 {"Data": {"TaskStatus": "...", "Result": ...}}
|
||||||
|
data_obj = result.get('Data', result)
|
||||||
|
if not isinstance(data_obj, dict):
|
||||||
|
data_obj = result
|
||||||
|
|
||||||
|
task_status = data_obj.get('TaskStatus')
|
||||||
|
|
||||||
if task_status == 'COMPLETE':
|
if task_status == 'COMPLETE':
|
||||||
task.status = TranscriptionTask.Status.SUCCEEDED
|
task.status = TranscriptionTask.Status.SUCCEEDED
|
||||||
|
|
||||||
# 解析结果
|
# 解析结果
|
||||||
task_result = result.get('Result', {})
|
task_result = data_obj.get('Result', {})
|
||||||
|
|
||||||
# 提取逐字稿
|
# 提取逐字稿
|
||||||
sentences = task_result.get('Transcription', {}).get('Sentences', [])
|
sentences = task_result.get('Transcription', {}).get('Sentences', [])
|
||||||
@@ -190,7 +201,7 @@ class TranscriptionTaskViewSet(viewsets.ModelViewSet):
|
|||||||
|
|
||||||
elif task_status == 'FAILED':
|
elif task_status == 'FAILED':
|
||||||
task.status = TranscriptionTask.Status.FAILED
|
task.status = TranscriptionTask.Status.FAILED
|
||||||
task.error_message = result.get('TaskStatusText', 'Unknown error')
|
task.error_message = data_obj.get('TaskStatusText', result.get('Message', 'Unknown error'))
|
||||||
task.save()
|
task.save()
|
||||||
|
|
||||||
# 其他状态 (PENDING, RUNNING) 不做更改
|
# 其他状态 (PENDING, RUNNING) 不做更改
|
||||||
|
|||||||
Reference in New Issue
Block a user