diff --git a/app/src/main/java/com/github/catvod/ali/API.java b/app/src/main/java/com/github/catvod/ali/API.java index 83e16897..ce445b65 100644 --- a/app/src/main/java/com/github/catvod/ali/API.java +++ b/app/src/main/java/com/github/catvod/ali/API.java @@ -168,7 +168,7 @@ public class API { private boolean isManyRequest(String result) { if (!result.contains("Too Many Requests")) return false; - Init.show("洗洗睡吧,Too Many Requests。"); + Utils.notify("洗洗睡吧,Too Many Requests。"); oauth.clean().save(); return true; } @@ -188,7 +188,7 @@ public class API { shareToken = new JSONObject(result).getString("share_token"); } catch (Exception e) { e.printStackTrace(); - Init.show("來晚啦,該分享已失效。"); + Utils.notify("來晚啦,該分享已失效。"); } } @@ -537,7 +537,7 @@ public class API { frame.addView(image, params); dialog = new AlertDialog.Builder(Init.getActivity()).setView(frame).setOnCancelListener(this::dismiss).setOnDismissListener(this::dismiss).show(); dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); - Init.show("請使用阿里雲盤 App 掃描二維碼"); + Utils.notify("請使用阿里雲盤 App 掃描二維碼"); } catch (Exception ignored) { } } @@ -553,7 +553,7 @@ public class API { private void setToken(String value) { SpiderDebug.log("Token:" + value); - Init.show("Token:" + value); + Utils.notify("Token:" + value); user.setRefreshToken(value); refreshAccessToken(); stopService(); diff --git a/app/src/main/java/com/github/catvod/spider/Bili.java b/app/src/main/java/com/github/catvod/spider/Bili.java index e9e8e043..a7ab9d07 100644 --- a/app/src/main/java/com/github/catvod/spider/Bili.java +++ b/app/src/main/java/com/github/catvod/spider/Bili.java @@ -3,6 +3,7 @@ package com.github.catvod.spider; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; +import android.content.Intent; import android.graphics.Color; import android.graphics.drawable.ColorDrawable; import android.net.Uri; @@ -54,7 +55,7 @@ public class Bili extends Spider { private boolean login; private boolean vip; - private Map getHeader() { + private Map getHeader(String cookie) { Map headers = new HashMap<>(); headers.put("cookie", cookie); headers.put("User-Agent", Utils.CHROME); @@ -62,6 +63,14 @@ public class Bili extends Spider { return headers; } + private Map getGuest() { + return getHeader(COOKIE); + } + + private Map getMember() { + return getHeader(cookie); + } + private void setAudio() { audios = new HashMap<>(); audios.put("30280", "192000"); @@ -110,7 +119,7 @@ public class Bili extends Spider { String order = extend.containsKey("order") ? extend.get("order") : "totalrank"; String duration = extend.containsKey("duration") ? extend.get("duration") : "0"; String api = "https://api.bilibili.com/x/web-interface/search/type?search_type=video&keyword=" + URLEncoder.encode(tid) + "&order=" + order + "&duration=" + duration + "&page=" + pg; - String json = OkHttp.string(api, getHeader()); + String json = OkHttp.string(api, getGuest()); Resp resp = Resp.objectFrom(json); List list = new ArrayList<>(); for (Resp.Result item : Resp.Result.arrayFrom(resp.getData().getResult())) list.add(item.getVod()); @@ -123,12 +132,12 @@ public class Bili extends Spider { String id = ids.get(0); String api = "https://api.bilibili.com/x/web-interface/archive/stat?bvid=" + id; - String json = OkHttp.string(api, getHeader()); + String json = OkHttp.string(api, getMember()); Resp resp = Resp.objectFrom(json); String aid = resp.getData().getAid(); api = "https://api.bilibili.com/x/web-interface/view?aid=" + aid; - json = OkHttp.string(api, getHeader()); + json = OkHttp.string(api, getMember()); Data detail = Resp.objectFrom(json).getData(); Vod vod = new Vod(); vod.setVodId(id); @@ -139,7 +148,7 @@ public class Bili extends Spider { vod.setVodRemarks(detail.getDuration() / 60 + "分鐘"); api = "https://api.bilibili.com/x/player/playurl?avid=" + aid + "&cid=" + detail.getCid() + "&qn=127&fnval=4048&fourk=1"; - json = OkHttp.string(api, getHeader()); + json = OkHttp.string(api, getMember()); Data play = Resp.objectFrom(json).getData(); List playList = new ArrayList<>(); List playFrom = new ArrayList<>(); @@ -171,7 +180,7 @@ public class Bili extends Spider { String qn = ids[2]; String api = "https://api.bilibili.com/x/player/playurl?avid=" + aid + "&cid=" + cid + "&qn=" + qn + "&fnval=4048&fourk=1"; - String json = OkHttp.string(api, getHeader()); + String json = OkHttp.string(api, getMember()); Resp resp = Resp.objectFrom(json); Dash dash = resp.getData().getDash(); @@ -192,7 +201,7 @@ public class Bili extends Spider { String mpd = getMpd(dash, videoList.toString(), audioList.toString()); String url = "data:application/dash+xml;base64," + Base64.encodeToString(mpd.getBytes(), 0); - return Result.get().url(url).header(getHeader()).string(); + return Result.get().url(url).header(getMember()).string(); } private String getMedia(Media media) { @@ -241,17 +250,43 @@ public class Bili extends Spider { } private void checkLogin() { - String json = OkHttp.string("https://api.bilibili.com/x/web-interface/nav", getHeader()); + String json = OkHttp.string("https://api.bilibili.com/x/web-interface/nav", getMember()); Data data = Resp.objectFrom(json).getData(); - login = data.isLogin(); vip = data.getVipType() > 0; - if (!login && !getUserCache().exists()) getQRCode(); + login = data.isLogin(); + getQRCode(); } private void getQRCode() { + if (login || getUserCache().exists() && COOKIE.equals(cookie)) 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(() -> showQRCode(data)); + Init.run(() -> openApp1(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 openApp1(Data data) { + try { + Init.getActivity().startActivity(getIntent("tv.danmaku.bili", data)); + } catch (Exception e) { + openApp2(data); + } + } + + private void openApp2(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) { @@ -265,8 +300,7 @@ public class Bili extends Spider { 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)); - Init.show("請使用 BiliBili App 掃描二維碼"); - Init.execute(() -> startService(data)); + Utils.notify("請使用 BiliBili App 掃描二維碼"); } catch (Exception ignored) { } } @@ -275,7 +309,7 @@ public class Bili extends Spider { 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()); + String json = OkHttp.string(url, getGuest()); url = Resp.objectFrom(json).getData().getUrl(); if (url.length() > 0) setCookie(url); }, 1, 1, TimeUnit.SECONDS); @@ -291,7 +325,7 @@ public class Bili extends Spider { String[] splits = Uri.parse(url).getQuery().split("&"); for (String split : splits) cookie.append(split).append(";"); FileUtil.write(getUserCache(), this.cookie = cookie.toString()); - Init.show("請重新進入播放頁"); + Utils.notify("請重新進入播放頁"); stopService(); } diff --git a/app/src/main/java/com/github/catvod/spider/Init.java b/app/src/main/java/com/github/catvod/spider/Init.java index d717dcdf..2b4f357e 100644 --- a/app/src/main/java/com/github/catvod/spider/Init.java +++ b/app/src/main/java/com/github/catvod/spider/Init.java @@ -5,7 +5,6 @@ import android.app.Application; import android.content.Context; import android.os.Handler; import android.os.Looper; -import android.widget.Toast; import com.github.catvod.crawler.SpiderDebug; @@ -54,10 +53,6 @@ public class Init { get().handler.postDelayed(runnable, delay); } - public static void show(String msg) { - get().handler.post(() -> Toast.makeText(context(), msg, Toast.LENGTH_LONG).show()); - } - public static Activity getActivity() throws Exception { Class activityThreadClass = Class.forName("android.app.ActivityThread"); Object activityThread = activityThreadClass.getMethod("currentActivityThread").invoke(null); diff --git a/app/src/main/java/com/github/catvod/utils/Utils.java b/app/src/main/java/com/github/catvod/utils/Utils.java index ebfdb9ee..b29737bd 100644 --- a/app/src/main/java/com/github/catvod/utils/Utils.java +++ b/app/src/main/java/com/github/catvod/utils/Utils.java @@ -10,6 +10,7 @@ import android.view.ViewGroup; import android.webkit.ValueCallback; import android.webkit.WebView; import android.webkit.WebViewClient; +import android.widget.Toast; import com.github.catvod.spider.Init; @@ -155,6 +156,10 @@ public class Utils { else webView.loadUrl(script); } + public static void notify(String msg) { + Init.run(() -> Toast.makeText(Init.context(), msg, Toast.LENGTH_LONG).show()); + } + public static void addView(View view, ViewGroup.LayoutParams params) { try { ViewGroup group = Init.getActivity().getWindow().getDecorView().findViewById(android.R.id.content); diff --git a/jar/custom_spider.jar b/jar/custom_spider.jar index 495eddb0..1e03d063 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 97e4eed7..7f3d0a8e 100644 --- a/jar/custom_spider.jar.md5 +++ b/jar/custom_spider.jar.md5 @@ -1 +1 @@ -bc8e0032bdb7abaadf265056bc6800ed +7b867141be64b2346f595bc76cce671b diff --git a/json/adult.json b/json/adult.json index 51d1a88c..7e052dfc 100644 --- a/json/adult.json +++ b/json/adult.json @@ -1,5 +1,5 @@ { - "spider": "https://raw.githubusercontent.com/FongMi/CatVodSpider/main/jar/custom_spider.jar;md5;bc8e0032bdb7abaadf265056bc6800ed", + "spider": "https://raw.githubusercontent.com/FongMi/CatVodSpider/main/jar/custom_spider.jar;md5;7b867141be64b2346f595bc76cce671b", "wallpaper": "https://gao.chuqiuyu.tk", "sites": [ { diff --git a/json/config.json b/json/config.json index 250fe704..41045cca 100644 --- a/json/config.json +++ b/json/config.json @@ -1,5 +1,5 @@ { - "spider": "https://raw.githubusercontent.com/FongMi/CatVodSpider/main/jar/custom_spider.jar;md5;bc8e0032bdb7abaadf265056bc6800ed", + "spider": "https://raw.githubusercontent.com/FongMi/CatVodSpider/main/jar/custom_spider.jar;md5;7b867141be64b2346f595bc76cce671b", "wallpaper": "http://饭太硬.top/深色壁纸/api.php", "sites": [ {