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