文章审核自动化
1.文本垃圾內容檢測
試用阿里云的內容安全檢測來做我們的文本,圖片的檢測
1.1使用方法如下:
@Getter @Setter @Configuration @ConfigurationProperties(prefix="aliyun") @PropertySource("classpath:aliyun.properties") public class AliyunTextScanRequest {private String accessKey;private String secret;public String textScanRequest(String content) throws Exception {IClientProfile profile = DefaultProfile.getProfile("cn-shanghai", accessKey, secret);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);System.out.println(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"));System.out.println(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字段查看命中的垃圾分類System.out.println("args = [" + scene + "]");System.out.println("args = [" + suggestion + "]");return suggestion;}}else{System.out.println("task process fail:" + ((JSONObject)taskResult).getInteger("code"));}}} else {System.out.println("detect not success. code:" + scrResponse.getInteger("code"));}}else{System.out.println("response not success. status:" + httpResponse.getStatus());}} catch (ClientException e) {e.printStackTrace();} catch (Exception e) {e.printStackTrace();}return null;} }編寫配置類掃描阿里云Config,同時編寫測試類AliTest{
@Autowired
private AliyunTextScanRequest aliyunTextScanRequest;
}
2.圖片審核
圖片審核,有兩種方式,第一種放一個url,第二種方式傳一個本地的圖片到程序中進行檢測創建工具類:com.common.aliyun.AliyunImageScanRequest
@Getter @Setter @Configuration @ConfigurationProperties(prefix="aliyun") @PropertySource("classpath:aliyun.properties") public class AliyunImageScanRequest {private String accessKey;private String secret;public String imageScanRequest(List<String> images) throws Exception {IClientProfile profile = DefaultProfile.getProfile("cn-shanghai",accessKey,secret);DefaultProfile.addEndpoint("cn-shanghai", "cn-shanghai", "Green", "green.cn-shanghai.aliyuncs.com");IAcsClient client = new DefaultAcsClient(profile);ImageSyncScanRequest imageSyncScanRequest = new ImageSyncScanRequest();// 指定api返回格式imageSyncScanRequest.setAcceptFormat(FormatType.JSON);// 指定請求方法imageSyncScanRequest.setMethod(MethodType.POST);imageSyncScanRequest.setEncoding("utf-8");//支持http和httpsimageSyncScanRequest.setProtocol(ProtocolType.HTTP);JSONObject httpBody = new JSONObject();/*** 設置要檢測的場景, 計費是按照該處傳遞的場景進行* 一次請求中可以同時檢測多張圖片,每張圖片可以同時檢測多個風險場景,計費按照場景計算* 例如:檢測2張圖片,場景傳遞porn,terrorism,計費會按照2張圖片鑒黃,2張圖片暴恐檢測計算* porn: porn表示色情場景檢測*/httpBody.put("scenes", Arrays.asList("logo","porn","ad","terrorism"));/*** 設置待檢測圖片, 一張圖片一個task,* 多張圖片同時檢測時,處理的時間由最后一個處理完的圖片決定。* 通常情況下批量檢測的平均rt比單張檢測的要長, 一次批量提交的圖片數越多,rt被拉長的概率越高* 這里以單張圖片檢測作為示例, 如果是批量圖片檢測,請自行構建多個task*/List<JSONObject> list = new ArrayList<JSONObject>();for (String image : images) {JSONObject task = new JSONObject();task.put("dataId", UUID.randomUUID().toString());//設置圖片鏈接為上傳后的urltask.put("url", image);task.put("time", new Date());list.add(task);}httpBody.put("tasks", list);imageSyncScanRequest.setHttpContent(org.apache.commons.codec.binary.StringUtils.getBytesUtf8(httpBody.toJSONString()),"UTF-8", FormatType.JSON);/*** 請設置超時時間, 服務端全鏈路處理超時時間為10秒,請做相應設置* 如果您設置的ReadTimeout 小于服務端處理的時間,程序中會獲得一個read timeout 異常*/imageSyncScanRequest.setConnectTimeout(3000);imageSyncScanRequest.setReadTimeout(10000);HttpResponse httpResponse = null;try {httpResponse = client.doAction(imageSyncScanRequest);} catch (Exception e) {e.printStackTrace();}//服務端接收到請求,并完成處理返回的結果if (httpResponse != null && httpResponse.isSuccess()) {JSONObject scrResponse = JSON.parseObject(org.apache.commons.codec.binary.StringUtils.newStringUtf8(httpResponse.getHttpContent()));System.out.println(JSON.toJSONString(scrResponse, true));int requestCode = scrResponse.getIntValue("code");//每一張圖片的檢測結果JSONArray taskResults = scrResponse.getJSONArray("data");if (200 == requestCode) {for (Object taskResult : taskResults) {//單張圖片的處理結果int taskCode = ((JSONObject) taskResult).getIntValue("code");//圖片要檢測的場景的處理結果, 如果是多個場景,則會有每個場景的結果JSONArray sceneResults = ((JSONObject) taskResult).getJSONArray("results");if (200 == taskCode) {for (Object sceneResult : sceneResults) {String scene = ((JSONObject) sceneResult).getString("scene");String suggestion = ((JSONObject) sceneResult).getString("suggestion");//根據scene和suggetion做相關處理//do somethingSystem.out.println("scene = [" + scene + "]");System.out.println("suggestion = [" + suggestion + "]");return suggestion;}} else {//單張圖片處理失敗, 原因是具體的情況詳細分析System.out.println("task process fail. task response:" + JSON.toJSONString(taskResult));}}} else {/*** 表明請求整體處理失敗,原因視具體的情況詳細分析*/System.out.println("the whole image scan request failed. response:" + JSON.toJSONString(scrResponse));}}return null;} }當自媒體用戶在自媒體端發表了一篇文章是需要通過審核通過之后才能在用戶app端展示
news:文章狀態
1.提交(待審核)
2.審核失敗
3.人工審核
4.人工審核通過
8.審核通過(待發布)
9.已發布
審核的思路和流程是這樣:
1.文章狀態如果為4就不用再次去審核了,可以直接保存數據。
2.狀態為8,發布時間是大于當前時間的,就可以保存數據了
3.判斷為1,待審核
4.標題和內容是否匹配,不匹配,operation:人工復審或拒絕給用戶推送消息。
5.審核文本 operation:人工復審或者拒絕。
6.審核圖片,
7.判斷發布時間是否大于當前時間 是的話就保存數據,不是的話就將vmNews的狀態改成9審核已通過。
8.如果不是就保存數據,向ap_article中保存一條數據。
ap_article_config
ap_article
ap_ariticle_content
ap_author
4張表中都需要存貯
8.創建索引
9.修改wmNew文章的狀態為9,文章審核通過保存消息。
文章審核代碼實現
1.adChannelMapper的接口,添加根據id查詢頻道的方法.
AdChannel selectByPrimaryKey(Integer id);AdChannelMapper.xml <select id="selectByPrimaryKey" resultMap="BaseResultMap" paramType="java.lang.Integer"> select <include refid="Base_Column_List"/> from ad_channel where id=#{id} </select>2.修改com.heima.model.mapper.app.ApAuthorMapper,添加根據名稱查詢作者的添加方法
ApAuthor selectByAuthorName(String authorName);
void insert(ApAuthor apAuthor);
先根據作者名稱來查詢作者,沒有查詢到就添加作者信息。
3.添加對應的ApArticleContentMapper
void insert(ApArticleContent articleContent)
ApArticleConfigMapper
int insert(ApArticleConfig apArticleConfig);
ApArrticleMapper
int insert(ApArticle apArticle);
這里的mapper中需要返回我們的文章id,這樣我們才能添加對應config,content.
在WmNewsMapper
新建ApUserMessageMapper類 。
Content的格式如下:
我們需要將text和層image都取出來,答題思路,轉換成list
map中有兩項,type和value,key-value。這里使用的死jsonAarry將大的json轉換成小的jsonObj對象然后從小的json對象中獲取對應的屬性。
文章審核自動測試:
public void TestReview(){reviewMediaArticleService.autoReviewByMedia(6110); //當路徑訪問不到的時候,我們的response可能會為null,我們需要修改代碼。//如果時間為null,我們就立即發布}總結
- 上一篇: 从架构到监控报警,支付系统的设计如何步步
- 下一篇: zbbz 坐标标注lisp_CAD_XY