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 56f98d1..7212b18 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.Ysj; +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 Ysj(); + spider = new PTT(); spider.init(this, ""); } catch (Throwable e) { e.printStackTrace(); @@ -71,7 +71,10 @@ public class MainActivity extends Activity { public void categoryContent() { try { - Logger.t("categoryContent").d(spider.categoryContent("movie", "1", true, new HashMap<>())); + HashMap extend = new HashMap<>(); + extend.put("c", "19"); + extend.put("year", "2024"); + Logger.t("categoryContent").d(spider.categoryContent("3", "2", true, extend)); } catch (Throwable e) { e.printStackTrace(); } @@ -79,7 +82,7 @@ public class MainActivity extends Activity { public void detailContent() { try { - Logger.t("detailContent").d(spider.detailContent(Arrays.asList("ulNJ1TWJXFPn0GQGCuSKjZMmP28PTq2U"))); + Logger.t("detailContent").d(spider.detailContent(Arrays.asList("382044"))); } catch (Throwable e) { e.printStackTrace(); } @@ -87,7 +90,7 @@ public class MainActivity extends Activity { public void playerContent() { try { - Logger.t("playerContent").d(spider.playerContent("", "ulNJ1TWJXFPn0GQGCuSKjZMmP28PTq2U_J52h83OSgHvZXbaecUtirP1qzfVouxIk_1", new ArrayList<>())); + Logger.t("playerContent").d(spider.playerContent("", "382044/1/78", new ArrayList<>())); } catch (Throwable e) { e.printStackTrace(); } diff --git a/app/src/main/java/com/github/catvod/spider/PTT.java b/app/src/main/java/com/github/catvod/spider/PTT.java new file mode 100644 index 0000000..23c38e5 --- /dev/null +++ b/app/src/main/java/com/github/catvod/spider/PTT.java @@ -0,0 +1,115 @@ +package com.github.catvod.spider; + +import android.content.Context; +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.OkHttp; +import com.github.catvod.utils.Json; +import com.github.catvod.utils.Util; + +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.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class PTT extends Spider { + + private String url = "https://ptt.red/"; + private String extend; + + private Map getHeader() { + Map header = new HashMap<>(); + header.put("User-Agent", Util.CHROME); + header.put("Accept-Language", "zh-TW,zh;q=0.9,en-US;q=0.8,en;q=0.7"); + return header; + } + + @Override + public void init(Context context, String extend) throws Exception { + this.extend = extend; + } + + @Override + public String homeContent(boolean filter) throws Exception { + Document doc = Jsoup.parse(OkHttp.string(url, getHeader())); + List classes = new ArrayList<>(); + for (Element a : doc.select("li > a.px-2.px-sm-3.py-2.nav-link")) classes.add(new Class(a.attr("href").replace("/p/", ""), a.text())); + return Result.string(classes, TextUtils.isEmpty(extend) ? Json.parse("{}") : Json.parse(OkHttp.string(extend))); + } + + @Override + public String categoryContent(String tid, String pg, boolean filter, HashMap extend) throws Exception { + Uri.Builder builder = Uri.parse(url + "p/" + tid).buildUpon(); + if (!TextUtils.isEmpty(extend.get("c"))) builder.appendEncodedPath("c/" + extend.get("c")); + if (!TextUtils.isEmpty(extend.get("area"))) builder.appendQueryParameter("area_id", extend.get("area")); + if (!TextUtils.isEmpty(extend.get("year"))) builder.appendQueryParameter("year", extend.get("year")); + if (!TextUtils.isEmpty(extend.get("sort"))) builder.appendQueryParameter("sort", extend.get("sort")); + Document doc = Jsoup.parse(OkHttp.string(builder.toString(), getHeader())); + List list = new ArrayList<>(); + for (Element div : doc.select("div.card > div.embed-responsive")) { + Element a = div.select("a").get(0); + Element img = a.select("img").get(0); + Element remark = div.select("span.badge.badge-success").get(0); + list.add(new Vod(a.attr("href").substring(1), img.attr("alt"), url + img.attr("src"), remark.text())); + } + return Result.string(list); + } + + @Override + public String detailContent(List ids) throws Exception { + Document doc = Jsoup.parse(OkHttp.string(url + ids.get(0), getHeader())); + LinkedHashMap flags = new LinkedHashMap<>(); + List playUrls = new ArrayList<>(); + for (Element f : doc.select("ul#w1 > li > a")) { + flags.put(f.attr("href").split("/")[3], f.attr("title")); + } + for (String flag : flags.keySet()) { + List urls = new ArrayList<>(); + for (Element e : doc.select("div > a.seq.border")) { + urls.add(e.text() + "$" + ids.get(0) + "/" + e.attr("href").split("/")[2] + "/" + flag); + } + playUrls.add(TextUtils.join("#", urls)); + } + Vod vod = new Vod(); + vod.setVodPlayFrom(TextUtils.join("$$$", flags.values())); + vod.setVodPlayUrl(TextUtils.join("$$$", playUrls)); + return Result.string(vod); + } + + @Override + public String playerContent(String flag, String id, List vipFlags) throws Exception { + Matcher m = Pattern.compile("contentUrl\":\"(.*?)\"").matcher(OkHttp.string(url + id)); + if (m.find()) return Result.get().url(m.group(1).replace("\\", "")).string(); + return Result.error(""); + } + + @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 { + Document doc = Jsoup.parse(OkHttp.string(url + String.format("q/%s?page=%s", key, pg), getHeader())); + List list = new ArrayList<>(); + for (Element div : doc.select("div.card > div.embed-responsive")) { + Element a = div.select("a").get(0); + Element img = a.select("img").get(0); + Element remark = div.select("span.badge.badge-success").get(0); + list.add(new Vod(a.attr("href").substring(1), img.attr("alt"), url + img.attr("src"), remark.text())); + } + return Result.string(list); + } +} diff --git a/jar/custom_spider.jar b/jar/custom_spider.jar index 31a954f..500d9f5 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 277dd5e..7ff46d4 100644 --- a/jar/custom_spider.jar.md5 +++ b/jar/custom_spider.jar.md5 @@ -1 +1 @@ -6540fced21f9b3ff71912f1f461c1fcf +e15a4ec1e9d6fe49326304bf84a4e404