import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.aliyun.oss.ClientException;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.green.model.v20180509.TextScanRequest;
import com.aliyuncs.http.FormatType;
import com.aliyuncs.http.HttpResponse;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.profile.IClientProfile;
import lombok.Data;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.context.annotation.Configuration;
import java.util.*;
/**
* 功能:阿里云文本垃圾检测
* @Date 2021/12/27
* @Version 1.0
*/
@Configuration
@ConfigurationProperties(prefix = "app")
@RefreshScope
@Data
public class ALiYunCheckText {
/**
* 阿里云 AccessKey ID 和 AccessKey Secret
*/
private String accessKeyID;
private String accessKeySecret;
/**
* 日志信息
*/
private Logger logger = LoggerFactory.getLogger(ALiYunCheckText.class);
public Map checkText(String content) throws Exception {
IClientProfile profile = DefaultProfile
.getProfile("cn-shanghai", accessKeyID, accessKeySecret);
DefaultProfile
.addEndpoint("cn-shanghai", "Green", "green.cn-shanghai.aliyuncs.com");
IAcsClient client = new DefaultAcsClient(profile);
TextScanRequest textScanRequest = new TextScanRequest();
textScanRequest.setAcceptFormat(FormatType.JSON); // 指定API返回格式。
textScanRequest.setHttpContentType(FormatType.JSON);
textScanRequest.setMethod(com.aliyuncs.http.MethodType.POST); // 指定请求方法。
textScanRequest.setEncoding("UTF-8");
textScanRequest.setRegionId("cn-shanghai");
List<Map<String, Object>> tasks = new ArrayList<Map<String, Object>>();
Map<String, Object> task1 = new LinkedHashMap<String, Object>();
task1.put("dataId", UUID.randomUUID().toString());
/**
* 待检测的文本,长度不超过10000个字符。
*/
task1.put("content", content);
tasks.add(task1);
JSONObject data = new JSONObject();
/**
* 检测场景。文本垃圾检测请传递antispam。
**/
data.put("scenes", Arrays.asList("antispam"));
data.put("tasks", tasks);
logger.info(JSON.toJSONString(data, true));
textScanRequest.setHttpContent(data.toJSONString().getBytes("UTF-8"), "UTF-8", FormatType.JSON);
//设置超时时间。
textScanRequest.setConnectTimeout(3000);
textScanRequest.setReadTimeout(6000);
try {
HttpResponse httpResponse = client.doAction(textScanRequest);
if (httpResponse.isSuccess()) {
JSONObject scrResponse = JSON.parseObject(new String(httpResponse.getHttpContent(), "UTF-8"));
logger.info(JSON.toJSONString(scrResponse, true));
if (200 == scrResponse.getInteger("code")) {
JSONArray taskResults = scrResponse.getJSONArray("data");
for (Object taskResult : taskResults) {
if (200 == ((JSONObject) taskResult).getInteger("code")) {
JSONArray sceneResults = ((JSONObject) taskResult).getJSONArray("results");
for (Object sceneResult : sceneResults) {
String scene = ((JSONObject) sceneResult).getString("scene");
String suggestion = ((JSONObject) sceneResult).getString("suggestion");
// 根据scene和suggetion做相关处理。
// suggestion==pass表示未命中垃圾、suggestion==review表示人工审核、suggestion==block表示命中了垃圾,可以通过label字段查看命中的垃圾分类。
logger.info("args = [" + scene + "]");
logger.info("args = [" + suggestion + "]");
Map<String, String> map = new HashMap<>();
map.put("results",taskResults.toJSONString());
map.put("suggestion",suggestion);
return map;
}
} else {
logger.info("task process fail:" + ((JSONObject) taskResult).getInteger("code"));
}
}
} else {
logger.info("detect not success. code:" + scrResponse.getInteger("code"));
}
} else {
logger.info("response not success. status:" + httpResponse.getStatus());
}
} catch (ServerException e) {
logger.error(e.getMessage());
} catch (ClientException e) {
logger.error(e.getMessage());
} catch (Exception e) {
logger.error(e.getMessage());
}
return null;
}
}
Java 阿里云文本垃圾检测
最新推荐文章于 2024-12-10 17:38:02 发布