项目场景:
黑马头条day04教程中关于内容安全第三方接口部分已经失效,需要重写配置类,看到弹幕里小伙伴都直接跳过这里,给各位提供一个新版接口的解决方案。
问题描述
阿里云对内容安全做了升级,出了一个内容审核增强版(个人可以开通使用)。教程中的源码现在是1.0的调用接口(企业使用),运行后会报如下错误。
{
“code”:596,
“msg”:“You have not opened Yundun Content Moderation Service, please go to the page(https://www.aliyun.com/product/lvwang) to open our service after login Ali cloud console”,
“requestId”:“E664F410-D5F1-5CC0-81DE-5CA1248C53CF”
}
解决方案:
根据最新的官方文档自己重写包装类。
package com.heima.common.aliyun;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.aliyun.green20220302.models.TextModerationRequest;
import com.aliyun.green20220302.models.TextModerationResponse;
import com.aliyun.green20220302.Client;
import com.aliyun.green20220302.models.TextModerationResponseBody;
import com.aliyun.teaopenapi.models.Config;
import com.aliyun.teautil.models.RuntimeOptions;
import lombok.Getter;
import lombok.Setter;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.util.*;
@Getter
@Setter
@Component
@ConfigurationProperties(prefix = "aliyun")
public class GreenTextScan {
private String accessKeyId;
private String secret;
public Map greeTextScan(String content) throws Exception {
Config config = new Config();
config.setAccessKeyId(accessKeyId);
config.setAccessKeySecret(secret);
//接入区域和地址请根据实际情况修改
config.setRegionId("cn-shanghai");
config.setEndpoint("green-cip.cn-shanghai.aliyuncs.com");
//连接时超时时间,单位毫秒(ms)。
config.setReadTimeout(6000);
//读取时超时时间,单位毫秒(ms)。
config.setConnectTimeout(3000);
Client client = new Client(config);
// 创建RuntimeObject实例并设置运行参数。
RuntimeOptions runtime = new RuntimeOptions();
runtime.readTimeout = 10000;
runtime.connectTimeout = 10000;
//检测参数构造
JSONObject serviceParameters = new JSONObject();
serviceParameters.put("content", content);
//检测结果构造
Map<String,String> resultMap = new HashMap<>();
if (serviceParameters.get("content") == null || serviceParameters.getString("content").trim().length() == 0) {
resultMap.put("suggestion","检测内容为空");
System.out.println("text moderation content is empty");
return resultMap;
}
TextModerationRequest textModerationRequest = new TextModerationRequest();
/*
文本检测service:内容安全控制台文本增强版规则配置的serviceCode,示例:chat_detection
*/
textModerationRequest.setService("comment_detection");
textModerationRequest.setServiceParameters(serviceParameters.toJSONString());
try {
// 调用方法获取检测结果。
TextModerationResponse response = client.textModerationWithOptions(textModerationRequest, runtime);
// 自动路由。
if (response != null) {
// 服务端错误,区域切换到cn-beijing。
if (500 == response.getStatusCode() || (response.getBody() != null && 500 == (response.getBody().getCode()))) {
// 接入区域和地址请根据实际情况修改。
config.setRegionId("cn-beijing");
config.setEndpoint("green-cip.cn-beijing.aliyuncs.com");
client = new Client(config);
response = client.textModerationWithOptions(textModerationRequest, runtime);
}
}
// 打印检测结果。
if (response != null) {
if (response.getStatusCode() == 200) {
TextModerationResponseBody result = response.getBody();
System.out.println(JSON.toJSONString(result));
Integer code = result.getCode();
if (code != null && code == 200) {
TextModerationResponseBody.TextModerationResponseBodyData data = result.getData();
if (data.getLabels().isEmpty() && data.getReason().isEmpty()) {
resultMap.put("suggestion", "pass");
}else {
resultMap.put("suggestion","block");
resultMap.put("labels",data.getLabels());
resultMap.put("reason", data.getReason());
}
System.out.println("labels = [" + data.getLabels() + "]");
System.out.println("reason = [" + data.getReason() + "]");
} else {
System.out.println("text moderation not success. code:" + code);
}
} else {
System.out.println("response not success. status:" + response.getStatusCode());
}
}
} catch (Exception e) {
e.printStackTrace();
}
return resultMap;
}
}