Browse Source

add: findIkoaMovieDownloadLog v1

tujidelv 3 years ago
parent
commit
93d0d146be

+ 12 - 0
src/main/java/top/lvzhiqiang/controller/CrawlerController.java

@@ -84,6 +84,18 @@ public class CrawlerController {
     }
 
     /**
+     * findIkoaMovieDownloadLog
+     *
+     * @author lvzhiqiang
+     * 2022/9/26 23:22
+     */
+    @RequestMapping("/findIkoaMovieDownloadLog")
+    @ResponseBody
+    public String findIkoaMovieDownloadLog(String page, String sort) throws Exception {
+        return crawlerService.findIkoaMovieDownloadLog(page, sort);
+    }
+
+    /**
      * jsoupIkoaMovie4VideoInfo
      *
      * @author lvzhiqiang

+ 8 - 0
src/main/java/top/lvzhiqiang/service/CrawlerService.java

@@ -33,4 +33,12 @@ public interface CrawlerService {
     String searchIkoaMovie(String keywords, String movieType, String by, String page) throws Exception;
 
     void jsoupIkoaMovie4VideoInfo(String bitrate) throws Exception;
+
+    /**
+     * findIkoaMovieDownloadLog
+     *
+     * @author lvzhiqiang
+     * 2022/9/26 23:22
+     */
+    String findIkoaMovieDownloadLog(String page, String sort) throws Exception;
 }

+ 145 - 0
src/main/java/top/lvzhiqiang/service/impl/CrawlerServiceImpl.java

@@ -389,6 +389,151 @@ public class CrawlerServiceImpl implements CrawlerService {
         }
     }
 
+    /**
+     * findIkoaMovieDownloadLog
+     *
+     * @author lvzhiqiang
+     * 2022/9/26 23:22
+     */
+    @Override
+    public String findIkoaMovieDownloadLog(String page, String sort) throws Exception {
+        log.warn("findIkoaMovieDownloadLog 开始:page={}", page);
+        // 获取ikoa常量MAP
+        Map<String, String> ikoaConstantMap = dicCodeMapper.findAll().stream()
+                .filter(x -> "ikoa".equals(x.getCodeDesc()) && x.getEnv().contains(env))
+                .collect(Collectors.toMap(DicCode::getCodeKey, DicCode::getCodeValue, (key1, key2) -> key1));
+
+        // 代理及TOKEN设置
+        Proxy proxy;
+        if ("dev".equals(env)) {
+            proxy = new Proxy(Proxy.Type.SOCKS, new InetSocketAddress("127.0.0.1", 1080));
+        } else {
+            proxy = Proxy.NO_PROXY;
+        }
+        if (StringUtils.isEmpty(ikoaToken)) {
+            generateIkoaToken(ikoaConstantMap, proxy);
+        }
+
+        Connection.Response response;
+        StringBuffer sb = new StringBuffer();
+        JSONObject result = null;
+
+        // 查全部
+        JSONArray ja = new JSONArray();
+        if (StringUtils.isEmpty(page)) {
+            // 查第一页
+            int totalPage = 0;
+            for (int i = 0; i < 3; i++) {
+                try {
+                    response = Jsoup.connect(ikoaConstantMap.get("download_log_url"))
+                            .header("Authorization", "Token " + ikoaToken)
+                            .timeout(50000)
+                            .proxy(proxy)
+                            .data("page", "1")
+                            .ignoreContentType(true)
+                            .userAgent(getUserAgent())
+                            .header("referer", ikoaConstantMap.get("referer"))
+                            .method(Connection.Method.GET)
+                            .execute();
+                    result = JSONObject.parseObject(response.body());
+                    ja.addAll(result.getJSONArray("data"));
+                    totalPage = result.getInteger("total_page");
+                    break;
+                } catch (HttpStatusException hse) {
+                    generateIkoaToken(ikoaConstantMap, proxy);
+                } catch (Exception e) {
+                    log.error("IKOA DownloadLog异常,ikoaConstantMap={},result={}", ikoaConstantMap, result.toString(), e);
+                    if (i == 2) {
+                        throw new Exception("IKOA DownloadLog异常!");
+                    }
+                }
+            }
+
+            if (totalPage > 1) {
+                for (int j = 2; j <= totalPage; j++) {
+                    for (int k = 0; k < 3; k++) {
+                        try {
+                            response = Jsoup.connect(ikoaConstantMap.get("download_log_url"))
+                                    .header("Authorization", "Token " + ikoaToken)
+                                    .timeout(50000)
+                                    .proxy(proxy)
+                                    .data("page", String.valueOf(j))
+                                    .ignoreContentType(true)
+                                    .userAgent(getUserAgent())
+                                    .header("referer", ikoaConstantMap.get("referer"))
+                                    .method(Connection.Method.GET)
+                                    .execute();
+                            result = JSONObject.parseObject(response.body());
+                            ja.addAll(result.getJSONArray("data"));
+                            break;
+                        } catch (HttpStatusException hse) {
+                            generateIkoaToken(ikoaConstantMap, proxy);
+                        } catch (Exception e) {
+                            log.error("IKOA DownloadLog异常,ikoaConstantMap={},result={}", ikoaConstantMap, result.toString(), e);
+                            if (k == 2) {
+                                throw new Exception("IKOA DownloadLog异常!");
+                            }
+                        }
+                    }
+                }
+            }
+        } else {
+            // 查某页
+            for (int i = 0; i < 3; i++) {
+                try {
+                    response = Jsoup.connect(ikoaConstantMap.get("download_log_url"))
+                            .header("Authorization", "Token " + ikoaToken)
+                            .timeout(50000)
+                            .proxy(proxy)
+                            .data("page", page)
+                            .ignoreContentType(true)
+                            .userAgent(getUserAgent())
+                            .header("referer", ikoaConstantMap.get("referer"))
+                            .method(Connection.Method.GET)
+                            .execute();
+                    result = JSONObject.parseObject(response.body());
+                    ja.addAll(result.getJSONArray("data"));
+                    break;
+                } catch (HttpStatusException hse) {
+                    generateIkoaToken(ikoaConstantMap, proxy);
+                } catch (Exception e) {
+                    log.error("IKOA DownloadLog异常,ikoaConstantMap={},result={}", ikoaConstantMap, result.toString(), e);
+                    if (i == 2) {
+                        throw new Exception("IKOA DownloadLog异常!");
+                    }
+                }
+            }
+        }
+
+        parseIkoaMovieDownloadLog(ja, sb, sort);
+
+        return sb.toString();
+    }
+
+    private void parseIkoaMovieDownloadLog(JSONArray result, StringBuffer sb, String sort) {
+        sb.append("total:".concat(String.valueOf(result.size())));
+        sb.append("<table border=\"1\" cellspacing=\"0\"><tr><th>序号</th><th>cid</th><th>封面</th><th>User-Agent</th><th>影片当前状态</th><th>下载记录创建时间</th><th>最后一次修改时间</th></tr>");
+
+        if ("desc".equals(sort)) {
+            Collections.reverse(result);
+        }
+        for (int i = 0; i < result.size(); i++) {
+            JSONObject jsonObject = result.getJSONObject(i);
+            sb.append("<tr>");
+
+            sb.append("<td>").append(i + 1).append("</td>");
+            sb.append("<td>").append(jsonObject.getString("product_id")).append("</td>");
+            sb.append("<td>").append("<img src=\"" + jsonObject.getString("package_image") + "\" alt=\"封面\" width=\"147\" height=\"auto\">").append("</td>");
+            sb.append("<td>").append(jsonObject.getString("ua")).append("</td>");
+            sb.append("<td>").append(jsonObject.getInteger("status")).append("</td>");
+            sb.append("<td>").append(jsonObject.getString("created")).append("</td>");
+            sb.append("<td>").append(jsonObject.getString("updated")).append("</td>");
+
+            sb.append("</tr>");
+        }
+        sb.append("</table>");
+    }
+
     private void parseIkoaSearchResult(JSONArray result, StringBuffer sb) {
         sb.append("<table border=\"1\" cellspacing=\"0\"><tr><th>序号</th><th>影片名称</th><th>cid</th><th>pid</th><th>影片类型</th><th>码率</th><th>总分段数量</th><th>价格</th><th>是否已购</th><th>购买后有效期</th><th>封面</th></tr>");
 

+ 13 - 0
src/main/resources/static/crawler.html

@@ -94,6 +94,19 @@
         </form>
     </div>
     <div style="margin-right:20px;">
+        <span class="font">findIkoaMovieDownloadLog</span>
+        <form method="post" action="bg/crawler/findIkoaMovieDownloadLog">
+            <span>页码</span>
+            <input type="text" name="page" placeholder="可为空,默认全部"/>
+            <span>排序</span>
+            <select name="sort" style="height: 21.43px;">
+                <option value="asc">asc</option>
+                <option value="desc">desc</option>
+            </select>
+            <input type="submit" value="提交">
+        </form>
+    </div>
+    <div style="margin-right:20px;">
         <span class="font">jsoupIkoaMovie4VideoInfo</span>
         <form method="post" action="bg/crawler/jsoupIkoaMovie4VideoInfo">
             <span>码率</span>