MyJavJobs.java 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. package top.lvzhiqiang.config;
  2. import lombok.extern.slf4j.Slf4j;
  3. import org.jsoup.Jsoup;
  4. import org.jsoup.nodes.Document;
  5. import org.jsoup.nodes.Element;
  6. import org.jsoup.select.Elements;
  7. import org.springframework.scheduling.annotation.Scheduled;
  8. import org.springframework.stereotype.Component;
  9. import org.springframework.transaction.annotation.Propagation;
  10. import org.springframework.transaction.annotation.Transactional;
  11. import top.lvzhiqiang.entity.DicCode;
  12. import top.lvzhiqiang.entity.VideoSitePool;
  13. import top.lvzhiqiang.mapper.VideoSitePoolMapper;
  14. import top.lvzhiqiang.service.*;
  15. import javax.annotation.Resource;
  16. import java.util.ArrayList;
  17. import java.util.HashSet;
  18. import java.util.List;
  19. import java.util.Set;
  20. import java.util.stream.Collectors;
  21. /**
  22. * 定时任务
  23. *
  24. * @author lvzhiqiang
  25. * 2022/4/28 15:49
  26. */
  27. @Component
  28. @Slf4j
  29. public class MyJavJobs {
  30. @Resource
  31. private VideoSitePoolMapper videoSitePoolMapper;
  32. @Resource
  33. private BgService bgService;
  34. @Resource
  35. private CrawlerService crawlerService;
  36. @Resource
  37. private Crawler4JavbusService crawler4JavbusService;
  38. @Resource
  39. private Crawler4JavdbService crawler4JavdbService;
  40. @Resource
  41. private Crawler4LoveFootService crawler4LoveFootService;
  42. private static final String SCHEDULED_ZONE = "Asia/Shanghai";
  43. /**
  44. * 每天06:00 校验站点有效性
  45. */
  46. @Scheduled(cron = "0 0 6 * * ?", zone = SCHEDULED_ZONE)
  47. //@Scheduled(cron = "0 10 19 * * ?",zone = SCHEDULED_ZONE)
  48. @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
  49. public void checkVideoSite() {
  50. log.warn("checkVideoSite开始==============================");
  51. // 获取javbus官方地址
  52. DicCode dicCode = WebAppConfig.dicCodeList.stream().filter(x -> 2 == x.getType() && "javbus".equals(x.getCodeKey())).findFirst().get();
  53. if (dicCode == null) {
  54. log.warn("javbus官方站点为Null");
  55. return;
  56. }
  57. // 获取javbusUrlList
  58. List<String> javbusUrlList = videoSitePoolMapper.findUrlByType(1);
  59. // 获取javbusNewUrlList
  60. Set<String> javbusNewUrlList = new HashSet<>();
  61. try {
  62. Document document = Jsoup.connect(dicCode.getCodeValue()).timeout(50000).ignoreContentType(true)
  63. .userAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36")
  64. .header("referer", "https://www.javbus.com/").get();
  65. Elements ahrefList = document.select("strong:contains(防屏蔽地址)").next("a");
  66. for (Element element : ahrefList) {
  67. String text = element.text();
  68. log.warn("Jsoup获取{}防屏蔽地址:{}", dicCode.getCodeValue(), text);
  69. javbusNewUrlList.add(text);
  70. }
  71. } catch (Exception e) {
  72. log.error("Jsoup获取{}防屏蔽地址异常", dicCode.getCodeValue(), e);
  73. }
  74. if (javbusNewUrlList.size() == 0) {
  75. log.warn("javbusNewUrlList为空");
  76. }
  77. if (javbusNewUrlList.size() == 0 && javbusUrlList.size() == 0) {
  78. log.warn("javbusUrlList和javbusNewUrlList为空");
  79. return;
  80. }
  81. // 校验新地址
  82. List<String> javbusNewUrlFinalList = javbusNewUrlList.stream().filter(e -> !javbusUrlList.contains(e)).collect(Collectors.toList());
  83. List<VideoSitePool> videoSitePoolList = new ArrayList<>();
  84. VideoSitePool videoSitePool;
  85. for (String javbusNewUrlFinal : javbusNewUrlFinalList) {
  86. try {
  87. Jsoup.connect(javbusNewUrlFinal).timeout(50000);
  88. videoSitePool = new VideoSitePool();
  89. videoSitePool.setUrl(javbusNewUrlFinal);
  90. videoSitePool.setType(1);
  91. videoSitePoolList.add(videoSitePool);
  92. log.warn("javbusNewUrlFinalList:javbus防屏蔽地址有效!javbusUrl={}", javbusNewUrlFinal);
  93. } catch (Exception e) {
  94. log.error("javbusNewUrlFinalList:javbus防屏蔽地址失效!javbusUrl={}", javbusNewUrlFinal, e);
  95. }
  96. }
  97. if (videoSitePoolList.size() > 0) {
  98. videoSitePoolMapper.insertList(videoSitePoolList);
  99. }
  100. // 校验存量地址
  101. for (String javbusUrl : javbusUrlList) {
  102. int deleteFlag = 1;
  103. try {
  104. Jsoup.connect(javbusUrl).timeout(50000);
  105. log.warn("javbusUrlList:javbus防屏蔽地址有效!javbusUrl={}", javbusUrl);
  106. } catch (Exception e) {
  107. deleteFlag = 2;
  108. log.error("javbusUrlList:javbus防屏蔽地址失效!javbusUrl={}", javbusUrl, e);
  109. }
  110. videoSitePoolMapper.updateDeleteFlag(javbusUrl, deleteFlag);
  111. }
  112. log.warn("checkVideoSite结束==============================");
  113. }
  114. /**
  115. * 每天20:00 Jsoup码池
  116. */
  117. @Scheduled(cron = "0 00 20 * * ?", zone = SCHEDULED_ZONE)
  118. public void jsoupIcodePool4CrawingNo() {
  119. log.warn("jsoupIcodePool4CrawingNo开始==============================");
  120. bgService.jsoupIcodePool("javbus", 1, 2, 2);
  121. }
  122. /**
  123. * 每天20:30 Jsoup码池
  124. */
  125. //@Scheduled(cron = "0 30 20 * * ?", zone = SCHEDULED_ZONE)
  126. public void jsoupIcodePool4CrawingFail() {
  127. log.warn("jsoupIcodePool4CrawingFail开始==============================");
  128. bgService.jsoupIcodePool("javdb", 3, 2, 2);
  129. }
  130. /**
  131. * 每天18:00 jsoupXiaoeknowCourse
  132. */
  133. @Scheduled(cron = "0 00 18 * * ?", zone = SCHEDULED_ZONE)
  134. @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
  135. public void jsoupXiaoeknowCourse() {
  136. log.warn("jsoupXiaoeknowCourse开始==============================");
  137. crawlerService.jsoupXiaoeknowCourse(null, 2, null);
  138. }
  139. /**
  140. * 每隔一小时执行一次 jsoupJavbusProfile
  141. */
  142. // @Scheduled(cron = "0 0 * * * ?", zone = SCHEDULED_ZONE)
  143. public void jsoupJavbusProfileJob() throws Exception {
  144. log.warn("jsoupJavbusProfileJob开始==============================");
  145. crawler4JavbusService.jsoupJavbusProfile(null, null);
  146. }
  147. /**
  148. * 每天23:50 jsoupLoveFoot
  149. */
  150. @Scheduled(cron = "0 50 23 * * ?", zone = SCHEDULED_ZONE)
  151. public void jsoupLoveFoot() throws Exception {
  152. log.warn("jsoupLoveFoot开始==============================");
  153. crawler4LoveFootService.jsoupLoveFoot4avnoashi(null, 2, 2);
  154. crawler4LoveFootService.jsoupLoveFoot4jpfoot(null, 2, 2);
  155. crawler4LoveFootService.jsoupLoveFoot4feetpassion(null, 2, 2);
  156. }
  157. /**
  158. * 每天23:55 jsoupLoveFoot4CrawingFail
  159. */
  160. //@Scheduled(cron = "0 55 23 * * ?", zone = SCHEDULED_ZONE)
  161. public void jsoupLoveFoot4CrawingFail() {
  162. log.warn("jsoupLoveFoot4CrawingFail开始==============================");
  163. crawler4LoveFootService.jsoupLoveFoot4CrawingFail(4, 2, "javbus", null);
  164. }
  165. }