pull/84/head
FongMi 1 year ago
parent 9dc441bb4e
commit ec67797392
  1. 13
      app/src/main/java/com/github/catvod/debug/MainActivity.java
  2. 115
      app/src/main/java/com/github/catvod/spider/PTT.java
  3. BIN
      jar/custom_spider.jar
  4. 2
      jar/custom_spider.jar.md5

@ -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<String, String> 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();
}

@ -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<String, String> getHeader() {
Map<String, String> 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<Class> 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<String, String> 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<Vod> 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<String> ids) throws Exception {
Document doc = Jsoup.parse(OkHttp.string(url + ids.get(0), getHeader()));
LinkedHashMap<String, String> flags = new LinkedHashMap<>();
List<String> 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<String> 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<String> 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<Vod> 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);
}
}

Binary file not shown.

@ -1 +1 @@
6540fced21f9b3ff71912f1f461c1fcf
e15a4ec1e9d6fe49326304bf84a4e404

Loading…
Cancel
Save