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,48 +447,50 @@ public class KuaiShouCrawl implements CrawlStrategy { | ||
447 | return livePoolList; | 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 | JSONObject object = new JSONObject(); | 451 | JSONObject object = new JSONObject(); |
452 | object.put("coverUrl", null); | 452 | object.put("coverUrl", null); |
453 | object.put("playbackUrl", null); | 453 | object.put("playbackUrl", null); |
454 | + if (CollectionUtils.isEmpty(collect)) | ||
455 | + return object; | ||
454 | final String accountNo = dbLive.getPhoneNo(); | 456 | final String accountNo = dbLive.getPhoneNo(); |
455 | final Double liveDuration = dbLive.getDuration();// 数据接口返回直播时长 | 457 | final Double liveDuration = dbLive.getDuration();// 数据接口返回直播时长 |
456 | final Long liveStartTimeStamp = dbLive.getOpenTime().getTime();// 数据接口返回开播时间戳 | 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 | final double timeSubAbs = Math.abs(liveDuration - duration); | 477 | final double timeSubAbs = Math.abs(liveDuration - duration); |
465 | final double liveStartSub = BigDecimal.valueOf(Math.abs(liveStartTimeStamp - startTimeStamp)).divide(BigDecimal.valueOf(60 * 1000), 1, RoundingMode.HALF_UP).doubleValue(); | 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 | } else { | 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 | return object; | 495 | return object; |
494 | } | 496 | } |
src/main/java/cn/fw/freya/task/DataCaptureTask.java
@@ -99,8 +99,9 @@ public class DataCaptureTask { | @@ -99,8 +99,9 @@ public class DataCaptureTask { | ||
99 | */ | 99 | */ |
100 | @Scheduled(fixedRate = 2 * 60 * 1000, initialDelay = 5000) | 100 | @Scheduled(fixedRate = 2 * 60 * 1000, initialDelay = 5000) |
101 | public void captureLivePlayback() { | 101 | public void captureLivePlayback() { |
102 | + Double durationThreshold = 60d;// 设置直播时长阈值 | ||
102 | final Random random = new Random(); | 103 | final Random random = new Random(); |
103 | - List<LivePool> withoutPlaybackLive = common.getWithoutPlaybackLive(1, 60d) | 104 | + List<LivePool> withoutPlaybackLive = common.getWithoutPlaybackLive(1, durationThreshold) |
104 | .stream() | 105 | .stream() |
105 | .filter(item -> 0 <= item.getGetPlaybackFailTimes() && item.getGetPlaybackFailTimes() < 30) | 106 | .filter(item -> 0 <= item.getGetPlaybackFailTimes() && item.getGetPlaybackFailTimes() < 30) |
106 | .collect(Collectors.toList());// 找到直播时长>60分钟, 失败次数<30的直播数据 | 107 | .collect(Collectors.toList());// 找到直播时长>60分钟, 失败次数<30的直播数据 |
@@ -119,11 +120,15 @@ public class DataCaptureTask { | @@ -119,11 +120,15 @@ public class DataCaptureTask { | ||
119 | final List<JSONObject> playbackMsg = this.getPlaybackMsg(account);// 获取该人的直播回放信息 | 120 | final List<JSONObject> playbackMsg = this.getPlaybackMsg(account);// 获取该人的直播回放信息 |
120 | boolean flag = false; | 121 | boolean flag = false; |
121 | for (LivePool item : list) { | 122 | for (LivePool item : list) { |
122 | - JSONObject obj = kuaiShouCrawl.setPlaybackUrl(item, playbackMsg); | 123 | + JSONObject obj = kuaiShouCrawl.setPlaybackUrl(item, playbackMsg, durationThreshold); |
123 | String playbackUrl = obj.getString("playbackUrl"); | 124 | String playbackUrl = obj.getString("playbackUrl"); |
125 | + Boolean hasInvalidPlayback = obj.getBoolean("hasInvalidPlayback"); | ||
124 | final LivePool livePool = PublicUtil.copy(item, LivePool.class);// 对象拷贝 | 126 | final LivePool livePool = PublicUtil.copy(item, LivePool.class);// 对象拷贝 |
125 | if (Objects.isNull(playbackUrl)) { | 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 | } else { | 132 | } else { |
128 | flag = true; | 133 | flag = true; |
129 | livePool.setRoomCoverImage(obj.getString("coverUrl")); | 134 | livePool.setRoomCoverImage(obj.getString("coverUrl")); |