Add three adult

pull/69/head
FongMi 3 years ago
parent c477b8e266
commit 85cccdf13c
  1. 6
      app/src/main/java/com/github/catvod/bean/Vod.java
  2. 7
      app/src/main/java/com/github/catvod/net/OkHttpUtil.java
  3. 4
      app/src/main/java/com/github/catvod/spider/Ali.java
  4. 104
      app/src/main/java/com/github/catvod/spider/Jable.java
  5. 83
      app/src/main/java/com/github/catvod/spider/Pig.java
  6. 192
      app/src/main/java/com/github/catvod/spider/Supjav.java
  7. 5
      app/src/main/java/com/github/catvod/utils/Misc.java
  8. 2
      app/src/main/java/com/github/catvod/utils/Trans.java
  9. BIN
      jar/custom_spider.jar
  10. 2
      jar/custom_spider.jar.md5

@ -35,6 +35,12 @@ public class Vod {
public Vod() {
}
public Vod(String vodId, String vodName, String vodPic) {
setVodId(vodId);
setVodName(vodName);
setVodPic(vodPic);
}
public Vod(String vodId, String vodName, String vodPic, String vodRemarks) {
setVodId(vodId);
setVodName(vodName);

@ -143,4 +143,11 @@ public class OkHttpUtil {
public static void cancel(Object tag) {
cancel(defaultClient(), tag);
}
public static String getRedirectLocation(Map<String, List<String>> headers) {
if (headers == null) return null;
if (headers.containsKey("location")) return headers.get("location").get(0);
if (headers.containsKey("Location")) return headers.get("Location").get(0);
return null;
}
}

@ -236,7 +236,7 @@ public class Ali {
JSONArray taskList = new JSONObject(json).getJSONObject("video_preview_play_info").getJSONArray("live_transcoding_task_list");
Map<String, List<String>> respHeaders = new HashMap<>();
OkHttpUtil.stringNoRedirect(getPreviewQuality(taskList), getHeaders(), respHeaders);
return respHeaders.get("location").get(0);
return OkHttpUtil.getRedirectLocation(respHeaders);
} catch (Exception e) {
e.printStackTrace();
return "";
@ -252,7 +252,7 @@ public class Ali {
String url = new JSONObject(json).optString("download_url");
Map<String, List<String>> respHeaders = new HashMap<>();
OkHttpUtil.stringNoRedirect(url, getHeaders(), respHeaders);
return respHeaders.get("location").get(0);
return OkHttpUtil.getRedirectLocation(respHeaders);
} catch (Exception e) {
e.printStackTrace();
return "";

@ -0,0 +1,104 @@
package com.github.catvod.spider;
import com.github.catvod.bean.Class;
import com.github.catvod.bean.Result;
import com.github.catvod.bean.Vod;
import com.github.catvod.crawler.Spider;
import com.github.catvod.net.OkHttpUtil;
import com.github.catvod.utils.Misc;
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;
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<String, String> getHeaders() {
HashMap<String, String> headers = new HashMap<>();
headers.put("User-Agent", Misc.CHROME);
return headers;
}
@Override
public String homeContent(boolean filter) throws Exception {
List<Vod> list = new ArrayList<>();
List<Class> classes = new ArrayList<>();
Document doc = Jsoup.parse(OkHttpUtil.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(OkHttpUtil.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<String, String> extend) throws Exception {
List<Vod> 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(OkHttpUtil.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<String> ids) throws Exception {
Document doc = Jsoup.parse(OkHttpUtil.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("播放$" + Misc.getVar(doc.html(), "hlsUrl"));
return Result.string(vod);
}
@Override
public String searchContent(String key, boolean quick) throws Exception {
List<Vod> list = new ArrayList<>();
Document doc = Jsoup.parse(OkHttpUtil.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<String> vipFlags) throws Exception {
return Result.get().url(id).header(getHeaders()).string();
}
}

@ -0,0 +1,83 @@
package com.github.catvod.spider;
import com.github.catvod.bean.Class;
import com.github.catvod.bean.Result;
import com.github.catvod.bean.Vod;
import com.github.catvod.crawler.Spider;
import com.github.catvod.net.OkHttpUtil;
import com.github.catvod.utils.Misc;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
public class Pig extends Spider {
private static final String siteUrl = "https://pigav.com/";
private HashMap<String, String> getHeaders() {
HashMap<String, String> headers = new HashMap<>();
headers.put("User-Agent", Misc.CHROME);
return headers;
}
@Override
public String homeContent(boolean filter) throws Exception {
List<Vod> list = new ArrayList<>();
List<Class> classes = new ArrayList<>();
Document doc = Jsoup.parse(OkHttpUtil.string(siteUrl, getHeaders()));
for (Element element : doc.select("li.menu-item > a")) {
String typeId = element.attr("href").replace(siteUrl, "");
String typeName = element.text();
if (typeId.contains("goav.one")) break;
classes.add(new Class(typeId, typeName));
}
for (Element element : doc.select("div.media")) {
String pic = element.select("span").attr("data-bgsrc");
String url = element.select("a").attr("href");
String name = element.select("a").attr("title");
String id = url.replace(siteUrl, "");
list.add(new Vod(id, name, pic));
}
return Result.string(classes, list);
}
@Override
public String categoryContent(String tid, String pg, boolean filter, HashMap<String, String> extend) throws Exception {
List<Vod> list = new ArrayList<>();
String target = siteUrl.concat(tid).concat("/page/").concat(pg);
Document doc = Jsoup.parse(OkHttpUtil.string(target, getHeaders()));
for (Element element : doc.select("div.media")) {
String pic = element.select("span").attr("data-bgsrc");
String url = element.select("a").attr("href");
String name = element.select("a").attr("title");
String id = url.replace(siteUrl, "");
list.add(new Vod(id, name, pic));
}
return Result.string(list);
}
@Override
public String detailContent(List<String> ids) throws Exception {
Document doc = Jsoup.parse(OkHttpUtil.string(siteUrl.concat("/").concat(ids.get(0)), getHeaders()));
String url = doc.select("source").attr("src");
String name = doc.select("h1.is-title").text();
String pic = doc.select("video.video-js").attr("poster");
Vod vod = new Vod();
vod.setVodId(ids.get(0));
vod.setVodPic(pic);
vod.setVodName(name);
vod.setVodPlayFrom("朱古力");
vod.setVodPlayUrl("播放$" + url);
return Result.string(vod);
}
@Override
public String playerContent(String flag, String id, List<String> vipFlags) throws Exception {
return Result.get().url(id).header(getHeaders()).string();
}
}

@ -0,0 +1,192 @@
package com.github.catvod.spider;
import android.net.Uri;
import android.text.TextUtils;
import com.github.catvod.bean.Class;
import com.github.catvod.bean.Result;
import com.github.catvod.bean.Vod;
import com.github.catvod.crawler.Spider;
import com.github.catvod.net.OkHttpUtil;
import com.github.catvod.utils.Misc;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
public class Supjav extends Spider {
private static final String siteUrl = "https://supjav.com/zh/";
private static final String playUrl = "https://lk1.supremejav.com/";
private HashMap<String, String> getHeaders() {
return getHeaders(siteUrl);
}
private HashMap<String, String> getHeaders(String referer) {
HashMap<String, String> headers = new HashMap<>();
headers.put("User-Agent", Misc.CHROME);
headers.put("Referer", referer);
return headers;
}
@Override
public String homeContent(boolean filter) {
List<Vod> list = new ArrayList<>();
List<Class> classes = new ArrayList<>();
Document doc = Jsoup.parse(OkHttpUtil.string(siteUrl, getHeaders()));
for (Element element : doc.select("ul.nav > li > a")) {
String href = element.attr("href");
if (href.split("/").length < 5) continue;
String typeId = href.replace(siteUrl, "");
String typeName = element.text();
classes.add(new Class(typeId, typeName));
}
for (Element element : doc.select("div.post")) {
String src = element.select("img").attr("src");
String data = element.select("img").attr("data-original");
String url = element.select("a").attr("href");
String name = element.select("a").attr("title");
String pic = TextUtils.isEmpty(data) ? src : data;
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<String, String> extend) {
List<Vod> list = new ArrayList<>();
Document doc = Jsoup.parse(OkHttpUtil.string(siteUrl + tid + "/page/" + pg, getHeaders()));
for (Element element : doc.select("div.post")) {
String pic = element.select("img").attr("data-original");
String url = element.select("a").attr("href");
String name = element.select("a").attr("title");
String id = url.split("/")[4];
list.add(new Vod(id, name, pic));
}
return Result.string(list);
}
@Override
public String detailContent(List<String> ids) {
Document doc = Jsoup.parse(OkHttpUtil.string(siteUrl.concat(ids.get(0)), getHeaders()));
String name = doc.select("div.post-meta > img").attr("alt");
String img = doc.select("div.post-meta > img").attr("src");
String type = doc.select("p.cat > a").text();
String director = "", actor = "";
for (Element p : doc.select("div.cats > p")) {
if (p.select("span").text().contains("Maker")) {
director = p.select("a").text();
}
if (p.select("span").text().contains("Cast")) {
actor = p.select("a").text();
}
}
Vod vod = new Vod();
vod.setVodId(ids.get(0));
vod.setVodPic(img);
vod.setVodName(name);
vod.setVodActor(actor);
vod.setVodDirector(director);
vod.setTypeName(type);
Map<String, String> sites = new LinkedHashMap<>();
Elements sources = doc.select("a.btn-server");
for (int i = 0; i < sources.size(); i++) {
Element source = sources.get(i);
String sourceName = source.text();
if (sourceName.equals("JPA")) continue;
String sourceUrl = source.attr("data-link");
sites.put(sourceName, "播放" + "$" + sourceUrl);
}
if (sites.size() > 0) {
vod.setVodPlayFrom(TextUtils.join("$$$", sites.keySet()));
vod.setVodPlayUrl(TextUtils.join("$$$", sites.values()));
}
return Result.string(vod);
}
@Override
public String searchContent(String key, boolean quick) {
List<Vod> list = new ArrayList<>();
Document doc = Jsoup.parse(OkHttpUtil.string(siteUrl.concat("?s=").concat(URLEncoder.encode(key)), getHeaders()));
for (Element element : doc.select("div.post")) {
String pic = element.select("img").attr("data-original");
String url = element.select("a").attr("href");
String name = element.select("a").attr("title");
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<String> vipFlags) {
Map<String, List<String>> respHeaders = new HashMap<>();
OkHttpUtil.stringNoRedirect(playUrl + "supjav.php?c=" + new StringBuilder(id).reverse(), getHeaders(playUrl), respHeaders);
String redirect = OkHttpUtil.getRedirectLocation(respHeaders);
switch (flag) {
case "TV":
return parseTV(redirect);
case "ST":
return parseST(redirect);
case "DS":
return parseDS(redirect);
default:
return Result.get().url(id).parse().string();
}
}
private String parseTV(String redirect) {
String data = OkHttpUtil.string(redirect, getHeaders(playUrl));
return Result.get().url(Misc.getVar(data, "urlPlay")).header(getHeaders(redirect)).string();
}
private String parseST(String redirect) {
Map<String, List<String>> respHeaders = new HashMap<>();
String data = OkHttpUtil.string(redirect, getHeaders(playUrl));
String robot = Jsoup.parse(data).getElementById("robotlink").text();
robot = robot.substring(0, robot.indexOf("&token=") + 7);
for (String text : data.split("&token=")) {
if (!text.contains("').substring(")) continue;
robot = "https:/" + robot + text.split("'")[0] + "&stream=1";
OkHttpUtil.stringNoRedirect(robot, getHeaders(redirect), respHeaders);
String url = OkHttpUtil.getRedirectLocation(respHeaders);
return Result.get().url(url).header(getHeaders(redirect)).string();
}
return "";
}
private String parseDS(String redirect) {
String host = "https://" + Uri.parse(redirect).getHost();
Map<String, List<String>> respHeaders = new HashMap<>();
OkHttpUtil.stringNoRedirect(redirect, getHeaders(playUrl), respHeaders);
redirect = host + OkHttpUtil.getRedirectLocation(respHeaders);
String data = OkHttpUtil.string(redirect, getHeaders());
for (String text : data.split("'")) {
if (!text.startsWith("/pass_md5/")) continue;
String token = text.split("/")[3];
String url = OkHttpUtil.string(host + text, getHeaders(redirect));
url = url + getDSRnd() + "?token=" + token + "&expiry=" + System.currentTimeMillis();
return Result.get().url(url).header(getHeaders(redirect)).string();
}
return "";
}
private String getDSRnd() {
StringBuilder sb = new StringBuilder();
String t = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
for (int o = 0; o < 10; o++) sb.append(t.charAt((int) Math.floor(Math.random() * t.length())));
return sb.toString();
}
}

@ -149,6 +149,11 @@ public class Misc {
}
}
public static String getVar(String data, String param) {
for (String var : data.split("var")) if (var.contains(param)) return var.split("'")[1];
return "";
}
public static String MD5(String src) {
return MD5(src, StandardCharsets.UTF_8);
}

File diff suppressed because one or more lines are too long

Binary file not shown.

@ -1 +1 @@
f56657fee19cd217607a458809c350b4
0064f03c02c06b3670e9f5a9d16f53dc

Loading…
Cancel
Save