diff --git a/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-api/src/main/java/com/baiye/controller/TiktokHotCommentSopController.java b/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-api/src/main/java/com/baiye/controller/TiktokHotCommentSopController.java index 52460ba..91cf655 100644 --- a/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-api/src/main/java/com/baiye/controller/TiktokHotCommentSopController.java +++ b/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-api/src/main/java/com/baiye/controller/TiktokHotCommentSopController.java @@ -82,8 +82,8 @@ public class TiktokHotCommentSopController { @GetMapping("/commentPageList") @ApiOperation("视频评论列表分页") - public PageResult commentPageList(VideoDto videoDto, Pageable pageable) { - return hotCommentSopService.commentPageList(videoDto, pageable); + public PageResult commentPageList(@RequestParam("videoId") String videoId, Pageable pageable) { + return hotCommentSopService.commentPageList(videoId, pageable); } @PostMapping("/updateVideo") diff --git a/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-service/src/main/java/com/baiye/constant/DefaultKeyConstants.java b/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-service/src/main/java/com/baiye/constant/DefaultKeyConstants.java index 259916d..89b27d1 100644 --- a/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-service/src/main/java/com/baiye/constant/DefaultKeyConstants.java +++ b/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-service/src/main/java/com/baiye/constant/DefaultKeyConstants.java @@ -86,4 +86,7 @@ public class DefaultKeyConstants { public static final String IP_LABEL = "ip_label"; + public static final String URL_LIST = "url_list"; + public static final String AVATAR_MEDIUM = "avatar_medium"; + } diff --git a/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-service/src/main/java/com/baiye/entity/CommentEntity.java b/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-service/src/main/java/com/baiye/entity/CommentEntity.java index f791a86..8577163 100644 --- a/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-service/src/main/java/com/baiye/entity/CommentEntity.java +++ b/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-service/src/main/java/com/baiye/entity/CommentEntity.java @@ -1,11 +1,14 @@ package com.baiye.entity; import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import java.util.Date; +import java.util.List; +import java.util.Map; /** * @author jt @@ -27,5 +30,12 @@ public class CommentEntity { private String nickName; private Date createTime; private String vendorId; + private String word; + private String matchingWord; + private String address; + private String avatarUrl; + + @TableField(exist = false) + private List> typeMapList; } diff --git a/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-service/src/main/java/com/baiye/service/TiktokHotCommentSopService.java b/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-service/src/main/java/com/baiye/service/TiktokHotCommentSopService.java index be3cef1..0e04141 100644 --- a/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-service/src/main/java/com/baiye/service/TiktokHotCommentSopService.java +++ b/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-service/src/main/java/com/baiye/service/TiktokHotCommentSopService.java @@ -53,7 +53,7 @@ public interface TiktokHotCommentSopService extends IService commentVoList = new ArrayList<>(); - String videoId = videoDto.getVideoId(); - List keyWordEntities = keyWordMapper.selectList(new QueryWrapper().eq("sop_id", videoDto.getHotCommentId())); - JSONObject videoCommentList = requestTiktok.getVideoCommentList("83f268b5-52ed-470c-a6b2-5111ed0d6d11", videoId); - if (videoCommentList != null) { - JSONArray jsonArray = videoCommentList.getJSONArray(DefaultKeyConstants.COMMENTS); - if (CollUtil.isNotEmpty(jsonArray)) { - for (Object obj : jsonArray) { - JSONObject commentObj = JSONUtil.parseObj(obj); - String text = commentObj.get(DefaultKeyConstants.TEXT) + ""; - JSONObject userObj = commentObj.getJSONObject(DefaultKeyConstants.USER); - for (KeyWordEntity keyWordEntity : keyWordEntities) { - String[] arr = keyWordEntity.getWord().trim().split("\\s+"); - WordTree tree = new WordTree(); - for (String s : arr) { - tree.addWord(s); - } - List matchAll = tree.matchAll(text, -1, false, false); - if (CollUtil.isNotEmpty(matchAll)) { - CommentVo commentVo = new CommentVo(); - commentVo.setCommentId(commentObj.get(DefaultKeyConstants.CID) + ""); - long dateObj = Long.parseLong(commentObj.get(DefaultKeyConstants.CREATE_TIME) + ""); - commentVo.setCommentTime(new Date(dateObj)); - commentVo.setAddress(commentObj.get(DefaultKeyConstants.IP_LABEL) + ""); - commentVo.setName(userObj.get(DefaultKeyConstants.NICK_NAME) + ""); - commentVo.setText(text); - commentVo.setSpecificKeyWord(matchAll); - List list = Arrays.asList(arr); - list.removeAll(matchAll); - commentVo.setKeyWord(list); - commentVoList.add(commentVo); - } + public PageResult commentPageList(String videoId, Pageable pageable) { + Page page = new Page<>(pageable.getPageNumber(), pageable.getPageSize()); + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("aweme_id", videoId); + IPage iPage = commentMapper.selectPage(page, wrapper); + for (CommentEntity record : iPage.getRecords()) { + List> list = new ArrayList<>(); + for (String str : record.getWord().split("\\s+")) { + boolean flag = false; + for (String s : record.getMatchingWord().split("\\s+")) { + if (str.equals(s)) { + flag = true; + continue; } } + Map map = new HashMap<>(); + map.put("type", 0); + map.put("word", str); + if (flag) { + map.put("type", 1); + } + list.add(map); + } + record.setTypeMapList(list); + record.setWord(null); + record.setMatchingWord(null); } - List returnList = commentVoList.stream().collect(Collectors.collectingAndThen(Collectors.toCollection( - () -> new TreeSet<>(Comparator.comparing(CommentVo::getCommentId))), ArrayList::new)); - return PageResult.success((long) returnList.size(), PageUtil.toPage(pageable.getPageNumber() - 1, pageable.getPageSize(), returnList)); + return PageResult.success(iPage.getTotal(), iPage.getPages(), iPage.getRecords()); } @Override @@ -283,9 +271,9 @@ public class TiktokHotCommentSopServiceImpl extends ServiceImpl result = userService.awemeDetail(null, videoEntity.getVideoId()); if (result.getCode() == HttpStatus.SUCCESS) { - JSONObject awemeDetailObj = JSONUtil.parseObj(result.getData()).getJSONObject(DefaultKeyConstants.AWEME_DETAIL); - if (awemeDetailObj != null) { - JSONObject statisticsObj = awemeDetailObj.getJSONObject(DefaultKeyConstants.STATISTICS); + JSONObject videoDetailObj = JSONUtil.parseObj(result.getData()).getJSONObject(DefaultKeyConstants.AWEME_DETAIL); + if (videoDetailObj != null) { + JSONObject statisticsObj = videoDetailObj.getJSONObject(DefaultKeyConstants.STATISTICS); videoEntity.setFabulousNum(Convert.toInt(statisticsObj.get(DefaultKeyConstants.ADMIRE_COUNT)));//????? videoEntity.setCollectionNum(Convert.toInt(statisticsObj.get(DefaultKeyConstants.COLLECT_COUNT))); videoEntity.setCommentNum(Convert.toInt(statisticsObj.get(DefaultKeyConstants.COMMENT_COUNT))); @@ -338,12 +326,12 @@ public class TiktokHotCommentSopServiceImpl extends ServiceImpl result = userService.searchUser(searchEntity.getMatchingMedia()); if (result.getCode() != HttpStatus.SUCCESS) { - log.error("========userId搜索失败:{}========", result.getMsg()); + log.error("========搜索用户失败,错误信息:{}========", result.getMsg()); return; } String userId = this.getUserId(result.getData()); if (StringUtils.isBlank(userId)) { - log.error("========userId搜索为空========"); + log.error("========搜索用户为空========"); return; } userIdList.add(userId); @@ -358,7 +346,9 @@ public class TiktokHotCommentSopServiceImpl extends ServiceImpl videoEntityList = videoMapper.selectList(new QueryWrapper<>()); @@ -377,13 +367,148 @@ public class TiktokHotCommentSopServiceImpl extends ServiceImpl newVideoList) { + Object objList = JSONUtil.parseObj(data).get(DefaultKeyConstants.AWEME_LIST); + JSONArray array = JSONUtil.parseArray(objList); + if (CollUtil.isNotEmpty(array)) { + List videoEntityList = new ArrayList<>(); + for (Object o : array) { + JSONObject obj = JSONUtil.parseObj(o); + TiktokHotCommentVideoEntity video = new TiktokHotCommentVideoEntity(); + video.setVideoId(obj.get(DefaultKeyConstants.AWEME_ID) + ""); + video.setHotCommentId(hotCommentSopEntity.getId()); + video.setHotCommentName(hotCommentSopEntity.getName()); + video.setVideoName(obj.get(DefaultKeyConstants.DESC) + ""); + JSONObject authorObj = obj.getJSONObject(DefaultKeyConstants.AUTHOR); + video.setAuthorId(authorObj.get(DefaultKeyConstants.UID) + ""); + video.setAuthorName(authorObj.get(DefaultKeyConstants.NICK_NAME) + ""); + JSONObject statisticsObj = obj.getJSONObject(DefaultKeyConstants.STATISTICS); + video.setFabulousNum(Convert.toInt(statisticsObj.get(DefaultKeyConstants.ADMIRE_COUNT)));//????? + video.setCollectionNum(Convert.toInt(statisticsObj.get(DefaultKeyConstants.COLLECT_COUNT))); + video.setCommentNum(Convert.toInt(statisticsObj.get(DefaultKeyConstants.COMMENT_COUNT))); + video.setForwardNum(Convert.toInt(statisticsObj.get(DefaultKeyConstants.FORWARD_COUNT))); + video.setSortContent(type); + long dateObj = Long.parseLong(obj.get(DefaultKeyConstants.CREATE_TIME) + ""); + video.setCreateTime(new Date(dateObj)); + videoEntityList.add(video); + } + // 获取此人的第一个视频 + if (CollUtil.isNotEmpty(videoEntityList)) { + TiktokHotCommentVideoEntity videoEntity = videoEntityList.stream() + .sorted((TiktokHotCommentVideoEntity o1, TiktokHotCommentVideoEntity o2) -> Long.compare(o2.getCreateTime().getTime(), o1.getCreateTime().getTime())) + .collect(Collectors.toList()).get(DefaultNumberConstants.ZERO_NUMBER); + newVideoList.add(videoEntity); + } + } + } + + /** + * 关键词匹配评论操作跟评 + * + * @param videoEntityList + * @param sopEntity + */ + public void commentList(List videoEntityList, TiktokHotCommentSopEntity sopEntity) { + if (CollUtil.isNotEmpty(videoEntityList)) { + JSONArray jsonArrayAll = new JSONArray(); + // 1、获取到所有视频的所有评论存入jsonArrayAll + for (TiktokHotCommentVideoEntity videoEntity : videoEntityList) { + JSONObject videoCommentList = requestTiktok.getVideoCommentList("83f268b5-52ed-470c-a6b2-5111ed0d6d11", videoEntity.getVideoId()); + if (videoCommentList != null) { + JSONArray jsonArray = videoCommentList.getJSONArray(DefaultKeyConstants.COMMENTS); + if (CollUtil.isNotEmpty(jsonArray)) { + jsonArrayAll.addAll(jsonArray); + } + } + } + // 2、取出一个sop中所有关键词加入到DFA查找中 + WordTree tree = new WordTree(); + for (KeyWordEntity keyWordEntity : sopEntity.getKeyWordList()) { + String[] arr = keyWordEntity.getWord().trim().split("\\s+"); + for (String str : arr) { + tree.addWord(str); + } + } + // 3、循环评论进行匹配 + if (CollUtil.isNotEmpty(jsonArrayAll)) { + List saveList = new ArrayList<>(); + for (Object obj : jsonArrayAll) { + JSONObject commentObj = JSONUtil.parseObj(obj); + String text = commentObj.get(DefaultKeyConstants.TEXT) + ""; + JSONObject userObj = commentObj.getJSONObject(DefaultKeyConstants.USER); + // 3.1、匹配成功后添加信息 + List matchAll = tree.matchAll(text, -1, false, false); + if (CollUtil.isNotEmpty(matchAll)) { + CommentEntity commentEntity = new CommentEntity(); + commentEntity.setCid(commentObj.get(DefaultKeyConstants.CID) + ""); + long dateObj = Long.parseLong(commentObj.get(DefaultKeyConstants.CREATE_TIME) + ""); + commentEntity.setCreateTime(new Date(dateObj)); + commentEntity.setText(text); + commentEntity.setAwemeId(commentObj.get(DefaultKeyConstants.AWEME_ID) + ""); + commentEntity.setMatchingWord(StringUtils.join((CharSequence) matchAll, ",")); + commentEntity.setNickName(userObj.get(DefaultKeyConstants.NICK_NAME) + ""); + commentEntity.setUserId(userObj.get(DefaultKeyConstants.UID) + ""); + List keyWordList = sopEntity.getKeyWordList(); + commentEntity.setWord(StringUtils.join((CharSequence) keyWordList, "\\+s")); + commentEntity.setAddress(commentObj.get(DefaultKeyConstants.IP_LABEL) + ""); + String avatarUrl = (String) userObj.getJSONObject(DefaultKeyConstants.AVATAR_MEDIUM).getJSONArray(DefaultKeyConstants.URL_LIST).get(0); + commentEntity.setAvatarUrl(avatarUrl); + saveList.add(commentEntity); + } + } + // 3.2、插入信息 + if (CollUtil.isNotEmpty(saveList)) { +// ArrayList insert = saveList.stream().collect(Collectors.collectingAndThen(Collectors.toCollection( +// () -> new TreeSet<>(Comparator.comparing(CommentEntity::getCid))), ArrayList::new)); + commentMapper.insertAll(saveList); + } + + //4、匹配到的评论进行跟评 + if (CollUtil.isNotEmpty(saveList)){ + for (CommentEntity comment : saveList) { + requestTiktok.optCommentVideoComment("", comment.getAwemeId(), comment.getCid(),"小可爱"); + } + } + } + } + } + /** * 执行脚本 * * @param videoEntityList 要执行的视频集合 * @param searchVendorId 进行搜索的用户标识 */ - public void implementScript(List videoEntityList, String searchVendorId, TiktokHotCommentSopEntity sopEntity) { + public void implementScript(List videoEntityList, String + searchVendorId, TiktokHotCommentSopEntity sopEntity) { List scriptEntityList = scriptMapper.selectList( new QueryWrapper().eq("hot_comment_id", sopEntity.getId())); Map> videoMap = videoEntityList.stream().collect(Collectors.groupingBy(TiktokHotCommentVideoEntity::getSortContent)); @@ -452,69 +577,6 @@ public class TiktokHotCommentSopServiceImpl extends ServiceImpl newVideoList) { - Object objList = JSONUtil.parseObj(data).get(DefaultKeyConstants.AWEME_LIST); - JSONArray array = JSONUtil.parseArray(objList); - if (CollUtil.isNotEmpty(array)) { - List videoEntityList = new ArrayList<>(); - for (Object o : array) { - JSONObject obj = JSONUtil.parseObj(o); - TiktokHotCommentVideoEntity video = new TiktokHotCommentVideoEntity(); - video.setVideoId(obj.get(DefaultKeyConstants.AWEME_ID) + ""); - video.setHotCommentId(hotCommentSopEntity.getId()); - video.setHotCommentName(hotCommentSopEntity.getName()); - video.setVideoName(obj.get(DefaultKeyConstants.DESC) + ""); - JSONObject authorObj = obj.getJSONObject(DefaultKeyConstants.AUTHOR); - video.setAuthorId(authorObj.get(DefaultKeyConstants.UID) + ""); - video.setAuthorName(authorObj.get(DefaultKeyConstants.NICK_NAME) + ""); - JSONObject statisticsObj = obj.getJSONObject(DefaultKeyConstants.STATISTICS); - video.setFabulousNum(Convert.toInt(statisticsObj.get(DefaultKeyConstants.ADMIRE_COUNT)));//????? - video.setCollectionNum(Convert.toInt(statisticsObj.get(DefaultKeyConstants.COLLECT_COUNT))); - video.setCommentNum(Convert.toInt(statisticsObj.get(DefaultKeyConstants.COMMENT_COUNT))); - video.setForwardNum(Convert.toInt(statisticsObj.get(DefaultKeyConstants.FORWARD_COUNT))); - video.setSortContent(type); - long dateObj = Long.parseLong(obj.get(DefaultKeyConstants.CREATE_TIME) + ""); - video.setCreateTime(new Date(dateObj)); - videoEntityList.add(video); - } - // 获取此人的第一个视频 - if (CollUtil.isNotEmpty(videoEntityList)) { - TiktokHotCommentVideoEntity videoEntity = videoEntityList.stream() - .sorted((TiktokHotCommentVideoEntity o1, TiktokHotCommentVideoEntity o2) -> Long.compare(o2.getCreateTime().getTime(), o1.getCreateTime().getTime())) - .collect(Collectors.toList()).get(DefaultNumberConstants.ZERO_NUMBER); - newVideoList.add(videoEntity); - } - } - } - /** * 根据封控规则 取号 * @@ -522,7 +584,8 @@ public class TiktokHotCommentSopServiceImpl extends ServiceImpl getVendorId(List scriptEntityList, TiktokHotCommentSopEntity hotCommentSopEntity) { + public Map getVendorId + (List scriptEntityList, TiktokHotCommentSopEntity hotCommentSopEntity) { Map dataMap = new HashMap<>(); for (TiktokHotCommentScriptEntity scriptEntity : scriptEntityList) { Long preemptCommentOrganize = scriptEntity.getPreemptCommentOrganize(); diff --git a/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-service/src/main/resources/mapper/CommentMapper.xml b/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-service/src/main/resources/mapper/CommentMapper.xml index f337003..776bf4d 100644 --- a/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-service/src/main/resources/mapper/CommentMapper.xml +++ b/cdp-tools/cdp-tool-dy/dy-tool-member/dy-tool-member-service/src/main/resources/mapper/CommentMapper.xml @@ -8,10 +8,11 @@ - insert into tb_comment (cid,text,awemeId,status,userId,nickName,createTime,vendorId) + insert into tb_comment (cid,text,awemeId,status,userId,nickName,createTime,vendorId,word,matching_word,address,avatar_url) values - ( #{item.cid}, #{item.text},#{item.awemeId},#{item.status},#{item.userId},#{item.nickName},#{item.createTime},#{item.vendorId}) + (#{item.cid}, #{item.text},#{item.awemeId},#{item.status},#{item.userId},#{item.nickName},#{item.createTime} + ,#{item.vendorId},#{item.word},#{item.matchingWord},#{item.address},#{item.avatarUrl}) - + \ No newline at end of file