package com.github.catvod.spider; import com.github.catvod.bean.Result; import com.github.catvod.bean.Vod; import com.github.catvod.crawler.Spider; import com.github.catvod.net.OkHttp; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import java.net.URLEncoder; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Locale; import com.github.catvod.bean.Class; import com.github.catvod.utils.Util; public class Jable extends Spider { private static final String siteUrl = "https://jable.tv"; private static final String cateUrl = siteUrl + "/categories/"; private static final String detailUrl = siteUrl + "/videos/"; private static final String searchUrl = siteUrl + "/search/"; private HashMap getHeaders() { HashMap headers = new HashMap<>(); headers.put("User-Agent", "PostmanRuntime/7.36.3"); headers.put("Host", "jable.tv"); headers.put("Postman-Token", "33290483-3c8d-413f-a160-0d3aea9e6f95"); return headers; } @Override public String homeContent(boolean filter) throws Exception { List list = new ArrayList<>(); List classes = new ArrayList<>(); Document doc = Jsoup.parse(OkHttp.string(cateUrl, getHeaders())); for (Element element : doc.select("div.img-box > a")) { String typeId = element.attr("href").split("/")[4]; String typeName = element.select("div.absolute-center > h4").text(); classes.add(new Class(typeId, typeName)); } doc = Jsoup.parse(OkHttp.string(siteUrl, getHeaders())); for (Element element : doc.select("div.video-img-box")) { String pic = element.select("img").attr("data-src"); String url = element.select("a").attr("href"); String name = element.select("div.detail > h6").text(); if (pic.endsWith(".gif") || name.isEmpty()) continue; String id = url.split("/")[4]; list.add(new Vod(id, name, pic)); } return Result.string(classes, list); } @Override public String categoryContent(String tid, String pg, boolean filter, HashMap extend) throws Exception { List list = new ArrayList<>(); String target = cateUrl + tid + "/?mode=async&function=get_block&block_id=list_videos_common_videos_list&sort_by=post_date&from=" + String.format(Locale.getDefault(), "%02d", Integer.parseInt(pg)) + "&_=" + System.currentTimeMillis(); Document doc = Jsoup.parse(OkHttp.string(target, getHeaders())); for (Element element : doc.select("div.video-img-box")) { String pic = element.select("img").attr("data-src"); String url = element.select("a").attr("href"); String name = element.select("div.detail > h6").text(); String id = url.split("/")[4]; list.add(new Vod(id, name, pic)); } return Result.string(list); } @Override public String detailContent(List ids) throws Exception { Document doc = Jsoup.parse(OkHttp.string(detailUrl.concat(ids.get(0)).concat("/"), getHeaders())); String name = doc.select("meta[property=og:title]").attr("content"); String pic = doc.select("meta[property=og:image]").attr("content"); String year = doc.select("span.inactive-color").get(0).text(); Vod vod = new Vod(); vod.setVodId(ids.get(0)); vod.setVodPic(pic); vod.setVodYear(year.replace("上市於 ", "")); vod.setVodName(name); vod.setVodPlayFrom("Jable"); vod.setVodPlayUrl("播放$" + Util.getVar(doc.html(), "hlsUrl")); return Result.string(vod); } @Override public String searchContent(String key, boolean quick) throws Exception { List list = new ArrayList<>(); Document doc = Jsoup.parse(OkHttp.string(searchUrl.concat(URLEncoder.encode(key)).concat("/"), getHeaders())); for (Element element : doc.select("div.video-img-box")) { String pic = element.select("img").attr("data-src"); String url = element.select("a").attr("href"); String name = element.select("div.detail > h6").text(); String id = url.split("/")[4]; list.add(new Vod(id, name, pic)); } return Result.string(list); } @Override public String playerContent(String flag, String id, List vipFlags) throws Exception { return Result.get().url(id).header(getHeaders()).string(); } }