import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.aliyuncs.DefaultAcsClient; import com.aliyuncs.IAcsClient; import com.aliyuncs.green.model.v20180509.VoiceAsyncScanResultsRequest; import com.aliyuncs.http.FormatType; import com.aliyuncs.http.HttpResponse; import com.aliyuncs.profile.DefaultProfile; import com.aliyuncs.profile.IClientProfile; import java.util.*; /** * 查询异步语音检测结果。 * * @author yinzuomei@elink-cn.com * @date 2020/12/8 22:08 */ public class VoiceAsyncScanResultsRequestSample extends BaseSample { public static void main(String[] args) throws Exception { // 请替换成您自己的AccessKey ID、AccessKey Secret。 IClientProfile profile = DefaultProfile .getProfile("cn-shanghai", "LTAI4G6Fv6uTzQbpsayATHq4", "QevMw1RYCwQUG3RSMPq1J6EAfmSblo"); final IAcsClient client = new DefaultAcsClient(profile); //提交语音异步检测任务后返回的taskId pollingScanResult(client, Arrays.asList("vc_f_7WZZ01BCH0q6ZnM3g1OKGG-1tAaZ7", "vc_f_6AKaBxy4HdG5bruQ0JwweV-1tAaJi")); // pollingScanResult(client, "vc_f_6AKaBxy4HdG5bruQ0JwweV-1tAaJi"); } public static void pollingScanResult(IAcsClient client, List taskIdList) throws InterruptedException { int failCount = 0; boolean stop = false; do { // 设置每10秒查询一次。 Thread.sleep(10 * 1000); JSONObject scanResult = getScanResult(client, taskIdList); System.out.println("接口完整返参:"+JSON.toJSONString(scanResult, true)); if (scanResult == null || 200 != scanResult.getInteger("code")) { failCount++; System.out.println("请求失败,get result fail, failCount=" + failCount); if (scanResult != null) { System.out.println("请求失败,错误信息errorMsg:" + scanResult.getString("msg")); } if (failCount > 20) { break; } continue; } JSONArray taskResults = scanResult.getJSONArray("data"); if (taskResults.isEmpty()) { System.out.println("请求成功,but data is empty"); break; } System.out.println("data.size=" + taskResults.size()); for (Object taskResult : taskResults) { JSONObject result = (JSONObject) taskResult; Integer code = result.getInteger("code"); String taskId = result.getString("taskId"); if (280 == code) { System.out.println("taskId=" + taskId + ": processing status: " + result.getString("msg")); } else if (200 == code) { System.out.println("taskId=" + taskId + "请求成功,返参:" + JSON.toJSONString(taskResult, true)); stop = true; } else { System.out.println("taskId=" + taskId + "请求失败,返参:" + JSON.toJSONString(taskResult, true)); stop = true; } } } while (!stop); } private static JSONObject getScanResult(IAcsClient client, List taskIdList) { VoiceAsyncScanResultsRequest getResultsRequest = new VoiceAsyncScanResultsRequest(); getResultsRequest.setAcceptFormat(FormatType.JSON); // 指定API返回格式。 getResultsRequest.setMethod(com.aliyuncs.http.MethodType.POST); // 指定请求方法。 getResultsRequest.setEncoding("utf-8"); getResultsRequest.setRegionId("cn-shanghai"); List> tasks = new ArrayList>(); for (String taskId : taskIdList) { Map task1 = new LinkedHashMap(); task1.put("taskId", taskId); tasks.add(task1); } /** * 请务必设置超时时间。 */ getResultsRequest.setConnectTimeout(3000); getResultsRequest.setReadTimeout(6000); try { getResultsRequest.setHttpContent(JSON.toJSONString(tasks).getBytes("UTF-8"), "UTF-8", FormatType.JSON); HttpResponse httpResponse = client.doAction(getResultsRequest); if (httpResponse.isSuccess()) { return JSON.parseObject(new String(httpResponse.getHttpContent(), "UTF-8")); } else { System.out.println("response not success. status: " + httpResponse.getStatus()); } } catch (Exception e) { e.printStackTrace(); } return null; } }