|
|
@@ -0,0 +1,90 @@
|
|
|
+package com.izouma.nineth.service;
|
|
|
+
|
|
|
+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.TextScanRequest;
|
|
|
+import com.aliyuncs.http.FormatType;
|
|
|
+import com.aliyuncs.http.HttpResponse;
|
|
|
+import com.aliyuncs.profile.DefaultProfile;
|
|
|
+import com.aliyuncs.profile.IClientProfile;
|
|
|
+import com.izouma.nineth.config.AliyunProperties;
|
|
|
+import lombok.AllArgsConstructor;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.apache.commons.lang3.StringUtils;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+
|
|
|
+import java.nio.charset.StandardCharsets;
|
|
|
+import java.util.*;
|
|
|
+
|
|
|
+@Service
|
|
|
+@Slf4j
|
|
|
+@AllArgsConstructor
|
|
|
+public class ContentAuditService {
|
|
|
+ private AliyunProperties aliyunProperties;
|
|
|
+
|
|
|
+ public boolean auditText(String content) {
|
|
|
+ if (StringUtils.isBlank(content)) return true;
|
|
|
+ IClientProfile profile = DefaultProfile.getProfile("cn-shenzhen",
|
|
|
+ aliyunProperties.getAccessKeyId(), aliyunProperties.getAccessKeySecret());
|
|
|
+ DefaultProfile.addEndpoint("cn-shenzhen", "Green", "green.cn-shenzhen.aliyuncs.com");
|
|
|
+ IAcsClient client = new DefaultAcsClient(profile);
|
|
|
+ TextScanRequest textScanRequest = new TextScanRequest();
|
|
|
+ textScanRequest.setAcceptFormat(FormatType.JSON);
|
|
|
+ textScanRequest.setHttpContentType(FormatType.JSON);
|
|
|
+ textScanRequest.setMethod(com.aliyuncs.http.MethodType.POST);
|
|
|
+ textScanRequest.setEncoding("UTF-8");
|
|
|
+ textScanRequest.setRegionId("cn-shenzhen");
|
|
|
+ List<Map<String, Object>> tasks = new ArrayList<>();
|
|
|
+ Map<String, Object> task1 = new LinkedHashMap<>();
|
|
|
+ task1.put("dataId", UUID.randomUUID().toString());
|
|
|
+
|
|
|
+
|
|
|
+ task1.put("content", content);
|
|
|
+ tasks.add(task1);
|
|
|
+ JSONObject data = new JSONObject();
|
|
|
+
|
|
|
+ data.put("scenes", List.of("antispam"));
|
|
|
+ data.put("tasks", tasks);
|
|
|
+ textScanRequest.setHttpContent(data.toJSONString().getBytes(StandardCharsets.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(), StandardCharsets.UTF_8));
|
|
|
+ log.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为block表示命中了垃圾,可以通过label字段查看命中的垃圾分类。
|
|
|
+ log.info("scene = [" + scene + "]");
|
|
|
+ log.info("suggestion = [" + suggestion + "]");
|
|
|
+ if ("block".equals(suggestion)) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ log.info("task process fail:" + ((JSONObject) taskResult).getInteger("code"));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ log.info("detect not success. code:" + scrResponse.getInteger("code"));
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ log.info("response not success. status:" + httpResponse.getStatus());
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+}
|