package com.yeshi.buwan.util.video.web; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; import org.yeshi.utils.HttpUtil; import org.yeshi.utils.StringUtil; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.util.*; public class TencentWebUtil { public static class TencentWebVideoInfo { private String playUrl; private String id; private String title; private String picture; private String duration; public String getPlayUrl() { return playUrl; } public void setPlayUrl(String playUrl) { this.playUrl = playUrl; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getPicture() { return picture; } public void setPicture(String picture) { this.picture = picture; } public String getDuration() { return duration; } public void setDuration(String duration) { this.duration = duration; } } public static Map parseParams(String url) { //清除参数 String param = null; if (url.indexOf("?") > -1) { param = url.substring(url.indexOf("?")); } if (!url.contains("v.qq.com")) { return null; } String[] params = param.split("&"); Map map = new HashMap<>(); for (String p : params) { map.put(p.split("=")[0], URLDecoder.decode(p.split("=")[1])); } return map; } /** * 获取短视频列表 * * @param params * @param page * @return * @throws Exception */ public static List getVideoList(Map params, int page) throws Exception { if (params == null) throw new Exception("参数为空"); int pageSize = 30; params.put("append", "1"); params.put("listpage", page + ""); params.put("offset", (page - 1) * pageSize + ""); params.put("pagesize", pageSize + ""); String url = "https://v.qq.com/x/bu/pagesheet/list"; Map headers = new HashMap<>(); headers.put("referer", "https://v.qq.com/channel/ent"); headers.put("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.164 Safari/537.36"); String result = HttpUtil.get(url, params, headers); Document document = Jsoup.parse(result); Elements els = document.getElementsByClass("list_item"); return parseVideoList(els); } public static List getVideoList(String url) throws Exception { Map headers = new HashMap<>(); headers.put("referer", "https://v.qq.com/channel/ent"); headers.put("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.164 Safari/537.36"); String result = HttpUtil.get(url, new HashMap<>(), headers); Document document = Jsoup.parse(result); Elements els = document.getElementsByClass("list_item"); return parseVideoList(els); } private static List parseVideoList(Elements els) throws UnsupportedEncodingException { List list = new ArrayList<>(); for (int i = 0; i < els.size(); i++) { Element ele = els.get(i); String href = ele.getElementsByTag("a").get(0).attr("href"); String id = ele.getElementsByTag("a").get(0).attr("data-float"); String title = ele.getElementsByTag("a").get(0).attr("title"); title = new String(title.getBytes("ISO-8859-1"), "UTF-8"); String picture = ele.getElementsByTag("img").get(0).attr("src"); picture = picture.startsWith("http") ? picture : "https:" + picture; String duration = null; try { duration = ele.getElementsByClass("figure_caption").get(0).ownText(); duration = duration.trim(); for (int j = 0; j < duration.length(); j++) { char ca = duration.charAt(j); if (!(ca >= 48 && ca < 59)) { duration = null; break; } } System.out.println(duration); } catch (Exception e) { } TencentWebVideoInfo videoInfo = new TencentWebVideoInfo(); videoInfo.setDuration(duration); videoInfo.setId(id); videoInfo.setPicture(picture); videoInfo.setPlayUrl(href); videoInfo.setTitle(title); list.add(videoInfo); } return list; } public static String getApiUrl(String webUrl, int page) { Map params = parseParams(webUrl); int pageSize = 30; params.put("append", "1"); params.put("listpage", page + ""); params.put("offset", (page - 1) * pageSize + ""); params.put("pagesize", pageSize + ""); String url = "https://v.qq.com/x/bu/pagesheet/list"; List paramsList = new ArrayList<>(); for (Iterator its = params.keySet().iterator(); its.hasNext(); ) { String key = its.next(); String value = params.get(key); try { paramsList.add(key + "=" + URLDecoder.decode(value, "UTF-8")); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } return url + "?" + StringUtil.concat(paramsList, "&"); } public static void main(String[] args) throws Exception { List videoInfos = getVideoList(parseParams("https://v.qq.com/channel/ent?_all=1&channel=ent&iarea=2&itype=-1&listpage=1&sort=40"), 1); System.out.println(videoInfos); } }