Commit 7ae97ee4dd6e3727b55d55b843ffd818a051155d
1 parent
b6a90a52
2022年5月27日14:37:21 标记有直播回放数据但是回放未匹配上昨天直播的项
Showing
2 changed files
with
41 additions
and
34 deletions
src/main/java/cn/fw/freya/service/crawl/impl/KuaiShouCrawl.java
... | ... | @@ -447,48 +447,50 @@ public class KuaiShouCrawl implements CrawlStrategy { |
447 | 447 | return livePoolList; |
448 | 448 | } |
449 | 449 | |
450 | - public JSONObject setPlaybackUrl(LivePool dbLive, List<JSONObject> collect) { | |
450 | + public JSONObject setPlaybackUrl(LivePool dbLive, List<JSONObject> collect, Double durationThreshold) { | |
451 | 451 | JSONObject object = new JSONObject(); |
452 | 452 | object.put("coverUrl", null); |
453 | 453 | object.put("playbackUrl", null); |
454 | + if (CollectionUtils.isEmpty(collect)) | |
455 | + return object; | |
454 | 456 | final String accountNo = dbLive.getPhoneNo(); |
455 | 457 | final Double liveDuration = dbLive.getDuration();// 数据接口返回直播时长 |
456 | 458 | final Long liveStartTimeStamp = dbLive.getOpenTime().getTime();// 数据接口返回开播时间戳 |
457 | - if (liveDuration >= 60) {// 直播时长大于等于60分钟才记录回放信息 | |
458 | - if (!CollectionUtils.isEmpty(collect)) { | |
459 | - JSONObject playbackMsg; | |
460 | - if (Objects.equals(collect.size(), 1)) { | |
461 | - playbackMsg = collect.get(0); | |
462 | - Double duration = playbackMsg.getDouble("duration");// 回放信息返回直播时长 | |
463 | - final Long startTimeStamp = playbackMsg.getLong("startTime");// 回放信息返回直播开始时间戳 | |
459 | + if (liveDuration >= durationThreshold) {// 直播时长大于等于durationThreshold指定的分钟才记录回放信息 | |
460 | + JSONObject playbackMsg; | |
461 | + if (Objects.equals(collect.size(), 1)) { | |
462 | + playbackMsg = collect.get(0); | |
463 | + Double duration = playbackMsg.getDouble("duration");// 回放信息返回直播时长 | |
464 | + final Long startTimeStamp = playbackMsg.getLong("startTime");// 回放信息返回直播开始时间戳 | |
465 | + final double timeSubAbs = Math.abs(liveDuration - duration); | |
466 | + final double liveStartSub = BigDecimal.valueOf(Math.abs(liveStartTimeStamp - startTimeStamp)).divide(BigDecimal.valueOf(60 * 1000), 1, RoundingMode.HALF_UP).doubleValue(); | |
467 | + // (Objects.equals(liveDuration, duration) || (timeSubAbs < 5))->说明时长几乎相等 | |
468 | + // (liveStartSub < 2)->说明开播时间几乎一样 | |
469 | + if (!((Objects.equals(liveDuration, duration) || (timeSubAbs < 5)) && liveStartSub < 10)) { | |
470 | + playbackMsg = null; | |
471 | + log.info(String.format("%s [%s]平台账户号为: %s的直播回放数据不匹配!!!", LocalDateTime.now(), this.getType().getName(), accountNo)); | |
472 | + } | |
473 | + } else { | |
474 | + List<JSONObject> collect1 = collect.stream().filter(item1 -> { | |
475 | + Double duration = item1.getDouble("duration"); | |
476 | + final Long startTimeStamp = item1.getLong("startTime");// 回放信息返回直播开始时间戳 | |
464 | 477 | final double timeSubAbs = Math.abs(liveDuration - duration); |
465 | 478 | final double liveStartSub = BigDecimal.valueOf(Math.abs(liveStartTimeStamp - startTimeStamp)).divide(BigDecimal.valueOf(60 * 1000), 1, RoundingMode.HALF_UP).doubleValue(); |
466 | - // (Objects.equals(liveDuration, duration) || (timeSubAbs < 5))->说明时长几乎相等 | |
467 | - // (liveStartSub < 2)->说明开播时间几乎一样 | |
468 | - if (!((Objects.equals(liveDuration, duration) || (timeSubAbs < 5)) && liveStartSub < 10)) { | |
469 | - playbackMsg = null; | |
470 | - log.info(String.format("%s [%s]平台账户号为: %s的直播回放数据不匹配!!!", LocalDateTime.now(), this.getType().getName(), accountNo)); | |
471 | - } | |
479 | + return (Objects.equals(liveDuration, duration) || timeSubAbs < 5) && liveStartSub < 10; | |
480 | + }).collect(Collectors.toList()); | |
481 | + if (Objects.equals(collect1.size(), 1)) { | |
482 | + playbackMsg = collect1.get(0); | |
472 | 483 | } else { |
473 | - List<JSONObject> collect1 = collect.stream().filter(item1 -> { | |
474 | - Double duration = item1.getDouble("duration"); | |
475 | - final Long startTimeStamp = item1.getLong("startTime");// 回放信息返回直播开始时间戳 | |
476 | - final double timeSubAbs = Math.abs(liveDuration - duration); | |
477 | - final double liveStartSub = BigDecimal.valueOf(Math.abs(liveStartTimeStamp - startTimeStamp)).divide(BigDecimal.valueOf(60 * 1000), 1, RoundingMode.HALF_UP).doubleValue(); | |
478 | - return (Objects.equals(liveDuration, duration) || timeSubAbs < 5) && liveStartSub < 10; | |
479 | - }).collect(Collectors.toList()); | |
480 | - if (Objects.equals(collect1.size(), 1)) { | |
481 | - playbackMsg = collect1.get(0); | |
482 | - } else { | |
483 | - playbackMsg = null; | |
484 | - log.info(String.format("%s [%s]平台账户号为: %s的直播找到多条回放数据!!!", LocalDateTime.now(), this.getType().getName(), accountNo)); | |
485 | - } | |
486 | - } | |
487 | - if (Objects.nonNull(playbackMsg)) { | |
488 | - object.put("coverUrl", playbackMsg.getString("coverUrl")); | |
489 | - object.put("playbackUrl", this.playbackBaseUrl + playbackMsg.getString("productId")); | |
484 | + playbackMsg = null; | |
485 | + log.info(String.format("%s [%s]平台账户号为: %s的直播找到多条回放数据!!!", LocalDateTime.now(), this.getType().getName(), accountNo)); | |
490 | 486 | } |
491 | 487 | } |
488 | + if (Objects.nonNull(playbackMsg)) { | |
489 | + object.put("coverUrl", playbackMsg.getString("coverUrl")); | |
490 | + object.put("playbackUrl", this.playbackBaseUrl + playbackMsg.getString("productId")); | |
491 | + } else { | |
492 | + object.put("hasInvalidPlayback", true); | |
493 | + } | |
492 | 494 | } |
493 | 495 | return object; |
494 | 496 | } | ... | ... |
src/main/java/cn/fw/freya/task/DataCaptureTask.java
... | ... | @@ -99,8 +99,9 @@ public class DataCaptureTask { |
99 | 99 | */ |
100 | 100 | @Scheduled(fixedRate = 2 * 60 * 1000, initialDelay = 5000) |
101 | 101 | public void captureLivePlayback() { |
102 | + Double durationThreshold = 60d;// 设置直播时长阈值 | |
102 | 103 | final Random random = new Random(); |
103 | - List<LivePool> withoutPlaybackLive = common.getWithoutPlaybackLive(1, 60d) | |
104 | + List<LivePool> withoutPlaybackLive = common.getWithoutPlaybackLive(1, durationThreshold) | |
104 | 105 | .stream() |
105 | 106 | .filter(item -> 0 <= item.getGetPlaybackFailTimes() && item.getGetPlaybackFailTimes() < 30) |
106 | 107 | .collect(Collectors.toList());// 找到直播时长>60分钟, 失败次数<30的直播数据 |
... | ... | @@ -119,11 +120,15 @@ public class DataCaptureTask { |
119 | 120 | final List<JSONObject> playbackMsg = this.getPlaybackMsg(account);// 获取该人的直播回放信息 |
120 | 121 | boolean flag = false; |
121 | 122 | for (LivePool item : list) { |
122 | - JSONObject obj = kuaiShouCrawl.setPlaybackUrl(item, playbackMsg); | |
123 | + JSONObject obj = kuaiShouCrawl.setPlaybackUrl(item, playbackMsg, durationThreshold); | |
123 | 124 | String playbackUrl = obj.getString("playbackUrl"); |
125 | + Boolean hasInvalidPlayback = obj.getBoolean("hasInvalidPlayback"); | |
124 | 126 | final LivePool livePool = PublicUtil.copy(item, LivePool.class);// 对象拷贝 |
125 | 127 | if (Objects.isNull(playbackUrl)) { |
126 | - livePool.setGetPlaybackFailTimes(livePool.getGetPlaybackFailTimes() + 1); | |
128 | + if (hasInvalidPlayback) | |
129 | + livePool.setGetPlaybackFailTimes(-2);// 表示拿到回放数据, 但是没有和昨天直播匹配的回放 | |
130 | + else | |
131 | + livePool.setGetPlaybackFailTimes(livePool.getGetPlaybackFailTimes() + 1); | |
127 | 132 | } else { |
128 | 133 | flag = true; |
129 | 134 | livePool.setRoomCoverImage(obj.getString("coverUrl")); | ... | ... |