Clean code

This commit is contained in:
FongMi 2024-02-29 01:02:31 +08:00
parent c3faf59813
commit 5bc5c97bef
15 changed files with 71 additions and 211 deletions

View File

@ -2,8 +2,6 @@ package com.github.catvod.crawler;
import android.content.Context; import android.content.Context;
import com.github.catvod.net.OkHttp;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -64,10 +62,10 @@ public abstract class Spider {
} }
public static Dns safeDns() { public static Dns safeDns() {
return Dns.SYSTEM; return null;
} }
public OkHttpClient client() { public static OkHttpClient client() {
return OkHttp.client(); return null;
} }
} }

View File

@ -6,8 +6,8 @@ import android.widget.Button;
import com.github.catvod.R; import com.github.catvod.R;
import com.github.catvod.crawler.Spider; import com.github.catvod.crawler.Spider;
import com.github.catvod.spider.Eighteen;
import com.github.catvod.spider.Init; import com.github.catvod.spider.Init;
import com.github.catvod.spider.Wogg;
import com.orhanobut.logger.AndroidLogAdapter; import com.orhanobut.logger.AndroidLogAdapter;
import com.orhanobut.logger.Logger; import com.orhanobut.logger.Logger;
@ -46,7 +46,7 @@ public class MainActivity extends Activity {
private void initSpider() { private void initSpider() {
try { try {
Init.init(getApplicationContext()); Init.init(getApplicationContext());
spider = new Eighteen(); spider = new Wogg();
spider.init(this, ""); spider.init(this, "");
} catch (Throwable e) { } catch (Throwable e) {
e.printStackTrace(); e.printStackTrace();

View File

@ -5,6 +5,7 @@ import com.github.catvod.crawler.Spider;
import java.io.IOException; import java.io.IOException;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Objects;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import okhttp3.Dns; import okhttp3.Dns;
@ -24,21 +25,12 @@ public class OkHttp {
static volatile OkHttp INSTANCE = new OkHttp(); static volatile OkHttp INSTANCE = new OkHttp();
} }
public static OkHttp get() { private static OkHttp get() {
return Loader.INSTANCE; return Loader.INSTANCE;
} }
public static Dns dns() { public static Response newCall(Request request) throws IOException {
return Spider.safeDns(); return client().newCall(request).execute();
}
public static OkHttpClient client() {
if (get().client != null) return get().client;
return get().client = getBuilder().build();
}
public static OkHttpClient noRedirect() {
return client().newBuilder().followRedirects(false).followSslRedirects(false).build();
} }
public static Response newCall(String url) throws IOException { public static Response newCall(String url) throws IOException {
@ -54,27 +46,19 @@ public class OkHttp {
} }
public static String string(String url, Map<String, String> header) { public static String string(String url, Map<String, String> header) {
return string(client(), url, null, header); return string(url, null, header);
} }
public static String string(OkHttpClient client, String url, Map<String, String> header) { public static String string(String url, Map<String, String> params, Map<String, String> header) {
return string(client, url, null, header); return url.startsWith("http") ? new OkRequest(GET, url, params, header).execute(client()).getBody() : "";
}
public static String string(OkHttpClient client, String url, Map<String, String> params, Map<String, String> header) {
return url.startsWith("http") ? new OkRequest(GET, url, params, header).execute(client).getBody() : "";
} }
public static String post(String url, Map<String, String> params) { public static String post(String url, Map<String, String> params) {
return post(client(), url, params, null).getBody(); return post(url, params, null).getBody();
} }
public static OkResult post(String url, Map<String, String> params, Map<String, String> header) { public static OkResult post(String url, Map<String, String> params, Map<String, String> header) {
return post(client(), url, params, header); return new OkRequest(POST, url, params, header).execute(client());
}
public static OkResult post(OkHttpClient client, String url, Map<String, String> params, Map<String, String> header) {
return new OkRequest(POST, url, params, header).execute(client);
} }
public static String post(String url, String json) { public static String post(String url, String json) {
@ -82,15 +66,11 @@ public class OkHttp {
} }
public static OkResult post(String url, String json, Map<String, String> header) { public static OkResult post(String url, String json, Map<String, String> header) {
return post(client(), url, json, header); return new OkRequest(POST, url, json, header).execute(client());
}
public static OkResult post(OkHttpClient client, String url, String json, Map<String, String> header) {
return new OkRequest(POST, url, json, header).execute(client);
} }
public static String getLocation(String url, Map<String, String> header) throws IOException { public static String getLocation(String url, Map<String, String> header) throws IOException {
return getLocation(noRedirect().newCall(new Request.Builder().url(url).headers(Headers.of(header)).build()).execute().headers().toMultimap()); return getLocation(client().newBuilder().followRedirects(false).followSslRedirects(false).build().newCall(new Request.Builder().url(url).headers(Headers.of(header)).build()).execute().headers().toMultimap());
} }
public static String getLocation(Map<String, List<String>> headers) { public static String getLocation(Map<String, List<String>> headers) {
@ -100,7 +80,28 @@ public class OkHttp {
return null; return null;
} }
public static OkHttpClient.Builder getBuilder() { private static OkHttpClient build() {
return new OkHttpClient.Builder().dns(dns()).connectTimeout(30, TimeUnit.SECONDS).readTimeout(30, TimeUnit.SECONDS).writeTimeout(30, TimeUnit.SECONDS).hostnameVerifier((hostname, session) -> true).sslSocketFactory(new SSLCompat(), SSLCompat.TM); if (get().client != null) return get().client;
return get().client = getBuilder().build();
}
private static OkHttpClient.Builder getBuilder() {
return new OkHttpClient.Builder().dns(safeDns()).connectTimeout(30, TimeUnit.SECONDS).readTimeout(30, TimeUnit.SECONDS).writeTimeout(30, TimeUnit.SECONDS).hostnameVerifier((hostname, session) -> true).sslSocketFactory(new SSLCompat(), SSLCompat.TM);
}
private static OkHttpClient client() {
try {
return Objects.requireNonNull(Spider.client());
} catch (Throwable e) {
return build();
}
}
private static Dns safeDns() {
try {
return Objects.requireNonNull(Spider.safeDns());
} catch (Throwable e) {
return Dns.SYSTEM;
}
} }
} }

View File

@ -22,17 +22,16 @@ class OkRequest {
private final String json; private final String json;
private Request request; private Request request;
private String url; private String url;
private Object tag;
OkRequest(String method, String url, Map<String, String> params, Map<String, String> header) { OkRequest(String method, String url, Map<String, String> params, Map<String, String> header) {
this(method, url, null, params, header); this(method, url, params, null, header);
} }
OkRequest(String method, String url, String json, Map<String, String> header) { OkRequest(String method, String url, String json, Map<String, String> header) {
this(method, url, json, null, header); this(method, url, null, json, header);
} }
private OkRequest(String method, String url, String json, Map<String, String> params, Map<String, String> header) { private OkRequest(String method, String url, Map<String, String> params, String json, Map<String, String> header) {
this.url = url; this.url = url;
this.json = json; this.json = json;
this.method = method; this.method = method;
@ -41,17 +40,11 @@ class OkRequest {
getInstance(); getInstance();
} }
public OkRequest tag(Object tag) {
this.tag = tag;
return this;
}
private void getInstance() { private void getInstance() {
Request.Builder builder = new Request.Builder(); Request.Builder builder = new Request.Builder();
if (method.equals(OkHttp.GET) && params != null) setParams(); if (method.equals(OkHttp.GET) && params != null) setParams();
if (method.equals(OkHttp.POST)) builder.post(getRequestBody()); if (method.equals(OkHttp.POST)) builder.post(getRequestBody());
if (header != null) for (String key : header.keySet()) builder.addHeader(key, header.get(key)); if (header != null) for (String key : header.keySet()) builder.addHeader(key, header.get(key));
if (tag != null) builder.tag(tag);
request = builder.url(url).build(); request = builder.url(url).build();
} }

View File

@ -1,6 +1,5 @@
package com.github.catvod.spider; package com.github.catvod.spider;
import android.app.AlertDialog;
import android.content.Context; import android.content.Context;
import android.text.TextUtils; import android.text.TextUtils;
@ -32,7 +31,6 @@ import java.util.LinkedHashMap;
import java.util.List; import java.util.List;
import java.util.Locale; import java.util.Locale;
import java.util.Map; import java.util.Map;
import java.util.concurrent.ScheduledExecutorService;
/** /**
* @author ColaMint & FongMi & 唐三 * @author ColaMint & FongMi & 唐三
@ -43,8 +41,6 @@ public class Bili extends Spider {
private static Map<String, String> audios; private static Map<String, String> audios;
private static String cookie; private static String cookie;
private ScheduledExecutorService service;
private AlertDialog dialog;
private JsonObject extend; private JsonObject extend;
private boolean login; private boolean login;
private boolean isVip; private boolean isVip;
@ -53,8 +49,8 @@ public class Bili extends Spider {
private static Map<String, String> getHeader() { private static Map<String, String> getHeader() {
Map<String, String> headers = new HashMap<>(); Map<String, String> headers = new HashMap<>();
headers.put("User-Agent", Util.CHROME); headers.put("User-Agent", Util.CHROME);
if (cookie != null) headers.put("cookie", cookie);
headers.put("Referer", "https://www.bilibili.com"); headers.put("Referer", "https://www.bilibili.com");
if (cookie != null) headers.put("cookie", cookie);
return headers; return headers;
} }
@ -280,88 +276,5 @@ public class Bili extends Spider {
login = data.isLogin(); login = data.isLogin();
isVip = data.isVip(); isVip = data.isVip();
wbi = data.getWbi(); wbi = data.getWbi();
//getQRCode();
} }
/*
private void getQRCode() {
if (login) return;
String json = OkHttp.string("https://passport.bilibili.com/x/passport-login/web/qrcode/generate?source=main-mini");
Data data = Resp.objectFrom(json).getData();
Init.run(() -> openApp(data));
}
private Intent getIntent(String pkgName, Data data) {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setClassName(pkgName, "tv.danmaku.bili.ui.intent.IntentHandlerActivity");
intent.setData(Uri.parse(data.getUrl()));
return intent;
}
private void openApp(Data data) {
try {
Init.getActivity().startActivity(getIntent("com.bilibili.app.in", data));
} catch (Exception e) {
showQRCode(data);
} finally {
Init.execute(() -> startService(data));
}
}
private void showQRCode(Data data) {
try {
FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(Utils.dp2px(240), Utils.dp2px(240));
ImageView image = new ImageView(Init.context());
image.setScaleType(ImageView.ScaleType.CENTER_CROP);
image.setImageBitmap(QRCode.getBitmap(data.getUrl(), 240, 2));
FrameLayout frame = new FrameLayout(Init.context());
params.gravity = Gravity.CENTER;
frame.addView(image, params);
dialog = new AlertDialog.Builder(Init.getActivity()).setView(frame).setOnCancelListener(this::cancel).setOnDismissListener(this::dismiss).show();
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
Utils.notify("請使用 BiliBili App 掃描二維碼");
} catch (Exception ignored) {
}
}
private void startService(Data data) {
service = Executors.newScheduledThreadPool(1);
service.scheduleAtFixedRate(() -> {
String url = "https://passport.bilibili.com/x/passport-login/web/qrcode/poll?qrcode_key=" + data.getQrcodeKey() + "&source=main_mini";
String json = OkHttp.string(url, getHeader());
url = Resp.objectFrom(json).getData().getUrl();
if (url.length() > 0) setCookie(url);
}, 1, 1, TimeUnit.SECONDS);
}
private void stopService() {
if (service != null) service.shutdownNow();
Init.run(this::dismiss);
}
private void setCookie(String url) {
StringBuilder sb = new StringBuilder();
String[] splits = Uri.parse(url).getQuery().split("&");
for (String split : splits) sb.append(split).append(";");
FileUtil.write(getUserCache(), cookie = sb.toString());
Utils.notify("請重新進入播放頁");
stopService();
}
private void cancel(DialogInterface dialog) {
FileUtil.write(getUserCache(), cookie = "");
stopService();
}
private void dismiss(DialogInterface dialog) {
stopService();
}
private void dismiss() {
try {
if (dialog != null) dialog.dismiss();
} catch (Exception ignored) {
}
}
*/
} }

View File

@ -15,37 +15,21 @@ import org.jsoup.nodes.Element;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
public class Eighteen extends Spider { public class Eighteen extends Spider {
private final String url = "https://mjv002.com/zh/"; private final String url = "https://mjv002.com/zh/";
private String cookie;
private void getCookie() {
try {
cookie = OkHttp.newCall("https://mjv002.com/zh/chinese_IamOverEighteenYearsOld/19/index.html").headers("set-cookie").get(0).split(";")[0];
} catch (Exception e) {
e.printStackTrace();
}
}
private Map<String, String> getHeader() {
Map<String, String> header = new HashMap<>();
header.put("Cookie", cookie);
return header;
}
@Override @Override
public void init(Context context, String extend) throws Exception { public void init(Context context, String extend) throws Exception {
getCookie(); OkHttp.newCall("https://mjv002.com/zh/chinese_IamOverEighteenYearsOld/19/index.html").close();
} }
@Override @Override
public String homeContent(boolean filter) throws Exception { public String homeContent(boolean filter) throws Exception {
List<Class> classes = new ArrayList<>(); List<Class> classes = new ArrayList<>();
List<Vod> list = new ArrayList<>(); List<Vod> list = new ArrayList<>();
Document doc = Jsoup.parse(OkHttp.string(url, getHeader())); Document doc = Jsoup.parse(OkHttp.string(url));
for (Element a : doc.select("ul.animenu__nav > li > a")) { for (Element a : doc.select("ul.animenu__nav > li > a")) {
String typeName = a.text(); String typeName = a.text();
String typeId = a.attr("href").replace(url, ""); String typeId = a.attr("href").replace(url, "");
@ -68,7 +52,7 @@ public class Eighteen extends Spider {
List<Vod> list = new ArrayList<>(); List<Vod> list = new ArrayList<>();
tid = tid.replace("random", "list"); tid = tid.replace("random", "list");
tid = tid.replace("index", pg); tid = tid.replace("index", pg);
Document doc = Jsoup.parse(OkHttp.string(url + tid, getHeader())); Document doc = Jsoup.parse(OkHttp.string(url + tid));
for (Element div : doc.select("div.post")) { for (Element div : doc.select("div.post")) {
String id = div.select("a").attr("href").replace(url, ""); String id = div.select("a").attr("href").replace(url, "");
String name = div.select("h3").text(); String name = div.select("h3").text();
@ -81,7 +65,7 @@ public class Eighteen extends Spider {
@Override @Override
public String detailContent(List<String> ids) throws Exception { public String detailContent(List<String> ids) throws Exception {
Document doc = Jsoup.parse(OkHttp.string(url + ids.get(0), getHeader())); Document doc = Jsoup.parse(OkHttp.string(url + ids.get(0)));
Element wrap = doc.select("div.video-wrap").get(0); Element wrap = doc.select("div.video-wrap").get(0);
String name = wrap.select("div.archive-title > h1").text(); String name = wrap.select("div.archive-title > h1").text();
String pic = wrap.select("div.player-wrap > img").attr("src"); String pic = wrap.select("div.player-wrap > img").attr("src");
@ -106,7 +90,7 @@ public class Eighteen extends Spider {
@Override @Override
public String playerContent(String flag, String id, List<String> vipFlags) throws Exception { public String playerContent(String flag, String id, List<String> vipFlags) throws Exception {
return Result.get().parse().url(url + id).header(getHeader()).string(); return Result.get().parse().url(url + id).string();
} }
private String searchContent(String key, String pg) { private String searchContent(String key, String pg) {
@ -114,7 +98,7 @@ public class Eighteen extends Spider {
params.put("search_keyword", key); params.put("search_keyword", key);
params.put("search_type", "fc"); params.put("search_type", "fc");
params.put("op", "search"); params.put("op", "search");
String res = OkHttp.post(url + "searchform_search/all/" + pg + ".html", params, getHeader()).getBody(); String res = OkHttp.post(url + "searchform_search/all/" + pg + ".html", params);
List<Vod> list = new ArrayList<>(); List<Vod> list = new ArrayList<>();
for (Element div : Jsoup.parse(res).select("div.post")) { for (Element div : Jsoup.parse(res).select("div.post")) {
String id = div.select("a").attr("href").replace(url, ""); String id = div.select("a").attr("href").replace(url, "");

View File

@ -30,8 +30,6 @@ import javax.crypto.Cipher;
import javax.crypto.SecretKeyFactory; import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec; import javax.crypto.spec.DESKeySpec;
import okhttp3.OkHttpClient;
public class NiNi extends Spider { public class NiNi extends Spider {
private static final String desktopUrl = "https://api.nivodz.com/index/desktop/WEB/3.4"; private static final String desktopUrl = "https://api.nivodz.com/index/desktop/WEB/3.4";
@ -62,15 +60,6 @@ public class NiNi extends Spider {
if (extend.get(key) == null || extend.get(key).equals("")) extend.put(key, value); if (extend.get(key) == null || extend.get(key).equals("")) extend.put(key, value);
} }
@Override
public OkHttpClient client() {
try {
return super.client();
} catch (Throwable e) {
return OkHttp.client();
}
}
@Override @Override
public void init(Context context, String extend) { public void init(Context context, String extend) {
adult = !TextUtils.isEmpty(extend); adult = !TextUtils.isEmpty(extend);
@ -290,11 +279,11 @@ public class NiNi extends Spider {
} }
private String get(String url) { private String get(String url) {
return decode(OkHttp.string(client(), genUrl(url, new HashMap<>()), getHeaders())); return decode(OkHttp.string(genUrl(url, new HashMap<>()), getHeaders()));
} }
private String post(String url, Map<String, String> params) { private String post(String url, Map<String, String> params) {
return decode(OkHttp.post(client(), genUrl(url, params), params, getHeaders()).getBody()); return decode(OkHttp.post(genUrl(url, params), params, getHeaders()).getBody());
} }
@SuppressLint("GetInstance") @SuppressLint("GetInstance")

View File

@ -29,8 +29,6 @@ import java.util.LinkedHashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import okhttp3.OkHttpClient;
public class Star extends Spider { public class Star extends Spider {
private static final String apiUrl = "https://aws.ulivetv.net/v3/web/api/filter"; private static final String apiUrl = "https://aws.ulivetv.net/v3/web/api/filter";
@ -43,25 +41,15 @@ public class Star extends Spider {
private Map<String, String> getHeader() { private Map<String, String> getHeader() {
Map<String, String> headers = new HashMap<>(); Map<String, String> headers = new HashMap<>();
headers.put("User-Agent", Util.CHROME); headers.put("User-Agent", Util.CHROME);
headers.put("Cookie", "userIP=64.252.112.99;");
headers.put("Referer", siteUrl); headers.put("Referer", siteUrl);
return headers; return headers;
} }
private String getVer() { private String getVer() {
for (Element script : Jsoup.parse(OkHttp.string(client(), siteUrl, getHeader())).select("script")) if (script.attr("src").contains("buildManifest.js")) return script.attr("src").split("/")[3]; for (Element script : Jsoup.parse(OkHttp.string(siteUrl, getHeader())).select("script")) if (script.attr("src").contains("buildManifest.js")) return script.attr("src").split("/")[3];
return ""; return "";
} }
@Override
public OkHttpClient client() {
try {
return super.client();
} catch (Throwable e) {
return OkHttp.client();
}
}
@Override @Override
public void init(Context context, String extend) { public void init(Context context, String extend) {
map = new LinkedHashMap<>(); map = new LinkedHashMap<>();
@ -78,7 +66,7 @@ public class Star extends Spider {
LinkedHashMap<String, List<Filter>> filters = new LinkedHashMap<>(); LinkedHashMap<String, List<Filter>> filters = new LinkedHashMap<>();
for (Map.Entry<String, String> entry : map.entrySet()) classes.add(new Class(entry.getKey(), entry.getValue())); for (Map.Entry<String, String> entry : map.entrySet()) classes.add(new Class(entry.getKey(), entry.getValue()));
for (Class type : classes) { for (Class type : classes) {
Element script = Jsoup.parse(OkHttp.string(client(), siteUrl + type.getTypeId() + "/all/all/all", getHeader())).select("#__NEXT_DATA__").get(0); Element script = Jsoup.parse(OkHttp.string(siteUrl + type.getTypeId() + "/all/all/all", getHeader())).select("#__NEXT_DATA__").get(0);
JSONObject obj = new JSONObject(script.data()).getJSONObject("props").getJSONObject("pageProps").getJSONObject("filterCondition"); JSONObject obj = new JSONObject(script.data()).getJSONObject("props").getJSONObject("pageProps").getJSONObject("filterCondition");
Condition item = Condition.objectFrom(obj.toString()); Condition item = Condition.objectFrom(obj.toString());
filters.put(type.getTypeId(), item.getFilter()); filters.put(type.getTypeId(), item.getFilter());
@ -89,7 +77,7 @@ public class Star extends Spider {
@Override @Override
public String homeVideoContent() throws Exception { public String homeVideoContent() throws Exception {
List<Vod> list = new ArrayList<>(); List<Vod> list = new ArrayList<>();
Element script = Jsoup.parse(OkHttp.string(client(), siteUrl, getHeader())).select("#__NEXT_DATA__").get(0); Element script = Jsoup.parse(OkHttp.string(siteUrl, getHeader())).select("#__NEXT_DATA__").get(0);
List<Card> cards = Card.arrayFrom(new JSONObject(script.data()).getJSONObject("props").getJSONObject("pageProps").getJSONArray("cards").toString()); List<Card> cards = Card.arrayFrom(new JSONObject(script.data()).getJSONObject("props").getJSONObject("pageProps").getJSONArray("cards").toString());
for (Card card : cards) if (!card.getName().equals("电视直播")) for (Card item : card.getCards()) list.add(item.vod()); for (Card card : cards) if (!card.getName().equals("电视直播")) for (Card item : card.getCards()) list.add(item.vod());
return Result.string(list); return Result.string(list);
@ -117,7 +105,7 @@ public class Star extends Spider {
@Override @Override
public String detailContent(List<String> ids) throws Exception { public String detailContent(List<String> ids) throws Exception {
Element script = Jsoup.parse(OkHttp.string(client(), detail.concat(ids.get(0)), getHeader())).select("#__NEXT_DATA__").get(0); Element script = Jsoup.parse(OkHttp.string(detail.concat(ids.get(0)), getHeader())).select("#__NEXT_DATA__").get(0);
Info detail = Info.objectFrom(new JSONObject(script.data()).getJSONObject("props").getJSONObject("pageProps").getJSONObject("collectionInfo").toString()); Info detail = Info.objectFrom(new JSONObject(script.data()).getJSONObject("props").getJSONObject("pageProps").getJSONObject("collectionInfo").toString());
Vod vod = new Vod(); Vod vod = new Vod();
vod.setVodId(ids.get(0)); vod.setVodId(ids.get(0));
@ -145,7 +133,7 @@ public class Star extends Spider {
@Override @Override
public String searchContent(String key, boolean quick) throws Exception { public String searchContent(String key, boolean quick) throws Exception {
List<Vod> list = new ArrayList<>(); List<Vod> list = new ArrayList<>();
String json = OkHttp.string(client(), siteUrl + data + ver + "/search.json?word=" + URLEncoder.encode(key), getHeader()); String json = OkHttp.string(siteUrl + data + ver + "/search.json?word=" + URLEncoder.encode(key), getHeader());
List<Card> items = Card.arrayFrom(new JSONObject(json).getJSONObject("pageProps").getJSONArray("initList").toString()); List<Card> items = Card.arrayFrom(new JSONObject(json).getJSONObject("pageProps").getJSONArray("initList").toString());
for (Card item : items) list.add(item.vod()); for (Card item : items) list.add(item.vod());
return Result.get().vod(list).page().string(); return Result.get().vod(list).page().string();

View File

@ -28,12 +28,10 @@ import java.util.regex.Pattern;
*/ */
public class Wogg extends Ali { public class Wogg extends Ali {
private final String siteUrl = "http://tvfan.xxooo.cf"; private final String siteUrl = "https://tvfan.xxooo.cf";
private final Pattern regexCategory = Pattern.compile("/vodtype/(\\w+).html"); private final Pattern regexCategory = Pattern.compile("/vodtype/(\\w+).html");
private final Pattern regexPageTotal = Pattern.compile("\\$\\(\"\\.mac_total\"\\)\\.text\\('(\\d+)'\\);"); private final Pattern regexPageTotal = Pattern.compile("\\$\\(\"\\.mac_total\"\\)\\.text\\('(\\d+)'\\);");
private JsonObject ext;
private Map<String, String> getHeader() { private Map<String, String> getHeader() {
Map<String, String> header = new HashMap<>(); Map<String, String> header = new HashMap<>();
header.put("User-Agent", Util.CHROME); header.put("User-Agent", Util.CHROME);
@ -42,15 +40,14 @@ public class Wogg extends Ali {
@Override @Override
public void init(Context context, String extend) { public void init(Context context, String extend) {
ext = Json.safeObject(extend); JsonObject ext = Json.safeObject(extend);
super.init(context, ext.has("token") ? ext.get("token").getAsString() : ""); super.init(context, ext.has("token") ? ext.get("token").getAsString() : "");
} }
@Override @Override
public String homeContent(boolean filter) { public String homeContent(boolean filter) {
List<Class> classes = new ArrayList<>(); List<Class> classes = new ArrayList<>();
String url = ext.has("filter") ? ext.get("filter").getAsString() : ""; Document doc = Jsoup.parse(OkHttp.string(siteUrl, getHeader()));
Document doc = Jsoup.parse(OkHttp.string(client(), siteUrl, getHeader()));
Elements elements = doc.select(".nav-link"); Elements elements = doc.select(".nav-link");
for (Element e : elements) { for (Element e : elements) {
Matcher mather = regexCategory.matcher(e.attr("href")); Matcher mather = regexCategory.matcher(e.attr("href"));
@ -58,7 +55,7 @@ public class Wogg extends Ali {
classes.add(new Class(mather.group(1), e.text().trim())); classes.add(new Class(mather.group(1), e.text().trim()));
} }
} }
return Result.string(classes, parseVodListFromDoc(doc), url.isEmpty() ? null : Json.parse(OkHttp.string(url))); return Result.string(classes, parseVodListFromDoc(doc));
} }
@Override @Override
@ -69,7 +66,7 @@ public class Wogg extends Ali {
urlParams[Integer.parseInt(key)] = extend.get(key); urlParams[Integer.parseInt(key)] = extend.get(key);
} }
} }
Document doc = Jsoup.parse(OkHttp.string(client(), String.format("%s/index.php/vodshow/%s.html", siteUrl, String.join("-", urlParams)), getHeader())); Document doc = Jsoup.parse(OkHttp.string(String.format("%s/index.php/vodshow/%s.html", siteUrl, String.join("-", urlParams)), getHeader()));
int page = Integer.parseInt(pg), limit = 72, total = 0; int page = Integer.parseInt(pg), limit = 72, total = 0;
Matcher matcher = regexPageTotal.matcher(doc.html()); Matcher matcher = regexPageTotal.matcher(doc.html());
if (matcher.find()) total = Integer.parseInt(matcher.group(1)); if (matcher.find()) total = Integer.parseInt(matcher.group(1));
@ -93,7 +90,7 @@ public class Wogg extends Ali {
@Override @Override
public String detailContent(List<String> ids) throws Exception { public String detailContent(List<String> ids) throws Exception {
String vodId = ids.get(0); String vodId = ids.get(0);
Document doc = Jsoup.parse(OkHttp.string(client(), siteUrl + vodId, getHeader())); Document doc = Jsoup.parse(OkHttp.string(siteUrl + vodId, getHeader()));
Vod item = new Vod(); Vod item = new Vod();
item.setVodId(vodId); item.setVodId(vodId);
@ -139,7 +136,7 @@ public class Wogg extends Ali {
private String searchContent(String key, String pg) { private String searchContent(String key, String pg) {
String searchURL = siteUrl + String.format("/index.php/vodsearch/%s----------%s---.html", URLEncoder.encode(key), pg); String searchURL = siteUrl + String.format("/index.php/vodsearch/%s----------%s---.html", URLEncoder.encode(key), pg);
String html = OkHttp.string(client(), searchURL, getHeader()); String html = OkHttp.string(searchURL, getHeader());
Elements items = Jsoup.parse(html).select(".module-search-item"); Elements items = Jsoup.parse(html).select(".module-search-item");
List<Vod> list = new ArrayList<>(); List<Vod> list = new ArrayList<>();
for (Element item : items) { for (Element item : items) {

View File

@ -324,7 +324,7 @@ public class XPath extends Spider {
if (rule == null) { if (rule == null) {
if (ext != null) { if (ext != null) {
if (ext.startsWith("http")) { if (ext.startsWith("http")) {
String json = OkHttp.string(client(), ext, null); String json = OkHttp.string(ext, null);
rule = Rule.fromJson(json); rule = Rule.fromJson(json);
loadRuleExt(json); loadRuleExt(json);
} else { } else {
@ -340,6 +340,6 @@ public class XPath extends Spider {
protected String fetch(String webUrl) { protected String fetch(String webUrl) {
SpiderDebug.log(webUrl); SpiderDebug.log(webUrl);
return OkHttp.string(client(), webUrl, getHeaders()); return OkHttp.string(webUrl, getHeaders());
} }
} }

View File

@ -225,7 +225,7 @@ public class Xb6v extends Spider {
.addHeader("Referer", siteUrl + "/") .addHeader("Referer", siteUrl + "/")
.post(formBody) .post(formBody)
.build(); .build();
Response response = OkHttp.client().newCall(request).execute(); Response response = OkHttp.newCall(request);
String[] split = String.valueOf(response.request().url()).split("\\?searchid="); String[] split = String.valueOf(response.request().url()).split("\\?searchid=");
nextSearchUrlPrefix = split[0] + "index.php?page="; nextSearchUrlPrefix = split[0] + "index.php?page=";
nextSearchUrlSuffix = "&searchid=" + split[1]; nextSearchUrlSuffix = "&searchid=" + split[1];

View File

@ -32,11 +32,10 @@ public class Zhaozy extends Ali {
Map<String, String> headers = new HashMap<>(); Map<String, String> headers = new HashMap<>();
headers.put("User-Agent", Util.CHROME); headers.put("User-Agent", Util.CHROME);
headers.put("Referer", siteUrl); headers.put("Referer", siteUrl);
headers.put("Cookie", getCookie());
return headers; return headers;
} }
private String getCookie() { private void getCookie() {
Map<String, String> params = new HashMap<>(); Map<String, String> params = new HashMap<>();
params.put("username", username); params.put("username", username);
params.put("password", password); params.put("password", password);
@ -44,10 +43,7 @@ public class Zhaozy extends Ali {
headers.put("User-Agent", Util.CHROME); headers.put("User-Agent", Util.CHROME);
headers.put("Referer", siteUrl + "stop.html"); headers.put("Referer", siteUrl + "stop.html");
headers.put("Origin", siteUrl); headers.put("Origin", siteUrl);
StringBuilder sb = new StringBuilder(); OkHttp.post(siteUrl + "logiu.html", params, headers);
Map<String, List<String>> resp = OkHttp.post(siteUrl + "logiu.html", params, headers).getResp();
for (String item : resp.get("set-cookie")) sb.append(item.split(";")[0]).append(";");
return sb.toString();
} }
@Override @Override
@ -56,6 +52,7 @@ public class Zhaozy extends Ali {
super.init(context, split[0]); super.init(context, split[0]);
username = split[1]; username = split[1];
password = split[2]; password = split[2];
getCookie();
} }
@Override @Override

View File

@ -27,7 +27,7 @@ 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 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 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/117.0.0.0 Safari/537.36"; public static final String CHROME = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.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 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<String> MEDIA = Arrays.asList("mp4", "mkv", "wmv", "flv", "avi", "iso", "mpg", "ts", "mp3", "aac", "flac", "m4a", "ape", "ogg"); public static final List<String> MEDIA = Arrays.asList("mp4", "mkv", "wmv", "flv", "avi", "iso", "mpg", "ts", "mp3", "aac", "flac", "m4a", "ape", "ogg");
public static final List<String> SUB = Arrays.asList("srt", "ass", "ssa", "vtt"); public static final List<String> SUB = Arrays.asList("srt", "ass", "ssa", "vtt");

Binary file not shown.

View File

@ -1 +1 @@
034284ac61c7bc4f5e9acf7937889bb3 1c0a77c56998f8ac7484678ddb6e91d2