diff --git a/app/build.gradle b/app/build.gradle index 1dc43b5f..e9cf110f 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -42,7 +42,7 @@ android { dependencies { implementation 'com.squareup.okhttp3:okhttp:' + okhttpVersion implementation 'com.github.thegrizzlylabs:sardine-android:0.9' - implementation 'wang.harlon.quickjs:wrapper-android:2.4.4' + implementation 'wang.harlon.quickjs:wrapper-android:2.4.5' implementation 'com.google.code.gson:gson:2.11.0' implementation 'cn.wanghaomiao:JsoupXpath:2.5.1' implementation 'com.orhanobut:logger:2.2.0' diff --git a/app/src/main/java/com/github/catvod/bean/uvod/Data.java b/app/src/main/java/com/github/catvod/bean/uvod/Data.java deleted file mode 100644 index bd94323f..00000000 --- a/app/src/main/java/com/github/catvod/bean/uvod/Data.java +++ /dev/null @@ -1,168 +0,0 @@ -package com.github.catvod.bean.uvod; - -import android.text.TextUtils; - -import com.github.catvod.bean.Vod; -import com.google.gson.Gson; -import com.google.gson.JsonObject; -import com.google.gson.JsonParser; -import com.google.gson.annotations.SerializedName; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -public class Data { - - @SerializedName("video_fragment_list") - private List videoFragmentList; - @SerializedName(value = "video_latest_list", alternate = {"video_list"}) - private List videolatestlist; - @SerializedName(value = "video", alternate = {"video_soruce"}) - private Video video; - - public static Data objectFrom(String str) { - JsonObject jsonObject = JsonParser.parseString(str).getAsJsonObject(); - if (jsonObject.has("data")) return new Gson().fromJson(jsonObject.get("data"), Data.class); - return new Data(); - } - - public List getVideoFragmentList() { - return videoFragmentList == null ? Collections.emptyList() : videoFragmentList; - } - - public List getVideoLatest() { - return videolatestlist == null ? Collections.emptyList() : videolatestlist; - } - - public Video getVideo() { - return video == null ? new Video() : video; - } - - public List getList() { - List list = new ArrayList<>(); - for (Data.VideoLatest video : getVideoLatest()) list.add(video.vod()); - return list; - } - - public static class VideoLatest { - - @SerializedName("id") - private String id; - @SerializedName("title") - private String title; - @SerializedName("pic") - private String pic; - @SerializedName("state") - private String state; - @SerializedName("last_fragment_symbol") - private String lastfragment; - @SerializedName("year") - private String year; - - public String getId() { - return TextUtils.isEmpty(id) ? "" : id; - } - - public String getTitle() { - return TextUtils.isEmpty(title) ? "" : title; - } - - public String getPic() { - return TextUtils.isEmpty(pic) ? "" : pic; - } - - public String getState() { - return TextUtils.isEmpty(state) ? "" : state; - } - - public String getLastFragment() { - return TextUtils.isEmpty(lastfragment) ? "" : lastfragment; - } - - public String getYear() { - return TextUtils.isEmpty(year) ? "" : year; - } - - public Vod vod() { - return new Vod(getId(), getTitle(), getPic(), getState() + getLastFragment()); - } - } - - public static class Video { - - @SerializedName("year") - private String year; - @SerializedName("region") - private String region; - @SerializedName("starring") - private String starring; - @SerializedName("state") - private String state; - @SerializedName("description") - private String description; - @SerializedName("director") - private String director; - @SerializedName("language") - private String language; - @SerializedName("url") - private String url; - - public String getYear() { - return TextUtils.isEmpty(year) ? "" : year; - } - - public String getRegion() { - return TextUtils.isEmpty(region) ? "" : region; - } - - public String getStarring() { - return TextUtils.isEmpty(starring) ? "" : starring; - } - - public String getDescription() { - return TextUtils.isEmpty(description) ? "" : description; - } - - public String getState() { - return TextUtils.isEmpty(state) ? "" : state; - } - - public String getDirector() { - return TextUtils.isEmpty(director) ? "" : director; - } - - public String getLanguage() { - return TextUtils.isEmpty(language) ? "" : language; - } - - public String getUrl() { - return TextUtils.isEmpty(url) ? "" : url; - } - } - - public static class VideoFragmentList { - - @SerializedName("id") - private String id; - @SerializedName("symbol") - private String symbol; - @SerializedName("qualities") - private List qualities; - - public String getId() { - return TextUtils.isEmpty(id) ? "" : id; - } - - public String getSymbol() { - return TextUtils.isEmpty(symbol) ? "" : symbol; - } - - public List getQualities() { - if (qualities == null || qualities.isEmpty()) return Collections.emptyList(); - Collections.sort(qualities, Collections.reverseOrder()); - return qualities; - } - - } -} \ No newline at end of file diff --git a/app/src/main/java/com/github/catvod/debug/MainActivity.java b/app/src/main/java/com/github/catvod/debug/MainActivity.java index ba9bdffe..e394b18f 100644 --- a/app/src/main/java/com/github/catvod/debug/MainActivity.java +++ b/app/src/main/java/com/github/catvod/debug/MainActivity.java @@ -7,7 +7,7 @@ import android.widget.Button; import com.github.catvod.R; import com.github.catvod.crawler.Spider; import com.github.catvod.spider.Init; -import com.github.catvod.spider.Uvod; +import com.github.catvod.spider.PTT; import com.orhanobut.logger.AndroidLogAdapter; import com.orhanobut.logger.Logger; @@ -46,7 +46,7 @@ public class MainActivity extends Activity { private void initSpider() { try { Init.init(getApplicationContext()); - spider = new Uvod(); + spider = new PTT(); spider.init(this, ""); } catch (Throwable e) { e.printStackTrace(); diff --git a/app/src/main/java/com/github/catvod/spider/AList.java b/app/src/main/java/com/github/catvod/spider/AList.java index 413f1987..f5264612 100644 --- a/app/src/main/java/com/github/catvod/spider/AList.java +++ b/app/src/main/java/com/github/catvod/spider/AList.java @@ -122,14 +122,13 @@ public class AList extends Spider { String path = id.substring(0, id.lastIndexOf("/")); String name = path.substring(path.lastIndexOf("/") + 1); Drive drive = getDrive(key); - List parents = getList(path, false); - Sorter.sort("name", "asc", parents); Vod vod = new Vod(); vod.setVodPlayFrom(key); vod.setVodId(id); vod.setVodName(name); vod.setVodPic(vodPic); List playUrls = new ArrayList<>(); + List parents = getList(path, false); for (Item item : parents) if (item.isMedia(drive.isNew())) playUrls.add(item.getName() + "$" + item.getVodId(path) + findSubs(path, parents)); vod.setVodPlayUrl(TextUtils.join("#", playUrls)); return Result.string(vod); diff --git a/app/src/main/java/com/github/catvod/spider/AppXY.java b/app/src/main/java/com/github/catvod/spider/AppXY.java deleted file mode 100644 index d081f81b..00000000 --- a/app/src/main/java/com/github/catvod/spider/AppXY.java +++ /dev/null @@ -1,112 +0,0 @@ -package com.github.catvod.spider; - -import android.content.Context; -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.OkHttp; -import com.github.catvod.utils.Crypto; - -import org.json.JSONArray; -import org.json.JSONObject; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author leospring - * 星牙短剧 - */ -public class AppXY extends Spider { - - private String auth; - - private Map getHeader() { - Map map = new HashMap<>(); - map.put("User-Agent", "okhttp/4.10.0"); - if (!TextUtils.isEmpty(auth)) map.put("Authorization", auth); - return map; - } - - @Override - public void init(Context context, String extend) throws Exception { - String s = System.currentTimeMillis() + ""; - Map map = new HashMap<>(); - map.put("device", Crypto.md5(s)); - map.put("install_first_open", "true"); - map.put("first_install_time", s); - map.put("last_update_time", s); - auth = new JSONObject(OkHttp.post("https://app.whjzjx.cn/v1/account/login", map, getHeader()).getBody()).optJSONObject("data").optString("token"); - } - - @Override - public String homeContent(boolean filter) throws Exception { - ArrayList classes = new ArrayList<>(); - JSONArray array = new JSONObject(OkHttp.string("https://app.whjzjx.cn/cloud/v2/theater/classes", getHeader())).optJSONObject("data").optJSONArray("list"); - for (int i = 0; i < array.length(); ++i) { - JSONObject object = array.optJSONObject(i); - if (!object.optString("show_type").contains("Bookstore")) { - classes.add(new Class(object.optString("id"), object.optString("class_name"))); - } - } - return Result.string(classes, new ArrayList<>()); - } - - @Override - public String categoryContent(String tid, String pg, boolean filter, HashMap extend) throws Exception { - List videos = new ArrayList<>(); - String class2Id = extend.get("class2_id"); - if (class2Id == null) class2Id = "0"; - JSONArray array = new JSONObject(OkHttp.string(("https://app.whjzjx.cn/cloud/v2/theater/home_page?theater_class_id=" + tid + "&class2_ids=" + class2Id + "&type=1&page_num=" + pg + "&page_size=24"), getHeader())).optJSONObject("data").optJSONArray("list"); - for (int v = 0; v < array.length(); ++v) { - JSONObject object = array.optJSONObject(v).optJSONObject("theater"); - videos.add(new Vod(object.optString("id"), object.optString("title"), object.optString("cover_url"), object.optString("total") + "集")); - } - return Result.string(videos); - } - - @Override - public String detailContent(List ids) throws Exception { - Vod vod = new Vod(); - JSONObject object = new JSONObject(OkHttp.string(("https://app.whjzjx.cn/v2/theater_parent/detail?theater_parent_id=" + ids.get(0)), getHeader())).optJSONObject("data"); - vod.setVodId(ids.get(0)); - vod.setVodName(object.optString("title")); - vod.setVodPic(object.optString("cover_url")); - vod.setTypeName(object.optJSONArray("desc_tags").join(",").replace("\"", "")); - vod.setVodContent(object.optString("introduction")); - ArrayList playUrls = new ArrayList<>(); - ArrayList playFrom = new ArrayList<>(); - playFrom.add("leospring"); - JSONArray array = object.optJSONArray("theaters"); - ArrayList urlNames = new ArrayList<>(); - for (int i = 0; i < array.length(); ++i) { - object = array.optJSONObject(i); - urlNames.add(object.optString("num") + "$" + object.optString("son_video_url")); - } - playUrls.add(TextUtils.join("#", urlNames)); - vod.setVodPlayFrom(TextUtils.join("$$$", playFrom)); - vod.setVodPlayUrl(TextUtils.join("$$$", playUrls)); - return Result.string(vod); - } - - @Override - public String playerContent(String flag, String id, List flags) throws Exception { - return Result.get().url(id).toString(); - } - - @Override - public String searchContent(String key, boolean quick) throws Exception { - List list = new ArrayList<>(); - JSONArray array = new JSONObject(OkHttp.post("https://app.whjzjx.cn/v3/search", new JSONObject().put("text", key).toString(), getHeader()).getBody()).optJSONObject("data").optJSONObject("theater").optJSONArray("search_data"); - for (int i = 0; i < array.length(); ++i) { - JSONObject object = array.optJSONObject(i); - list.add(new Vod(object.optString("id"), object.optString("title"), object.optString("cover_url"), object.optString("score_str"))); - } - return Result.string(list); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/github/catvod/spider/Dm84.java b/app/src/main/java/com/github/catvod/spider/Dm84.java deleted file mode 100644 index b8831c3f..00000000 --- a/app/src/main/java/com/github/catvod/spider/Dm84.java +++ /dev/null @@ -1,179 +0,0 @@ -package com.github.catvod.spider; - -import android.text.TextUtils; - -import com.github.catvod.bean.Class; -import com.github.catvod.bean.Filter; -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 com.github.catvod.utils.Util; - -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; - -/** - * @author FongMi - */ -public class Dm84 extends Spider { - - private static final String siteUrl = "https://dm84.tv"; - - private HashMap getHeaders() { - HashMap headers = new HashMap<>(); - headers.put("User-Agent", Util.CHROME); - headers.put("Accept", Util.ACCEPT); - return headers; - } - - private Filter getFilter(String name, String key, List texts) { - List values = new ArrayList<>(); - for (String text : texts) { - if (text.isEmpty()) continue; - String n = text.replace("按", ""); - String v = key.equals("by") ? replaceBy(text) : text; - values.add(new Filter.Value(n, v)); - } - return new Filter(key, name, values); - } - - private String replaceBy(String text) { - return text.replace("按时间", "time").replace("按人气", "hits").replace("按评分", "score"); - } - - @Override - public String homeContent(boolean filter) { - List list = new ArrayList<>(); - List classes = new ArrayList<>(); - LinkedHashMap> filters = new LinkedHashMap<>(); - Document doc = Jsoup.parse(OkHttp.string(siteUrl, getHeaders())); - for (Element element : doc.select("ul.nav_row > li > a")) { - if (element.attr("href").startsWith("/list")) { - String id = element.attr("href").split("-")[1].substring(0, 1); - String name = element.text().substring(0, 2); - classes.add(new Class(id, name)); - } - } - for (Class item : classes) { - doc = Jsoup.parse(OkHttp.string(siteUrl + "/list-" + item.getTypeId() + ".html", getHeaders())); - Elements elements = doc.select("ul.list_filter > li > div"); - List array = new ArrayList<>(); - array.add(getFilter("類型", "type", elements.get(0).select("a").eachText())); - array.add(getFilter("時間", "year", elements.get(1).select("a").eachText())); - array.add(getFilter("排序", "by", elements.get(2).select("a").eachText())); - filters.put(item.getTypeId(), array); - } - for (Element element : doc.select("div.item")) { - String img = element.select("a.cover").attr("data-bg"); - String url = element.select("a.title").attr("href"); - String name = element.select("a.title").text(); - String remark = element.select("span.desc").text(); - String id = url.split("/")[2]; - list.add(new Vod(id, name, img, remark)); - } - return Result.string(classes, list, filters); - } - - @Override - public String categoryContent(String tid, String pg, boolean filter, HashMap extend) { - List list = new ArrayList<>(); - if (extend.get("type") == null) extend.put("type", ""); - if (extend.get("year") == null) extend.put("year", ""); - if (extend.get("by") == null) extend.put("by", "time"); - String by = extend.get("by"); - String type = URLEncoder.encode(extend.get("type")); - String year = extend.get("year"); - String target = siteUrl + String.format("/show-%s--%s-%s--%s-%s.html", tid, by, type, year, pg); - Document doc = Jsoup.parse(OkHttp.string(target, getHeaders())); - for (Element element : doc.select("div.item")) { - String img = element.select("a.cover").attr("data-bg"); - String url = element.select("a.title").attr("href"); - String name = element.select("a.title").text(); - String remark = element.select("span.desc").text(); - String id = url.split("/")[2]; - list.add(new Vod(id, name, img, remark)); - } - return Result.string(list); - } - - @Override - public String detailContent(List ids) { - Document doc = Jsoup.parse(OkHttp.string(siteUrl.concat("/v/").concat(ids.get(0)), getHeaders())); - String name = doc.select("h1.v_title").text(); - String remarks = doc.select("p.v_desc > span.desc").text(); - String img = doc.select("meta[property=og:image]").attr("content"); - String area = doc.select("meta[name=og:video:area]").attr("content"); - String type = doc.select("meta[name=og:video:class]").attr("content"); - String actor = doc.select("meta[name=og:video:actor]").attr("content"); - String content = doc.select("meta[property=og:description]").attr("content"); - String year = doc.select("meta[name=og:video:release_date]").attr("content"); - String director = doc.select("meta[name=og:video:director]").attr("content"); - - Vod vod = new Vod(); - vod.setVodId(ids.get(0)); - vod.setVodPic(img); - vod.setVodYear(year); - vod.setVodName(name); - vod.setVodArea(area); - vod.setVodActor(actor); - vod.setVodRemarks(remarks); - vod.setVodContent(content); - vod.setVodDirector(director); - vod.setTypeName(type); - - Map sites = new LinkedHashMap<>(); - Elements sources = doc.select("ul.tab_control > li"); - Elements sourceList = doc.select("ul.play_list"); - for (int i = 0; i < sources.size(); i++) { - Element source = sources.get(i); - String sourceName = source.text(); - Elements playList = sourceList.get(i).select("a"); - List vodItems = new ArrayList<>(); - for (int j = 0; j < playList.size(); j++) { - Element e = playList.get(j); - vodItems.add(e.text() + "$" + e.attr("href")); - } - if (vodItems.size() > 0) { - sites.put(sourceName, TextUtils.join("#", vodItems)); - } - } - 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 list = new ArrayList<>(); - String target = siteUrl.concat("/s----------.html?wd=").concat(key); - Document doc = Jsoup.parse(OkHttp.string(target, getHeaders())); - for (Element element : doc.select("div.item")) { - String img = element.select("a.cover").attr("data-bg"); - String url = element.select("a.title").attr("href"); - String name = element.select("a.title").text(); - String remark = element.select("span.desc").text(); - String id = url.split("/")[2]; - list.add(new Vod(id, name, img, remark)); - } - return Result.string(list); - } - - @Override - public String playerContent(String flag, String id, List vipFlags) { - Document doc = Jsoup.parse(OkHttp.string(siteUrl.concat(id), getHeaders())); - String url = doc.select("iframe").attr("src"); - return Result.get().url(url).parse().header(getHeaders()).string(); - } -} diff --git a/app/src/main/java/com/github/catvod/spider/Doll.java b/app/src/main/java/com/github/catvod/spider/Doll.java deleted file mode 100644 index a68f4c5f..00000000 --- a/app/src/main/java/com/github/catvod/spider/Doll.java +++ /dev/null @@ -1,108 +0,0 @@ -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.OkHttp; - -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 Doll extends Spider { - - private final String url = "https://hongkongdollvideo.com/"; - - @Override - public String homeContent(boolean filter) throws Exception { - List classes = new ArrayList<>(); - List list = new ArrayList<>(); - Document doc = Jsoup.parse(OkHttp.string(url)); - for (Element a : doc.select("ul.menu").get(0).select("li > a")) { - String typeName = a.text(); - String typeId = a.attr("href"); - if (typeId.contains(url)) classes.add(new Class(typeId.replace(url, ""), typeName)); - } - for (Element div : doc.select("div.video-item")) { - String id = div.select("a.video-title").attr("href").replace(url, ""); - String name = div.select("a.video-title").text(); - String pic = div.select("div.thumb > a > img").attr("data-src"); - String remark = div.select("div.date").text(); - list.add(new Vod(id, name, pic, remark)); - } - 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 = pg.equals("1") ? url + tid : url + tid + "/" + pg + ".html"; - Document doc = Jsoup.parse(OkHttp.string(target)); - for (Element div : doc.select("div.video-item")) { - String id = div.select("a.video-title").attr("href").replace(url, ""); - String name = div.select("a.video-title").text(); - String pic = div.select("div.thumb > a > img").attr("data-src"); - String remark = div.select("div.date").text(); - list.add(new Vod(id, name, pic, remark)); - } - return Result.string(list); - } - - @Override - public String detailContent(List ids) throws Exception { - String html = OkHttp.string(url + ids.get(0)); - Document doc = Jsoup.parse(html); - String pic = doc.select("meta[property=og:image]").attr("content"); - String name = doc.select("meta[property=og:title]").attr("content"); - Vod vod = new Vod(); - vod.setVodId(ids.get(0)); - vod.setVodPic(pic); - vod.setVodName(name); - vod.setVodPlayFrom("玩偶姐姐"); - vod.setVodPlayUrl("播放$" + url + ids.get(0)); - return Result.string(vod); - } - - @Override - public String playerContent(String flag, String id, List vipFlags) throws Exception { - return Result.get().url(id).parse().click("document.getElementById('player-wrapper').click()").string(); - } - - @Override - public boolean manualVideoCheck() throws Exception { - return true; - } - - @Override - public boolean isVideoFormat(String url) throws Exception { - return !url.contains("afcdn.net") && url.contains(".m3u8"); - } - - @Override - public String searchContent(String key, boolean quick) throws Exception { - return searchContent("search/" + key); - } - - @Override - public String searchContent(String key, boolean quick, String pg) throws Exception { - return searchContent("search/" + key + "/" + pg + ".html"); - } - - private String searchContent(String query) { - List list = new ArrayList<>(); - Document doc = Jsoup.parse(OkHttp.string(url + query)); - for (Element div : doc.select("div.video-item")) { - String id = div.select("a.video-title").attr("href").replace(url, ""); - String name = div.select("a.video-title").text(); - String pic = div.select("div.thumb > a > img").attr("data-src"); - String remark = div.select("div.date").text(); - list.add(new Vod(id, name, pic, remark)); - } - return Result.string(list); - } -} diff --git a/app/src/main/java/com/github/catvod/spider/JSDemo.java b/app/src/main/java/com/github/catvod/spider/JSDemo.java deleted file mode 100644 index e2b8acda..00000000 --- a/app/src/main/java/com/github/catvod/spider/JSDemo.java +++ /dev/null @@ -1,54 +0,0 @@ -package com.github.catvod.spider; - -import android.content.Context; - -import com.github.catvod.crawler.Spider; -import com.whl.quickjs.android.QuickJSLoader; -import com.whl.quickjs.wrapper.QuickJSContext; - -import java.util.concurrent.Callable; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.concurrent.Future; - -public class JSDemo extends Spider { - - private ExecutorService executor; - private QuickJSContext ctx; - - private void submit(Runnable runnable) { - executor.submit(runnable); - } - - private Future submit(Callable callable) { - return executor.submit(callable); - } - - private void initJS() { - if (ctx != null) return; - ctx = QuickJSContext.create(); - QuickJSLoader.initConsoleLog(ctx); - } - - @Override - public void init(Context context, String extend) { - this.executor = Executors.newSingleThreadExecutor(); - submit(this::initJS); - } - - @Override - public String homeContent(boolean filter) throws Exception { - return submit(() -> { - ctx.evaluate("var text = 'homeContent';"); - return ctx.getGlobalObject().getString("text"); - }).get(); - } - - @Override - public void destroy() { - submit(() -> { - executor.shutdownNow(); - ctx.destroy(); - }); - } -} diff --git a/app/src/main/java/com/github/catvod/spider/Kugou.java b/app/src/main/java/com/github/catvod/spider/Kugou.java deleted file mode 100644 index 5fbfcb86..00000000 --- a/app/src/main/java/com/github/catvod/spider/Kugou.java +++ /dev/null @@ -1,97 +0,0 @@ -package com.github.catvod.spider; - -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.OkHttp; -import com.github.catvod.utils.Util; - -import org.json.JSONArray; -import org.json.JSONObject; -import org.jsoup.Jsoup; -import org.jsoup.nodes.Document; -import org.jsoup.nodes.Element; -import org.jsoup.select.Elements; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author Qile - */ -public class Kugou extends Spider { - - private Map getHeader() { - Map header = new HashMap<>(); - header.put("User-Agent", Util.CHROME); - return header; - } - - @Override - public String homeContent(boolean filter) throws Exception { - List classes = new ArrayList<>(); - List list = new ArrayList<>(); - List typeIds = Arrays.asList("6666|0", "33162|1", "4681|2"); - List typeNames = Arrays.asList("热门榜单", "特色音乐榜", "全球榜"); - for (int i = 0; i < typeIds.size(); i++) classes.add(new Class(typeIds.get(i), typeNames.get(i))); - return Result.string(classes, list); - } - - @Override - public String categoryContent(String tid, String pg, boolean filter, HashMap extend) throws Exception { - HashMap ext = new HashMap<>(); - if (extend != null && extend.size() > 0) ext.putAll(extend); - String[] item = tid.split("\\|"); - String id = item[0]; - String digit = item[1]; - int digitValue = Integer.parseInt(digit); - String cateId = ext.get("cateId") == null ? id : ext.get("cateId"); - String cateUrl = String.format("https://www.kugou.com/yy/rank/home/1-%s.html?from=rank", cateId); - Document doc = Jsoup.parse(OkHttp.string(cateUrl, getHeader())); - Elements lis = doc.select(".pc_rank_sidebar").eq(digitValue).select("ul li a"); - JSONArray videos = new JSONArray(); - for (Element li : lis) { - String vid = li.attr("href"); - String name = li.attr("title"); - JSONObject vod = new JSONObject().put("vod_id", vid).put("vod_name", name); - videos.put(vod); - } - JSONObject result = new JSONObject().put("total", lis.size()).put("pagecount", 1).put("list", videos); - return result.toString(); - } - - @Override - public String detailContent(List ids) throws Exception { - Document doc = Jsoup.parse(OkHttp.string(ids.get(0), getHeader())); - Elements playlist = doc.select(".pc_temp_songlist ul li"); - List vodItems = new ArrayList<>(); - for (int j = 0; j < playlist.size(); j++) { - Element a = playlist.get(j); - String href = a.select("a.pc_temp_songname").attr("href"); - String text = a.select("a.pc_temp_songname").text(); - vodItems.add(text + "$" + href); - } - String title = doc.select(".pc_temp_title h3").text(); - String remark = doc.select(".rank_update").text(); - String vod_play_from = "Qile"; - String vod_play_url = TextUtils.join("#", vodItems); - Vod vod = new Vod(); - vod.setVodId(ids.get(0)); - vod.setVodName(title); - vod.setVodRemarks(remark); - vod.setVodPlayFrom(vod_play_from); - vod.setVodPlayUrl(vod_play_url); - return Result.string(vod); - } - - @Override - public String playerContent(String flag, String id, List vipFlags) throws Exception { - return Result.get().url(id).parse().header(getHeader()).string(); - } -} diff --git a/app/src/main/java/com/github/catvod/spider/Living.java b/app/src/main/java/com/github/catvod/spider/Living.java deleted file mode 100644 index d64ea199..00000000 --- a/app/src/main/java/com/github/catvod/spider/Living.java +++ /dev/null @@ -1,256 +0,0 @@ -package com.github.catvod.spider; - -import android.content.Context; -import android.text.TextUtils; -import android.util.Base64; - -import com.github.catvod.bean.Class; -import com.github.catvod.bean.Filter; -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 com.github.catvod.utils.Crypto; -import com.github.catvod.utils.LZString; - -import org.json.JSONArray; -import org.json.JSONException; -import org.json.JSONObject; - -import java.io.UnsupportedEncodingException; -import java.net.URLDecoder; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Objects; - -/** - * @author leospring - * 聚合直播 - */ -public class Living extends Spider { - - private String host = "https://lemonlive.deno.dev"; - private String cookie; - - @Override - public void init(Context context, String extend) throws Exception { - if (!TextUtils.isEmpty(extend)) { - host = extend; - } - } - - @Override - public String homeContent(boolean filter) throws Exception { - List classList = new ArrayList<>(); - LinkedHashMap> filters = new LinkedHashMap<>(); - - classList.add(new Class("huya", "虎牙")); - classList.add(new Class("douyu", "斗鱼")); - classList.add(new Class("douyin", "抖音")); - classList.add(new Class("bilibili", "哔哩哔哩")); - classList.add(new Class("cc", "网易CC")); - - List huyaFilterList = new ArrayList<>(); - List huyaVals = new ArrayList<>(); - huyaVals.add(new Filter.Value("网游", "1")); - huyaVals.add(new Filter.Value("手游", "3")); - huyaVals.add(new Filter.Value("娱乐", "8")); - huyaVals.add(new Filter.Value("单机", "2")); - huyaFilterList.add(new Filter("type", "分类", huyaVals)); - filters.put("huya", huyaFilterList); - - List douyuFilterList = new ArrayList<>(); - List douyuVals = new ArrayList<>(); - douyuVals.add(new Filter.Value("网游竞技", "PCgame")); - douyuVals.add(new Filter.Value("单机热游", "djry")); - douyuVals.add(new Filter.Value("手游休闲", "syxx")); - douyuVals.add(new Filter.Value("娱乐天地", "yl")); - douyuVals.add(new Filter.Value("颜值", "yz")); - douyuVals.add(new Filter.Value("科技文化", "kjwh")); - douyuVals.add(new Filter.Value("语言互动", "yp")); - douyuFilterList.add(new Filter("type", "分类", douyuVals)); - filters.put("douyu", douyuFilterList); - - List douyinFilterList = new ArrayList<>(); - List douyinVals = new ArrayList<>(); - douyinVals.add(new Filter.Value("竞技游戏", "2")); - douyinVals.add(new Filter.Value("射击游戏", "1")); - douyinVals.add(new Filter.Value("单机游戏", "3")); - douyinVals.add(new Filter.Value("棋牌游戏", "4")); - douyinVals.add(new Filter.Value("休闲益智", "5")); - douyinVals.add(new Filter.Value("角色扮演", "6")); - douyinVals.add(new Filter.Value("策略卡牌", "7")); - douyinVals.add(new Filter.Value("娱乐天地", "10000")); - douyinVals.add(new Filter.Value("科技文化", "10001")); - douyinFilterList.add(new Filter("type", "分类", douyinVals)); - filters.put("douyin", douyinFilterList); - - List biliFilterList = new ArrayList<>(); - List biliVals = new ArrayList<>(); - biliVals.add(new Filter.Value("网游", "2")); - biliVals.add(new Filter.Value("手游", "3")); - biliVals.add(new Filter.Value("单机游戏", "6")); - biliVals.add(new Filter.Value("娱乐", "1")); - biliVals.add(new Filter.Value("电台", "5")); - biliVals.add(new Filter.Value("虚拟主播", "9")); - biliVals.add(new Filter.Value("聊天室", "14")); - biliVals.add(new Filter.Value("生活", "10")); - biliVals.add(new Filter.Value("知识", "11")); - biliVals.add(new Filter.Value("赛事", "13")); - biliVals.add(new Filter.Value("互动玩法", "15")); - biliFilterList.add(new Filter("type", "分类", biliVals)); - filters.put("bilibili", biliFilterList); - - List ccFilterList = new ArrayList<>(); - List ccVals = new ArrayList<>(); - ccVals.add(new Filter.Value("网游", "1")); - ccVals.add(new Filter.Value("手游", "2")); - ccVals.add(new Filter.Value("竞技", "4")); - ccVals.add(new Filter.Value("综艺", "5")); - ccFilterList.add(new Filter("type", "分类", ccVals)); - filters.put("cc", ccFilterList); - return Result.string(classList, filters); - } - - @Override - public String categoryContent(String tid, String pg, boolean filter, HashMap extend) throws Exception { - if (!tid.contains("_")) { - String url = host + "/api/" + tid + "/getCategories"; - JSONObject json = request(url); - String type = extend.get("type"); - if (TextUtils.isEmpty(type)) type = json.optJSONArray("data").optJSONObject(0).optString("id"); - List vodList = new ArrayList<>(); - for (int i = 0; i < json.optJSONArray("data").length(); i++) { - JSONObject data = json.optJSONArray("data").optJSONObject(i); - if (type.equals(data.optString("id"))) { - for (int j = 0; j < data.optJSONArray("list").length(); j++) { - JSONObject item = data.optJSONArray("list").optJSONObject(j); - vodList.add(new Vod(tid + "_" + item.optString("cid"), item.optString("name"), item.optString("pic"), data.optString("name"), true)); - } - } - } - return Result.string(vodList); - } else { - String[] split = tid.split("_"); - String url = host + "/api/" + split[0] + "/getCategoryRooms?id=" + split[1] + "&pid=" + (split[0].equals("bilibili") ? "2" : "1") + "&page=" + pg; - if (!TextUtils.isEmpty(cookie)) { - url = url + "&cookie=" + URLDecoder.decode(cookie, "UTF-8"); - } - JSONObject json = request(url); - if (!TextUtils.isEmpty(json.optJSONObject("data").optString("cookie"))) { - cookie = json.optJSONObject("data").optString("cookie"); - } - List vodList = new ArrayList<>(); - for (int i = 0; i < json.optJSONObject("data").optJSONArray("list").length(); i++) { - JSONObject data = json.optJSONObject("data").optJSONArray("list").optJSONObject(i); - vodList.add(new Vod(split[0] + "_" + data.optString("roomId"), data.optString("title"), data.optString("cover"), data.optString("nickname"))); - } - return Result.string(vodList); - } - } - - @Override - public String detailContent(List ids) throws Exception { - String[] split = ids.get(0).split("_"); - String url = host + "/api/" + split[0] + "/getRoomDetail?id=" + split[1]; - JSONObject json = request(url).optJSONObject("data"); - Vod vod = new Vod(); - vod.setVodId(json.optString("roomId")); - vod.setVodName(json.optString("title")); - vod.setVodArea(json.optString("online")); - vod.setVodDirector(json.optString("siteId")); - vod.setVodActor(json.optString("nickname")); - vod.setVodPic(json.optString("cover")); - vod.setVodContent(json.optString("url")); - vod.setTypeName(json.optString("category")); - JSONObject info = json.optJSONObject("info"); - String params = ""; - if (info != null) { - params = getHuyaParam(info.optString("name"), info.optString("code")); - } - List fromList = new ArrayList<>(); - List playList = new ArrayList<>(); - for (int i = 0; i < json.optJSONArray("stream").length(); i++) { - JSONObject data = json.optJSONArray("stream").optJSONObject(i); - fromList.add(data.optString("name")); - List nameUrls = new ArrayList<>(); - for (int j = 0; j < data.optJSONArray("lines").length(); j++) { - JSONObject urls = data.optJSONArray("lines").optJSONObject(j); - String playUrl = urls.optString("url") + params; - nameUrls.add(urls.optString("name") + "$" + playUrl); - } - playList.add(TextUtils.join("#", nameUrls)); - } - vod.setVodPlayFrom(TextUtils.join("$$$", fromList)); - vod.setVodPlayUrl(TextUtils.join("$$$", playList)); - return Result.string(vod); - } - - @Override - public String playerContent(String flag, String id, List vipFlags) throws Exception { - if (!id.startsWith("http")) id = "https:" + id; - return Result.get().url(id).toString(); - } - - @Override - public String searchContent(String key, boolean quick) throws Exception { - return searchContent(key, quick, "1"); - } - - @Override - public String searchContent(String key, boolean quick, String pg) throws Exception { - List vodList = new ArrayList<>(); - vodList.addAll(searchWithSite("huya", key, pg)); - vodList.addAll(searchWithSite("douyu", key, pg)); - vodList.addAll(searchWithSite("douyin", key, pg)); - vodList.addAll(searchWithSite("bilibili", key, pg)); - return Result.string(vodList); - } - - private String getSiteNameByEn(String en) { - return Objects.equals(en, "huya") ? "虎牙" - : Objects.equals(en, "douyu") ? "斗鱼" - : Objects.equals(en, "douyin") ? "抖音" - : Objects.equals(en, "bilibili") ? "哔哩哔哩" - : Objects.equals(en, "cc") ? "网易CC" : ""; - } - - private List searchWithSite(String site, String key, String pg) { - try { - List vodList = new ArrayList<>(); - String url = host + "/api/" + site + "/searchRooms?page=" + pg + "&kw=" + key; - JSONArray jsonArray = request(url).optJSONObject("data").optJSONArray("list"); - for (int i = 0; i < jsonArray.length(); i++) { - JSONObject item = jsonArray.getJSONObject(i); - vodList.add(new Vod(site + "_" + item.optString("roomId"), item.optString("nickname"), item.optString("cover"), getSiteNameByEn(site) + "/" + item.optString("category") + "/" + item.optString("title"), false)); - } - return vodList; - } catch (Exception ignored) { - return Collections.emptyList(); - } - } - - private String getHuyaParam(String name, String code) throws UnsupportedEncodingException { - String N = "1063681129617"; - long currentTimeMillis = System.currentTimeMillis(); - String i = String.valueOf(currentTimeMillis % 10000000000L * 1000 + (long) (Math.random() * 4294967295L)); - String r = code.split("fs=")[1].split("&")[0]; - String s = Long.toHexString((currentTimeMillis / 1000) | 21600); - String f = String.valueOf(currentTimeMillis + Long.parseLong(N)); - String fmPart = code.split("fm=")[1].split("&")[0]; - String c = new String(Base64.decode(URLDecoder.decode(fmPart, "UTF-8"), Base64.NO_WRAP)).split("_")[0]; - String u = Crypto.md5(f + "|tars_mp|102"); - return String.format("&wsSecret=%s&uuid=%s&wsTime=%s&uid=%s&seqid=%s&fs=%s&ctype=tars_mp&t=102&ver=1&sv=2401310321", Crypto.md5(c + "_" + N + "_" + name + "_" + u + "_" + s), i, s, N, f, r); - } - - private JSONObject request(String url) throws JSONException { - HashMap map = new HashMap<>(); - map.put("sec-fetch-site", "same-origin"); - String str = OkHttp.string(url, map); - String result = LZString.decompressFromBase64(str.replaceAll(" ", "")); - return new JSONObject(result); - } -} diff --git a/app/src/main/java/com/github/catvod/spider/PTT.java b/app/src/main/java/com/github/catvod/spider/PTT.java index 3704181b..35b7614b 100644 --- a/app/src/main/java/com/github/catvod/spider/PTT.java +++ b/app/src/main/java/com/github/catvod/spider/PTT.java @@ -27,7 +27,7 @@ import java.util.regex.Pattern; public class PTT extends Spider { - private String url = "https://ptt.red/"; + private final String url = "https://ptt.red/"; private String extend; private Map getHeader() { diff --git a/app/src/main/java/com/github/catvod/spider/Uvod.java b/app/src/main/java/com/github/catvod/spider/Uvod.java deleted file mode 100644 index 503ff5bc..00000000 --- a/app/src/main/java/com/github/catvod/spider/Uvod.java +++ /dev/null @@ -1,189 +0,0 @@ -package com.github.catvod.spider; - -import android.content.Context; - -import com.github.catvod.bean.Class; -import com.github.catvod.bean.Result; -import com.github.catvod.bean.Vod; -import com.github.catvod.bean.uvod.Data; -import com.github.catvod.crawler.Spider; -import com.github.catvod.net.OkHttp; -import com.github.catvod.utils.Crypto; -import com.github.catvod.utils.Util; - -import java.net.URLEncoder; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author Qile - * @date 2024/11/15 - */ -public class Uvod extends Spider { - - private static String siteUrl = "https://api-h5.uvod.tv"; - private static final String latest = siteUrl + "/video/latest"; - private static final String list = siteUrl + "/video/list"; - private static final String detail = siteUrl + "/video/info"; - private static final String play = siteUrl + "/video/source"; - private static final String publicKeyPem = "-----BEGIN PUBLIC KEY-----\n" + "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCeBQWotWOpsuPn3PAA+bcmM8YD\n" + "fEOzPz7hb/vItV43vBJV2FcM72Hdcv3DccIFuEV9LQ8vcmuetld98eksja9vQ1Ol\n" + "8rTnjpTpMbd4HedevSuIhWidJdMAOJKDE3AgGFcQvQePs80uXY2JhTLkRn2ICmDR\n" + "/fb32OwWY3QGOvLcuQIDAQAB\n" + "-----END PUBLIC KEY-----"; - private static final String privateKeyPem = "-----BEGIN PRIVATE KEY-----\n" + "MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAJ4FBai1Y6my4+fc\n" + "8AD5tyYzxgN8Q7M/PuFv+8i1Xje8ElXYVwzvYd1y/cNxwgW4RX0tDy9ya562V33x\n" + "6SyNr29DU6XytOeOlOkxt3gd5169K4iFaJ0l0wA4koMTcCAYVxC9B4+zzS5djYmF\n" + "MuRGfYgKYNH99vfY7BZjdAY68ty5AgMBAAECgYB1rbvHJj5wVF7Rf4Hk2BMDCi9+\n" + "zP4F8SW88Y6KrDbcPt1QvOonIea56jb9ZCxf4hkt3W6foRBwg86oZo2FtoZcpCJ+\n" + "rFqUM2/wyV4CuzlL0+rNNSq7bga7d7UVld4hQYOCffSMifyF5rCFNH1py/4Dvswm\n" + "pi5qljf+dPLSlxXl2QJBAMzPJ/QPAwcf5K5nngQtbZCD3nqDFpRixXH4aUAIZcDz\n" + "S1RNsHrT61mEwZ/thQC2BUJTQNpGOfgh5Ecd1MnURwsCQQDFhAFfmvK7svkygoKX\n" + "t55ARNZy9nmme0StMOfdb4Q2UdJjfw8+zQNtKFOM7VhB7ijHcfFuGsE7UeXBe20n\n" + "g/XLAkEAv9SoT2hgJaQxxUk4MCF8pgddstJlq8Z3uTA7JMa4x+kZfXTm/6TOo6I8\n" + "2VbXZLsYYe8op0lvsoHMFvBSBljV0QJBAKhxyoYRa98dZB5qZRskciaXTlge0WJk\n" + "kA4vvh3/o757izRlQMgrKTfng1GVfIZFqKtnBiIDWTXQw2N9cnqXtH8CQAx+CD5t\n" + "l1iT0cMdjvlMg2two3SnpOjpo7gALgumIDHAmsUWhocLtcrnJI032VQSUkNnLq9z\n" + "EIfmHDz0TPVNHBQ=\n" + "-----END PRIVATE KEY-----"; - - private Map getHeader(String url) { - String[] item = url.split("\\|"); - String URL = item[0]; - String tid = item.length > 1 ? item[1] : ""; - String pg = item.length > 2 ? item[2] : ""; - String quality = item.length > 3 ? item[3] : ""; - String hm = String.valueOf(System.currentTimeMillis()); - String text = ""; - if (URL.equals(latest)) { - text = String.format("-parent_category_id=101-%s", hm); - } else if (URL.equals(list)) { - if (pg != null && !pg.isEmpty()) { - text = String.format("-page=%s&pagesize=42&parent_category_id=%s&sort_type=asc-%s", pg, tid, hm); - } else { - text = String.format("-keyword=%s&need_fragment=1&page=1&pagesize=42&sort_type=asc-%s", URLEncoder.encode(tid).toLowerCase(), hm); - } - } else if (URL.equals(detail)) { - text = String.format("-id=%s-%s", tid, hm); - } else if (URL.equals(play)) { - text = String.format("-quality=%s&video_fragment_id=%s&video_id=%s-%s", quality, pg, tid, hm); - } - String sign = Crypto.md5(text); - Map header = new HashMap<>(); - header.put("User-Agent", Util.CHROME); - header.put("referer", "https://www.uvod.tv/"); - header.put("origin", "https://www.uvod.tv"); - header.put("content-type", "application/json"); - header.put("accept", "*/*"); - header.put("x-signature", sign); - header.put("x-timestamp", hm); - header.put("x-token", ""); - return header; - } - - private Map playHeader() { - Map header = new HashMap<>(); - header.put("User-Agent", Util.CHROME); - header.put("referer", "https://www.uvod.tv/"); - header.put("origin", "https://www.uvod.tv"); - return header; - } - - @Override - public void init(Context context, String extend) throws Exception { - if (!extend.isEmpty()) siteUrl = extend; - } - - private String encrypt(String data) throws Exception { - String aesKey = Crypto.randomKey(32); - String aesEncryptedData = Crypto.aesEncrypt(data, aesKey, "abcdefghijklmnop"); - String rsaEncryptedKey = Crypto.rsaEncrypt(aesKey, publicKeyPem); - return aesEncryptedData + "." + rsaEncryptedKey; - } - - private String decrypt(String encryptedData) throws Exception { - encryptedData = encryptedData.replaceAll("\\s", ""); - String[] parts = encryptedData.split("\\."); - if (parts.length != 2) return null; - String rsaEncryptedKey = parts[1]; - String decryptedKey = Crypto.rsaDecrypt(rsaEncryptedKey, privateKeyPem); - String aesEncryptedData = parts[0]; - return Crypto.CBC(aesEncryptedData, decryptedKey, "abcdefghijklmnop"); - } - - @Override - public String homeContent(boolean filter) throws Exception { - List classes = new ArrayList<>(); - List typeIds = Arrays.asList("101", "100", "106", "102", "103", "104", "105"); - List typeNames = Arrays.asList("电视剧", "电影", "粤台专区", "综艺", "动漫", "体育", "纪录片"); - for (int i = 0; i < typeIds.size(); i++) classes.add(new Class(typeIds.get(i), typeNames.get(i))); - String param = "{\"parent_category_id\":101}"; - String encryptData = encrypt(param); - String content = OkHttp.post(latest, encryptData, getHeader(latest)).getBody(); - String decryptData = decrypt(content); - Data data = Data.objectFrom(decryptData); - return Result.string(classes, data.getList()); - } - - @Override - public String categoryContent(String tid, String pg, boolean filter, HashMap extend) throws Exception { - String param = String.format("{\"parent_category_id\":\"%s\",\"category_id\":null,\"language\":null,\"year\":null,\"region\":null,\"state\":null,\"keyword\":\"\",\"paid\":null,\"page\":%s,\"pagesize\":42,\"sort_field\":\"\",\"sort_type\":\"asc\"}", tid, pg); - String encryptData = encrypt(param); - String content = OkHttp.post(list, encryptData, getHeader(list + "|" + tid + "|" + pg)).getBody(); - String decryptData = decrypt(content); - Data data = Data.objectFrom(decryptData); - return Result.string(data.getList()); - } - - @Override - public String detailContent(List ids) throws Exception { - String param = String.format("{\"id\":\"%s\"}", ids.get(0)); - String encryptData = encrypt(param); - String content = OkHttp.post(detail, encryptData, getHeader(detail + "|" + ids.get(0))).getBody(); - String decryptData = decrypt(content); - Data data = Data.objectFrom(decryptData); - StringBuilder vod_play_url = new StringBuilder(); - List videoFragmentList = data.getVideoFragmentList(); - for (int j = 0; j < videoFragmentList.size(); j++) { - Data.VideoFragmentList videoList = videoFragmentList.get(j); - String name = videoList.getSymbol(); - String nid = videoList.getId(); - List Qualities = videoList.getQualities(); - nid = ids.get(0) + "|" + nid + "|" + Qualities; - vod_play_url.append(name).append("$").append(nid); - boolean notLastEpisode = j < videoFragmentList.size() - 1; - vod_play_url.append(notLastEpisode ? "#" : "$$$"); - } - Data.Video video = data.getVideo(); - Vod vod = new Vod(); - vod.setVodId(ids.get(0)); - vod.setVodYear(video.getYear()); - vod.setVodArea(video.getRegion()); - vod.setVodActor(video.getStarring()); - vod.setVodRemarks(video.getState()); - vod.setVodContent(video.getDescription()); - vod.setVodDirector(video.getDirector()); - vod.setTypeName(video.getLanguage()); - vod.setVodPlayFrom("Qile"); - vod.setVodPlayUrl(vod_play_url.toString()); - return Result.string(vod); - } - - @Override - public String searchContent(String key, boolean quick) throws Exception { - String param = String.format("{\"parent_category_id\":null,\"category_id\":null,\"language\":null,\"year\":null,\"region\":null,\"state\":null,\"keyword\":\"%s\",\"paid\":null,\"page\":1,\"pagesize\":42,\"sort_field\":\"\",\"sort_type\":\"asc\",\"need_fragment\":1}", key); - String encryptData = encrypt(param); - String content = OkHttp.post(list, encryptData, getHeader(list + "|" + key)).getBody(); - String decryptData = decrypt(content); - Data data = Data.objectFrom(decryptData); - return Result.string(data.getList()); - } - - @Override - public String playerContent(String flag, String id, List vipFlags) throws Exception { - String[] item = id.split("\\|"); - String tid = item[0]; - String nid = item[1]; - String[] quality = item[2].replaceAll("[\\[\\]]", "").replace(" ", "").split(","); - List url = new ArrayList<>(); - for (String s : quality) { - if (s.equals("4")) url.add("1080p"); - else if (s.equals("3")) url.add("720p"); - else if (s.equals("2")) url.add("480p"); - else if (s.equals("1")) url.add("360p"); - else url.add(s.trim()); - String param = String.format("{\"video_id\":\"%s\",\"video_fragment_id\":%s,\"quality\":%s,\"seek\":null}", tid, nid, s.trim()); - String encryptData = encrypt(param); - String content = OkHttp.post(play, encryptData, getHeader(play + "|" + tid + "|" + nid + "|" + s.trim())).getBody(); - String decryptData = decrypt(content); - Data data = Data.objectFrom(decryptData); - url.add(data.getVideo().getUrl()); - } - return Result.get().url(url).header(playHeader()).string(); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/github/catvod/spider/XPath.java b/app/src/main/java/com/github/catvod/spider/XPath.java index e843b1ab..26eb1b74 100644 --- a/app/src/main/java/com/github/catvod/spider/XPath.java +++ b/app/src/main/java/com/github/catvod/spider/XPath.java @@ -41,7 +41,7 @@ public class XPath extends Spider { fetchRule(); List list = new ArrayList<>(); List classes = new ArrayList<>(); - if (rule.getCateManual().size() > 0) { + if (!rule.getCateManual().isEmpty()) { Set keys = rule.getCateManual().keySet(); for (String k : keys) { classes.add(new Class(rule.getCateManual().get(k), k)); @@ -49,7 +49,7 @@ public class XPath extends Spider { } String webUrl = rule.getHomeUrl(); JXDocument doc = JXDocument.create(fetch(webUrl)); - if (rule.getCateManual().size() == 0) { + if (rule.getCateManual().isEmpty()) { List navNodes = doc.selN(rule.getCateNode()); for (int i = 0; i < navNodes.size(); i++) { String name = navNodes.get(i).selOne(rule.getCateName()).asString().trim(); @@ -220,7 +220,7 @@ public class XPath extends Spider { vodItems.add(name + "$" + id); } // 排除播放列表為空的播放源 - if (vodItems.size() == 0 && playFrom.size() > i) { + if (vodItems.isEmpty() && playFrom.size() > i) { playFrom.set(i, ""); } playList.add(TextUtils.join("#", vodItems)); @@ -246,8 +246,8 @@ public class XPath extends Spider { String webUrl = rule.getPlayUrl().isEmpty() ? id : rule.getPlayUrl().replace("{playUrl}", id); SpiderDebug.log(webUrl); HashMap headers = new HashMap<>(); - if (rule.getPlayUa().length() > 0) headers.put("User-Agent", rule.getPlayUa()); - if (rule.getPlayReferer().length() > 0) headers.put("Referer", rule.getPlayReferer()); + if (!rule.getPlayUa().isEmpty()) headers.put("User-Agent", rule.getPlayUa()); + if (!rule.getPlayReferer().isEmpty()) headers.put("Referer", rule.getPlayReferer()); return Result.get().parse().url(webUrl).header(headers).string(); } diff --git a/app/src/main/java/com/github/catvod/spider/XPathFilter.java b/app/src/main/java/com/github/catvod/spider/XPathFilter.java index 604166c4..387b99bb 100644 --- a/app/src/main/java/com/github/catvod/spider/XPathFilter.java +++ b/app/src/main/java/com/github/catvod/spider/XPathFilter.java @@ -1,5 +1,7 @@ package com.github.catvod.spider; +import android.text.TextUtils; + import java.net.URLEncoder; import java.util.HashMap; import java.util.regex.Matcher; @@ -15,10 +17,10 @@ public class XPathFilter extends XPath { @Override protected String categoryUrl(String tid, String pg, boolean filter, HashMap extend) { String cateUrl = rule.getCateUrl(); - if (filter && extend != null && extend.size() > 0) { + if (filter && extend != null && !extend.isEmpty()) { for (String key : extend.keySet()) { String value = extend.get(key); - if (value.length() > 0) { + if (!TextUtils.isEmpty(value)) { cateUrl = cateUrl.replace("{" + key + "}", URLEncoder.encode(value)); } } diff --git a/app/src/main/java/com/github/catvod/spider/XPathMac.java b/app/src/main/java/com/github/catvod/spider/XPathMac.java index 729f1248..0154b52c 100644 --- a/app/src/main/java/com/github/catvod/spider/XPathMac.java +++ b/app/src/main/java/com/github/catvod/spider/XPathMac.java @@ -68,7 +68,7 @@ public class XPathMac extends XPath { @Override public String homeContent(boolean filter) { String result = super.homeContent(filter); - if (result.length() > 0 && playerConfigJs.length() > 0) { // 嘗試通過playerConfigJs獲取展示和flag匹配關系 + if (!result.isEmpty() && !playerConfigJs.isEmpty()) { // 嘗試通過playerConfigJs獲取展示和flag匹配關系 String webContent = fetch(playerConfigJs); Matcher matcher = Pattern.compile(playerConfigJsRegex).matcher(webContent); if (matcher.find()) { @@ -94,7 +94,7 @@ public class XPathMac extends XPath { @Override public String detailContent(List ids) { String result = super.detailContent(ids); - if (decodeVipFlag && result.length() > 0) { + if (decodeVipFlag && !result.isEmpty()) { try { JSONObject jsonObject = new JSONObject(result); String[] playFrom = jsonObject.optJSONArray("list").getJSONObject(0).optString("vod_play_from").split("\\$\\$\\$"); @@ -181,8 +181,8 @@ public class XPathMac extends XPath { result.put("playUrl", ""); result.put("url", videoUrl); HashMap headers = new HashMap<>(); - if (rule.getPlayUa().length() > 0) headers.put("User-Agent", rule.getPlayUa()); - if (rule.getPlayReferer().length() > 0) headers.put("Referer", rule.getPlayReferer()); + if (!rule.getPlayUa().isEmpty()) headers.put("User-Agent", rule.getPlayUa()); + if (!rule.getPlayReferer().isEmpty()) headers.put("Referer", rule.getPlayReferer()); result.put("header", new Gson().toJson(headers)); return result.toString(); } catch (Exception e) { diff --git a/app/src/main/java/com/github/catvod/spider/XPathMacFilter.java b/app/src/main/java/com/github/catvod/spider/XPathMacFilter.java index 435f11c9..78f9ecc8 100644 --- a/app/src/main/java/com/github/catvod/spider/XPathMacFilter.java +++ b/app/src/main/java/com/github/catvod/spider/XPathMacFilter.java @@ -1,5 +1,7 @@ package com.github.catvod.spider; +import android.text.TextUtils; + import java.net.URLEncoder; import java.util.HashMap; import java.util.regex.Matcher; @@ -10,10 +12,10 @@ public class XPathMacFilter extends XPathMac { @Override protected String categoryUrl(String tid, String pg, boolean filter, HashMap extend) { String cateUrl = rule.getCateUrl(); - if (filter && extend != null && extend.size() > 0) { + if (filter && extend != null && !extend.isEmpty()) { for (String key : extend.keySet()) { String value = extend.get(key); - if (value.length() > 0) { + if (!TextUtils.isEmpty(value)) { cateUrl = cateUrl.replace("{" + key + "}", URLEncoder.encode(value)); } } diff --git a/app/src/main/java/com/github/catvod/spider/Xb6v.java b/app/src/main/java/com/github/catvod/spider/Xb6v.java deleted file mode 100644 index 778e6f05..00000000 --- a/app/src/main/java/com/github/catvod/spider/Xb6v.java +++ /dev/null @@ -1,244 +0,0 @@ -package com.github.catvod.spider; - -import android.text.TextUtils; - -import com.github.catvod.bean.Class; -import com.github.catvod.bean.Filter; -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 com.github.catvod.utils.Util; - -import org.jsoup.Jsoup; -import org.jsoup.nodes.Document; -import org.jsoup.nodes.Element; -import org.jsoup.select.Elements; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import okhttp3.FormBody; -import okhttp3.Request; -import okhttp3.RequestBody; -import okhttp3.Response; - -/** - * @author zhixc - * 新版6V电影网 - */ -public class Xb6v extends Spider { - - private final String siteUrl = "https://www.xb6v.com"; - private String nextSearchUrlPrefix; - private String nextSearchUrlSuffix; - - private Map getHeader() { - Map header = new HashMap<>(); - header.put("User-Agent", Util.CHROME); - header.put("Referer", siteUrl + "/"); - return header; - } - - private Map getDetailHeader() { - Map header = new HashMap<>(); - header.put("User-Agent", Util.CHROME); - return header; - } - - @Override - public String homeContent(boolean filter) throws Exception { - List classes = new ArrayList<>(); - String html = OkHttp.string(siteUrl, getHeader()); - Document doc = Jsoup.parse(html); - Elements elements = doc.select("#menus > li > a"); - LinkedHashMap> filters = new LinkedHashMap<>(); - for (int i = 0; i < elements.size(); i++) { - if (i < 2 || i == elements.size() - 1) continue; - Element e = elements.get(i); - String typeId = e.attr("href"); - String typeName = e.text(); - if (typeName.equals("电视剧")) { - List values = new ArrayList<>(); - values.add(new Filter.Value("不限", "")); - for (Element a : e.nextElementSibling().select("a")) { - values.add(new Filter.Value(a.text(), a.attr("href").replaceAll(typeId, ""))); - } - List filterList = new ArrayList<>(); - filterList.add(new Filter("cateId", "类型", values)); - filters.put(typeId, filterList); - } - classes.add(new Class(typeId, typeName)); - } - return Result.string(classes, parseVodListFromDoc(doc), filters); - } - - private List parseVodListFromDoc(String html) { - return parseVodListFromDoc(Jsoup.parse(html)); - } - - private List parseVodListFromDoc(Document doc) { - Elements items = doc.select("#post_container .post_hover"); - List list = new ArrayList<>(); - for (Element item : items) { - Element element = item.select("[class=zoom]").get(0); - String vodId = element.attr("href"); - String name = element.attr("title").replaceAll("]+>", ""); - String pic = element.select("img").attr("src"); - String remark = item.select("[rel=category tag]").text(); - list.add(new Vod(vodId, name, pic, remark)); - } - return list; - } - - @Override - public String categoryContent(String tid, String pg, boolean filter, HashMap extend) throws Exception { - String cateId = extend.get("cateId") == null ? "" : extend.get("cateId"); - String cateUrl = siteUrl + tid + cateId; - if (!pg.equals("1")) cateUrl += "index_" + pg + ".html"; - String html = OkHttp.string(cateUrl, getHeader()); - Document doc = Jsoup.parse(html); - String href = doc.select(".pagination > a").last().attr("href"); - int page = Integer.parseInt(pg); - int count = Integer.parseInt(getStrByRegex(Pattern.compile("index_(.*?).html"), href)); - int limit = 18; - Elements items = doc.select("#post_container .post_hover"); - int total = page == count ? (page - 1) * limit + items.size() : count * limit; - return Result.get().vod(parseVodListFromDoc(doc)).page(page, count, limit, total).string(); - } - - @Override - public String detailContent(List ids) throws Exception { - String vodId = ids.get(0); - String detailUrl = siteUrl + vodId; - String html = OkHttp.string(detailUrl, getDetailHeader()); - Document doc = Jsoup.parse(html); - Elements sourceList = doc.select("#post_content"); - - String circuitName = "磁力线路"; - Map playMap = new LinkedHashMap<>(); - int i = 0; - for (Element source : sourceList) { - Elements aList = source.select("table a"); - List vodItems = new ArrayList<>(); - for (Element a : aList) { - String episodeUrl = a.attr("href"); - String episodeName = a.text(); - if (!episodeUrl.toLowerCase().startsWith("magnet")) continue; - vodItems.add(episodeName + "$" + episodeUrl); - } - if (vodItems.size() > 0) { - i++; - playMap.put(circuitName + i, TextUtils.join("#", vodItems)); - } - } - - String partHTML = doc.select(".context").html(); - String name = doc.select(".article_container > h1").text(); - String pic = doc.select("#post_content img").attr("src"); - String typeName = getStrByRegex(Pattern.compile("◎类  别 (.*?)
"), partHTML); - if (typeName.equals("")) typeName = doc.select("[rel=category tag]").text(); - String year = getStrByRegex(Pattern.compile("◎年  代 (.*?)
"), partHTML); - if (year.equals("")) year = getStrByRegex(Pattern.compile("首播:(.*?)
"), partHTML); - String area = getStrByRegex(Pattern.compile("◎产  地 (.*?)
"), partHTML); - if (area.equals("")) area = getStrByRegex(Pattern.compile("地区:(.*?)
"), partHTML); - String remark = getStrByRegex(Pattern.compile("◎上映日期 (.*?)
"), partHTML); - String actor = getActorOrDirector(Pattern.compile("◎演  员 (.*?)

"), partHTML); - if (actor.equals("")) actor = getActorOrDirector(Pattern.compile("◎主  演 (.*?)

"), partHTML); - if (actor.equals("")) actor = getActorOrDirector(Pattern.compile("主演:(.*?)
"), partHTML); - String director = getActorOrDirector(Pattern.compile("◎导  演 (.*?)
"), partHTML); - if (director.equals("")) director = getActorOrDirector(Pattern.compile("导演:(.*?)
"), partHTML); - String description = getDescription(Pattern.compile("◎简  介(.*?)
", Pattern.CASE_INSENSITIVE | Pattern.DOTALL), partHTML); - if (description.equals("")) description = getDescription(Pattern.compile("简介(.*?)

", Pattern.CASE_INSENSITIVE | Pattern.DOTALL), partHTML); - - Vod vod = new Vod(); - vod.setVodId(ids.get(0)); - vod.setVodName(name); - vod.setVodPic(pic); - vod.setTypeName(typeName); - vod.setVodYear(year); - vod.setVodArea(area); - vod.setVodRemarks(remark); - vod.setVodActor(actor); - vod.setVodDirector(director); - vod.setVodContent(description); - vod.setVodPlayFrom(TextUtils.join("$$$", playMap.keySet())); - vod.setVodPlayUrl(TextUtils.join("$$$", playMap.values())); - - return Result.string(vod); - } - - private String getStrByRegex(Pattern pattern, String str) { - Matcher matcher = pattern.matcher(str); - if (matcher.find()) return matcher.group(1).trim(); - return ""; - } - - private String getActorOrDirector(Pattern pattern, String str) { - return getStrByRegex(pattern, str) - .replaceAll("
", "") - .replaceAll(" ", "") - .replaceAll("&", "") - .replaceAll("middot;", "・") - .replaceAll("     ", ",") - .replaceAll("      ", ",") - .replaceAll(" ", ""); - } - - private String getDescription(Pattern pattern, String str) { - return getStrByRegex(pattern, str) - .replaceAll("]+>", "") - .replaceAll("\n", "") - .replaceAll("&", "") - .replaceAll("middot;", "・") - .replaceAll("ldquo;", "【") - .replaceAll("rdquo;", "】") - .replaceAll(" ", ""); - } - - @Override - public String searchContent(String key, boolean quick) throws Exception { - return searchContent(key, quick, "1"); - } - - @Override - public String searchContent(String key, boolean quick, String pg) throws Exception { - String searchUrl = siteUrl + "/e/search/index.php"; - if (pg.equals("1")) { - RequestBody formBody = new FormBody.Builder() - .add("show", "title") - .add("tempid", "1") - .add("tbname", "article") - .add("mid", "1") - .add("dopost", "search") - .add("submit", "") - .addEncoded("keyboard", key) - .build(); - Request request = new Request.Builder().url(searchUrl) - .addHeader("User-Agent", Util.CHROME) - .addHeader("Origin", siteUrl) - .addHeader("Referer", siteUrl + "/") - .post(formBody) - .build(); - Response response = OkHttp.newCall(request); - String[] split = String.valueOf(response.request().url()).split("\\?searchid="); - nextSearchUrlPrefix = split[0] + "index.php?page="; - nextSearchUrlSuffix = "&searchid=" + split[1]; - return Result.string(parseVodListFromDoc(response.body().string())); - } else { - int page = Integer.parseInt(pg) - 1; - searchUrl = nextSearchUrlPrefix + page + nextSearchUrlSuffix; - return Result.string(parseVodListFromDoc(OkHttp.string(searchUrl, getHeader()))); - } - } - - @Override - public String playerContent(String flag, String id, List vipFlags) throws Exception { - return Result.get().url(id).string(); - } -} diff --git a/app/src/main/java/com/github/catvod/spider/YHDM.java b/app/src/main/java/com/github/catvod/spider/YHDM.java index 770cff89..a633da48 100644 --- a/app/src/main/java/com/github/catvod/spider/YHDM.java +++ b/app/src/main/java/com/github/catvod/spider/YHDM.java @@ -91,7 +91,6 @@ public class YHDM extends Spider { Document doc = Jsoup.parse(OkHttp.string(detailUrl, getHeader())); Elements sources = doc.select(".myui-content__list.sort-list"); Elements circuits = doc.select("a[href^=#playlist]"); - StringBuilder vod_play_url = new StringBuilder(); StringBuilder vod_play_from = new StringBuilder(); for (int i = 0; i < circuits.size(); i++) { @@ -113,7 +112,6 @@ public class YHDM extends Spider { String year = matcher(text, "年份:(.*?)更新"); String remark = matcher(text, "更新:(.*?)简介"); String brief = doc.select(".col-pd.text-collapse .data").text(); - Vod vod = new Vod(); vod.setVodId(ids.get(0)); vod.setVodArea(area); @@ -164,7 +162,6 @@ public class YHDM extends Spider { String key = "57A891D97E332A9D"; String iv = matcher(content1, "bt_token = \"(.*?)\""); String realUrl = Crypto.CBC(playUrl, key, iv); - if (realUrl == null) return Result.get().url(siteUrl + id).parse().string(); return Result.get().url(realUrl).string(); } diff --git a/app/src/main/java/com/github/catvod/spider/Ysj.java b/app/src/main/java/com/github/catvod/spider/Ysj.java deleted file mode 100644 index 3f6fb202..00000000 --- a/app/src/main/java/com/github/catvod/spider/Ysj.java +++ /dev/null @@ -1,166 +0,0 @@ -package com.github.catvod.spider; - -import android.text.TextUtils; - -import com.github.catvod.bean.Class; -import com.github.catvod.bean.Filter; -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 com.github.catvod.utils.Util; - -import org.jsoup.Jsoup; -import org.jsoup.nodes.Document; -import org.jsoup.nodes.Element; -import org.jsoup.select.Elements; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; - -public class Ysj extends Spider { - - private static final String siteUrl = "https://www.dmmiku.com"; - private static final String cateUrl = "https://www.dmmiku.com/index.php/vod/show"; - private static final String homeUrl = "https://www.dmmiku.com/index.php/vod/show/id/20.html"; - private static final String detailUrl = "https://www.dmmiku.com/index.php/vod/detail/id/"; - private static final String searchUrl = "https://www.dmmiku.com/index.php/vod/search.html"; - private static final String playUrl = "/index.php/vod/play/id/"; - - private HashMap getHeaders() { - HashMap headers = new HashMap<>(); - headers.put("User-Agent", Util.CHROME); - return headers; - } - - private Filter getFilter(String name, String key, List texts) { - List values = new ArrayList<>(); - for (String text : texts) { - if (text.isEmpty()) continue; - values.add(new Filter.Value(text, text.replace("全部", ""))); - } - return new Filter(key, name, values); - } - - @Override - public String homeContent(boolean filter) { - List list = new ArrayList<>(); - List classes = new ArrayList<>(); - List array = new ArrayList<>(); - LinkedHashMap> filters = new LinkedHashMap<>(); - Document doc = Jsoup.parse(OkHttp.string(homeUrl, getHeaders())); - array.add(getFilter("地區", "area", doc.select("div#hl03").select("a").eachText())); - array.add(getFilter("年份", "year", doc.select("div#hl04").select("a").eachText())); - array.add(getFilter("語言", "lang", doc.select("div#hl05").select("a").eachText())); - array.add(getFilter("字母", "letter", doc.select("div#hl06").select("a").eachText())); - for (Element element : doc.select("div#hl02").select("a")) { - String typeId = element.attr("href").split("/")[5]; - typeId = typeId.contains(".html") ? "" : typeId; - String typeName = element.text().replace("BD", ""); - classes.add(new Class(typeId, typeName)); - filters.put(typeId, array); - } - for (Element element : doc.select("li.vodlist_item")) { - String id = element.select("a").attr("href").split("/")[5]; - String name = element.select("a").attr("title"); - String pic = siteUrl + element.select("a").attr("data-original"); - String remark = element.select("span.pic_text").text(); - list.add(new Vod(id, name, pic, remark)); - } - return Result.string(classes, list, filters); - } - - @Override - public String categoryContent(String tid, String pg, boolean filter, HashMap extend) { - StringBuilder sb = new StringBuilder(cateUrl); - if (extend.containsKey("area")) sb.append("/area/").append(extend.get("area")); - if (tid.length() > 0) sb.append("/class/").append(tid); - sb.append("/id/20"); - if (extend.containsKey("lang")) sb.append("/lang/").append(extend.get("lang")); - if (extend.containsKey("letter")) sb.append("/letter/").append(extend.get("letter")); - if (extend.containsKey("year")) sb.append("/year/").append(extend.get("year")); - if (!pg.equals("1")) sb.append("/page/").append(pg); - sb.append(".html"); - Document doc = Jsoup.parse(OkHttp.string(sb.toString(), getHeaders())); - List list = new ArrayList<>(); - for (Element element : doc.select("li.vodlist_item")) { - String id = element.select("a").attr("href").split("/")[5]; - String name = element.select("a").attr("title"); - String pic = siteUrl + element.select("a").attr("data-original"); - String remark = element.select("span.pic_text").text(); - list.add(new Vod(id, name, pic, remark)); - } - return Result.string(list); - } - - @Override - public String detailContent(List ids) { - Document doc = Jsoup.parse(OkHttp.string(detailUrl.concat(ids.get(0)), getHeaders())); - String name = doc.select("h2.title").text(); - String pic = siteUrl + doc.select("a.vodlist_thumb").attr("data-original"); - String year = doc.select("li.data").get(0).select("a").get(0).text(); - String area = doc.select("li.data").get(0).select("a").get(1).text(); - String type = doc.select("li.data").get(0).select("a").get(2).text(); - String actor = doc.select("li.data").get(2).text().replace("主演:", ""); - String director = doc.select("li.data").get(3).text().replace("导演:", ""); - String content = doc.select("div.content_desc > span").text(); - - Vod vod = new Vod(); - vod.setVodId(ids.get(0)); - vod.setVodPic(pic); - vod.setVodYear(year); - vod.setVodName(name); - vod.setVodArea(area); - vod.setVodActor(actor); - vod.setVodContent(content); - vod.setVodDirector(director); - vod.setTypeName(type); - - Map sites = new LinkedHashMap<>(); - Elements sources = doc.select("div.play_source_tab > a"); - Elements sourceList = doc.select("ul.content_playlist"); - for (int i = 0; i < sources.size(); i++) { - Element source = sources.get(i); - String sourceName = source.attr("alt"); - Elements playList = sourceList.get(i).select("a"); - List vodItems = new ArrayList<>(); - for (int j = 0; j < playList.size(); j++) { - Element e = playList.get(j); - String href = e.attr("href").replace(playUrl, ""); - vodItems.add(e.text() + "$" + href); - } - if (vodItems.size() > 0) { - sites.put(sourceName, TextUtils.join("#", vodItems)); - } - } - 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 list = new ArrayList<>(); - String target = searchUrl.concat("?wd=").concat(key).concat("&submit="); - Document doc = Jsoup.parse(OkHttp.string(target, getHeaders())); - if (doc.html().contains("很抱歉,暂无相关视频")) return Result.string(list); - for (Element element : doc.select("li.searchlist_item")) { - String id = element.select("a").attr("href").split("/")[5]; - String name = element.select("a").attr("title"); - String pic = siteUrl + element.select("a").attr("data-original"); - String remark = element.select("span.pic_text").text(); - list.add(new Vod(id, name, pic, remark)); - } - return Result.string(list); - } - - @Override - public String playerContent(String flag, String id, List vipFlags) { - return Result.get().url(siteUrl + playUrl + id).parse().header(getHeaders()).string(); - } -} diff --git a/app/src/main/java/com/github/catvod/utils/LZString.java b/app/src/main/java/com/github/catvod/utils/LZString.java deleted file mode 100644 index fdc76b97..00000000 --- a/app/src/main/java/com/github/catvod/utils/LZString.java +++ /dev/null @@ -1,220 +0,0 @@ -package com.github.catvod.utils; - -/* - * LZString4Java By Rufus Huang - * https://github.com/rufushuang/lz-string4java - * MIT License - * - * Port from original JavaScript version by pieroxy - * https://github.com/pieroxy/lz-string - */ - -import android.text.TextUtils; - -import java.util.*; - -public class LZString { - - private static final char[] keyStrBase64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".toCharArray(); - private static final Map> baseReverseDic = new HashMap<>(); - - private static char getBaseValue(char[] alphabet, Character character) { - Map map = baseReverseDic.get(alphabet); - if (map == null) { - map = new HashMap<>(); - baseReverseDic.put(alphabet, map); - for (int i = 0; i < alphabet.length; i++) { - map.put(alphabet[i], i); - } - } - return (char) map.get(character).intValue(); - } - - public static String decompressFromBase64(final String inputStr) { - if (TextUtils.isEmpty(inputStr)) return ""; - return _decompress(inputStr.length(), 32, new DecompressFunctionWrapper() { - @Override - public char doFunc(int index) { - return getBaseValue(keyStrBase64, inputStr.charAt(index)); - } - }); - } - - private static abstract class DecompressFunctionWrapper { - public abstract char doFunc(int i); - } - - protected static class DecData { - public char val; - public int position; - public int index; - } - - public static String f(int i) { - return String.valueOf((char) i); - } - - private static String _decompress(int length, int resetValue, DecompressFunctionWrapper getNextValue) { - List dictionary = new ArrayList<>(); - int enlargeIn = 4; - int dictSize = 4; - int numBits = 3; - String entry; - StringBuilder result = new StringBuilder(); - String w; - int bits, resb; - int maxpower, power; - String c = null; - DecData data = new DecData(); - data.val = getNextValue.doFunc(0); - data.position = resetValue; - data.index = 1; - - for (int i = 0; i < 3; i += 1) { - dictionary.add(i, f(i)); - } - - bits = 0; - maxpower = powerOf2(2); - power = 1; - while (power != maxpower) { - resb = data.val & data.position; - data.position >>= 1; - if (data.position == 0) { - data.position = resetValue; - data.val = getNextValue.doFunc(data.index++); - } - bits |= (resb > 0 ? 1 : 0) * power; - power <<= 1; - } - - switch (bits) { - case 0: - maxpower = powerOf2(8); - power = 1; - while (power != maxpower) { - resb = data.val & data.position; - data.position >>= 1; - if (data.position == 0) { - data.position = resetValue; - data.val = getNextValue.doFunc(data.index++); - } - bits |= (resb > 0 ? 1 : 0) * power; - power <<= 1; - } - c = f(bits); - break; - case 1: - bits = 0; - maxpower = powerOf2(16); - power = 1; - while (power != maxpower) { - resb = data.val & data.position; - data.position >>= 1; - if (data.position == 0) { - data.position = resetValue; - data.val = getNextValue.doFunc(data.index++); - } - bits |= (resb > 0 ? 1 : 0) * power; - power <<= 1; - } - c = f(bits); - break; - case 2: - return ""; - } - dictionary.add(3, c); - w = c; - result.append(w); - while (true) { - if (data.index > length) { - return ""; - } - bits = 0; - maxpower = powerOf2(numBits); - power = 1; - while (power != maxpower) { - resb = data.val & data.position; - data.position >>= 1; - if (data.position == 0) { - data.position = resetValue; - data.val = getNextValue.doFunc(data.index++); - } - bits |= (resb > 0 ? 1 : 0) * power; - power <<= 1; - } - int cc; - switch (cc = bits) { - case 0: - maxpower = powerOf2(8); - power = 1; - while (power != maxpower) { - resb = data.val & data.position; - data.position >>= 1; - if (data.position == 0) { - data.position = resetValue; - data.val = getNextValue.doFunc(data.index++); - } - bits |= (resb > 0 ? 1 : 0) * power; - power <<= 1; - } - dictionary.add(dictSize++, f(bits)); - cc = dictSize - 1; - enlargeIn--; - break; - case 1: - bits = 0; - maxpower = powerOf2(16); - power = 1; - while (power != maxpower) { - resb = data.val & data.position; - data.position >>= 1; - if (data.position == 0) { - data.position = resetValue; - data.val = getNextValue.doFunc(data.index++); - } - bits |= (resb > 0 ? 1 : 0) * power; - power <<= 1; - } - dictionary.add(dictSize++, f(bits)); - cc = dictSize - 1; - enlargeIn--; - break; - case 2: - return result.toString(); - } - - if (enlargeIn == 0) { - enlargeIn = powerOf2(numBits); - numBits++; - } - - if (cc < dictionary.size() && dictionary.get(cc) != null) { - entry = dictionary.get(cc); - } else { - if (cc == dictSize) { - entry = w + w.charAt(0); - } else { - return null; - } - } - result.append(entry); - - // Add w+entry[0] to the dictionary. - dictionary.add(dictSize++, w + entry.charAt(0)); - enlargeIn--; - - w = entry; - - if (enlargeIn == 0) { - enlargeIn = powerOf2(numBits); - numBits++; - } - } - } - - private static int powerOf2(int power) { - return 1 << power; - } -} - diff --git a/app/src/main/java/com/github/catvod/utils/Util.java b/app/src/main/java/com/github/catvod/utils/Util.java index 15d70d55..b59f81dc 100644 --- a/app/src/main/java/com/github/catvod/utils/Util.java +++ b/app/src/main/java/com/github/catvod/utils/Util.java @@ -13,9 +13,6 @@ import android.webkit.WebViewClient; import com.github.catvod.spider.Init; -import java.io.File; -import java.io.FileInputStream; -import java.security.MessageDigest; import java.util.Arrays; import java.util.List; import java.util.Locale; @@ -26,7 +23,6 @@ public class Util { public static final Pattern RULE = Pattern.compile("http((?!http).){12,}?\\.(m3u8|mp4|mkv|flv|mp3|m4a|aac)\\?.*|http((?!http).){12,}\\.(m3u8|mp4|mkv|flv|mp3|m4a|aac)|http((?!http).)*?video/tos*"); public static final Pattern THUNDER = Pattern.compile("(magnet|thunder|ed2k):.*"); public static final String CHROME = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36"; - public static final String ACCEPT = "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7"; public static final List MEDIA = Arrays.asList("mp4", "mkv", "wmv", "flv", "avi", "iso", "mpg", "ts", "mp3", "aac", "flac", "m4a", "ape", "ogg"); public static final List SUB = Arrays.asList("srt", "ass", "ssa", "vtt"); diff --git a/jar/custom_spider.jar b/jar/custom_spider.jar index 6ed82a17..c9df1bf0 100644 Binary files a/jar/custom_spider.jar and b/jar/custom_spider.jar differ diff --git a/jar/custom_spider.jar.md5 b/jar/custom_spider.jar.md5 index 1c6871e6..d31c132c 100644 --- a/jar/custom_spider.jar.md5 +++ b/jar/custom_spider.jar.md5 @@ -1 +1 @@ -5e53c8f9ddd4ede5359c16bee091db93 +2f4edf2bed2c6bfc906049428f875e5b