From b41a6efe17ba61d150c5a9b7309651cebae54e0d Mon Sep 17 00:00:00 2001
From: admin <weikou2014>
Date: 星期五, 03 九月 2021 16:40:43 +0800
Subject: [PATCH] 韩迷TV相关bug修改,电视直播完善(后台+前端API)

---
 src/main/java/com/yeshi/buwan/videos/hanmi/HanmiApiUtil.java |  171 ++++++++++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 151 insertions(+), 20 deletions(-)

diff --git a/src/main/java/com/yeshi/buwan/videos/hanmi/HanmiApiUtil.java b/src/main/java/com/yeshi/buwan/videos/hanmi/HanmiApiUtil.java
index 6c080d8..90fe0b1 100644
--- a/src/main/java/com/yeshi/buwan/videos/hanmi/HanmiApiUtil.java
+++ b/src/main/java/com/yeshi/buwan/videos/hanmi/HanmiApiUtil.java
@@ -1,18 +1,15 @@
 package com.yeshi.buwan.videos.hanmi;
 
-import com.yeshi.buwan.util.StringUtil;
 import com.yeshi.buwan.videos.hanmi.entity.HanmiShow;
 import com.yeshi.buwan.videos.hanmi.entity.HanmiShowEpisode;
+import org.jsoup.Connection;
 import org.jsoup.Jsoup;
 import org.jsoup.nodes.Document;
 import org.jsoup.nodes.Element;
 import org.jsoup.select.Elements;
 
 import java.io.IOException;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 public class HanmiApiUtil {
 
@@ -22,20 +19,49 @@
         return parseShowDetail(show);
     }
 
+    private static Map<String, String> getHeaders() {
+        Map<String, String> headers = new HashMap<>();
+        headers.put("sec-fetch-dest", "document");
+        headers.put("sec-fetch-mode", "navigate");
+        headers.put("sec-fetch-site", "same-origin");
+        headers.put("sec-fetch-user", "?1");
+        headers.put("upgrade-insecure-requests", "1");
+        return headers;
+    }
+
+    private static Document getDoc(String link, Map<String, String> headres) throws IOException {
+        Connection connection = Jsoup.connect(link).timeout(60000);
+        if (headres != null)
+            for (Iterator<String> its = headres.keySet().iterator(); its.hasNext(); ) {
+                String key = its.next();
+                connection = connection.header(key, headres.get(key));
+            }
+        Document doc = connection
+                .userAgent("Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_1 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.0 Mobile/14E304 Safari/602.1").get();
+        return doc;
+    }
+
     public static HanmiShow parseShowDetail(HanmiShow show) throws Exception {
         if (show.getUrl() == null || !show.getUrl().startsWith("https://www.hmtv.me/show/")) {
             throw new Exception("閾炬帴涓嶅悎娉�");
         }
-        Document doc = Jsoup.connect(show.getUrl()).timeout(60000).referrer("https://www.hmtv.me/hanju").userAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36").get();
+        Document doc = getDoc(show.getUrl(), getHeaders());
 
         Element root = doc.getElementsByClass("video-content").get(0);
         Element titleItem = root.getElementsByClass("article-title").get(0);
 
         //鏍囬
-        String title = titleItem.getElementsByClass("item-title").get(0).ownText();
+        String title = null;
+        try {
+            title = titleItem.getElementsByClass("item-title").get(0).ownText();
+        } catch (IndexOutOfBoundsException e) {
+        }
 
-        String year = titleItem.getElementsByClass("item-year").get(0).ownText();
-
+        String year = null;
+        try {
+            year = titleItem.getElementsByClass("item-year").get(0).ownText();
+        } catch (IndexOutOfBoundsException e) {
+        }
 
         //鑺傜洰淇℃伅
         Element videoBox = root.getElementsByClass("video_box").get(0);
@@ -57,14 +83,34 @@
         Element eposide = root.getElementsByClass("video_list_li").get(0);
         Elements eposides = eposide.getElementsByTag("a");
         List<HanmiShowEpisode> episodeList = new ArrayList<>();
-        for (int i = 0; i < eposides.size(); i++) {
-            String href = eposides.get(i).attr("href");
-            String tag = eposides.get(i).ownText();
+
+
+        //鐢靛奖
+        if (show.getType() != null && show.getType().contains("褰�")) {
+            int index = 0;
+//            for (int i = 0; i < eposides.size(); i++) {
+//                String tag = eposides.get(i).ownText();
+//                if (tag.contains("HD")) {
+//                    index = i;
+//                    break;
+//                }
+//            }
+            String href = eposides.get(index).attr("href");
             HanmiShowEpisode ep = new HanmiShowEpisode();
-            ep.setOrderBy(i + 1);
+            ep.setOrderBy(0);
             ep.setPlayUrl("https://www.hmtv.me" + href);
-            ep.setTag(tag);
+            ep.setTag(show.getTitle() != null ? show.getTitle() : title);
             episodeList.add(ep);
+        } else {
+            for (int i = 0; i < eposides.size(); i++) {
+                String href = eposides.get(i).attr("href");
+                String tag = eposides.get(i).ownText();
+                HanmiShowEpisode ep = new HanmiShowEpisode();
+                ep.setOrderBy(i + 1);
+                ep.setPlayUrl("https://www.hmtv.me" + href);
+                ep.setTag(tag);
+                episodeList.add(ep);
+            }
         }
 
         //绠�浠�
@@ -73,10 +119,12 @@
 
         if (show.getTitle() == null)
             show.setTitle(title.split(" ")[0]);
-        show.setYear(year.replace("(", "").replace(")", ""));
+
         show.setPicture(picture);
         if (infos.get("涓绘紨") != null)
-            show.setActors(infos.get("涓绘紨").replace("/", ","));
+            show.setActors(infos.get("涓绘紨").
+
+                    replace("/", ","));
         if (infos.get("瀵兼紨") != null)
             show.setDirector(infos.get("瀵兼紨"));
         if (infos.get("绫诲瀷") != null)
@@ -84,9 +132,39 @@
         if (infos.get("鍥藉/鍦板尯") != null)
             show.setArea(infos.get("鍥藉/鍦板尯"));
         if (infos.get("棣栨挱") != null)
-            show.setRelaseDate(infos.get("棣栨挱").substring(0, infos.get("棣栨挱").indexOf("(") > -1 ? infos.get("棣栨挱").indexOf("(") : infos.get("棣栨挱").length()));
+            show.setRelaseDate(infos.get("棣栨挱").
 
-        show.setId(show.getUrl().replace("https://www.hmtv.me/show/", "").trim());
+                    substring(0, infos.get("棣栨挱").
+
+                            indexOf("(") > -1 ? infos.get("棣栨挱").
+
+                            indexOf("(") : infos.get("棣栨挱").
+
+                            length()));
+        if (infos.get("涓婃槧鏃ユ湡") != null)
+            show.setRelaseDate(infos.get("涓婃槧鏃ユ湡").
+
+                    substring(0, infos.get("涓婃槧鏃ユ湡").
+
+                            indexOf("(") > -1 ? infos.get("涓婃槧鏃ユ湡").
+
+                            indexOf("(") : infos.get("涓婃槧鏃ユ湡").
+
+                            length()));
+
+
+        if (year == null && show.getRelaseDate() != null) {
+            year = show.getRelaseDate().split("-")[0];
+        }
+
+        show.setYear(year.replace("(", "").
+                replace(")", ""));
+
+        show.setId(show.getUrl().
+
+                replace("https://www.hmtv.me/show/", "").
+
+                trim());
         show.setEpisodeList(episodeList);
         show.setUrl(show.getUrl());
         show.setDesc(desc.trim());
@@ -95,8 +173,18 @@
 
 
     public static List<HanmiShow> parseList(String listUrl) throws IOException {
+        Map<String, String> headers = new HashMap<>();
+        headers.put("sec-fetch-dest", "document");
+        headers.put("sec-fetch-mode", "navigate");
+        headers.put("sec-fetch-site", "same-origin");
+        headers.put("sec-fetch-user", "?1");
+        headers.put("upgrade-insecure-requests", "1");
+
+
         List<HanmiShow> list = new ArrayList<>();
-        Document doc = Jsoup.connect(listUrl).timeout(60000).referrer("https://www.hmtv.me/hanju").userAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36").get();
+        Document doc = getDoc(listUrl, headers);
+        String type = doc.getElementsByClass("list-content").get(0).getElementsByClass("title").get(0).getElementsByTag("strong").text();
+
         Element root = doc.getElementsByClass("m-movies").get(0);
         Elements items = root.getElementsByClass("u-movie");
         for (int i = 0; i < items.size(); i++) {
@@ -110,11 +198,53 @@
                 show.setScore(score);
             }
             show.setTitle(item.getElementsByTag("h2").get(0).getElementsByTag("a").get(0).ownText());
+            show.setType(type);
+            show.setId(show.getUrl().
+                    replace("https://www.hmtv.me/show/", "").
+                    trim());
             list.add(show);
         }
 
         return list;
     }
+
+
+    /**
+     * 鏍规嵁閾炬帴鑾峰彇鍓ч泦
+     *
+     * @param playUrl
+     * @return
+     */
+    public static List<HanmiShowEpisode> getShowEpisodesFromPlayUrl(String playUrl) throws IOException {
+        List<HanmiShowEpisode> episodeList = new ArrayList<>();
+        Document doc = getDoc(playUrl, null);
+        Element els = doc.getElementById("playnav");
+        Elements items = els.getElementsByTag("li");
+        int playIndex = -1;
+        for (int i = 0; i < items.size(); i++) {
+            String name = items.get(i).text();
+            if (name.contains("HM")) {
+                playIndex = i;
+                break;
+            }
+        }
+        if (playIndex < 0)
+            return null;
+        Element tab = doc.getElementById("playcontainer").getElementsByClass("tab").get(playIndex);
+        Elements es = tab.getElementsByTag("a");
+
+        for (int i = 0; i < es.size(); i++) {
+            HanmiShowEpisode episode = new HanmiShowEpisode();
+            String href = "https://www.hmtv.me" + es.get(i).attr("href");
+            String name = es.get(i).text();
+            episode.setTag(name);
+            episode.setPlayUrl(href);
+            episode.setOrderBy(i + 1);
+            episodeList.add(episode);
+        }
+        return episodeList;
+    }
+
 
     public static List<HanmiShow> parseDetailList(List<HanmiShow> showList) throws Exception {
         List<HanmiShow> list = new ArrayList<>();
@@ -129,7 +259,8 @@
     }
 
     public static void main(String[] args) throws Exception {
-        parseDetailList(parseList("https://www.hmtv.me/hanju"));
+        List<HanmiShowEpisode> list = getShowEpisodesFromPlayUrl("https://www.hmtv.me/vplay/MTExNS0xLTA=.html");
+        System.out.println(list);
     }
 
 }

--
Gitblit v1.8.0