From ecb3f89896d15abcd41546b44681df33f9d5a16d Mon Sep 17 00:00:00 2001 From: lushunming <1357197829@qq.com> Date: Wed, 6 Nov 2024 11:11:25 +0800 Subject: [PATCH 1/9] =?UTF-8?q?uc=20and=20=E6=9C=A8=E5=81=B6=E5=93=A5?= =?UTF-8?q?=E5=93=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jar/spider.jar | Bin 484753 -> 513241 bytes json/config.json | 14 +- json/configAll.json | 11 +- .../java/com/github/catvod/api/UCApi.java | 717 ++++++++++++++++++ .../java/com/github/catvod/bean/uc/Cache.java | 38 + .../java/com/github/catvod/bean/uc/Item.java | 112 +++ .../com/github/catvod/bean/uc/ShareData.java | 36 + .../java/com/github/catvod/bean/uc/User.java | 30 + .../java/com/github/catvod/spider/Cloud.java | 24 +- .../java/com/github/catvod/spider/Mogg.java | 152 ++++ .../java/com/github/catvod/spider/UC.java | 90 +++ 11 files changed, 1219 insertions(+), 5 deletions(-) create mode 100644 src/main/java/com/github/catvod/api/UCApi.java create mode 100644 src/main/java/com/github/catvod/bean/uc/Cache.java create mode 100644 src/main/java/com/github/catvod/bean/uc/Item.java create mode 100644 src/main/java/com/github/catvod/bean/uc/ShareData.java create mode 100644 src/main/java/com/github/catvod/bean/uc/User.java create mode 100644 src/main/java/com/github/catvod/spider/Mogg.java create mode 100644 src/main/java/com/github/catvod/spider/UC.java diff --git a/jar/spider.jar b/jar/spider.jar index 0f595cc6b86ef01856b6a6a1b265c547247f783a..b805e5827bedca471860124de35c8dd287ef17a9 100644 GIT binary patch delta 34139 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 Gf%`uaY|+dB delta 6113 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 shareTokenCache = new HashMap<>(); + private String pr = "pr=UCBrowser&fr=pc"; + private List subtitleExts = Arrays.asList(".srt", ".ass", ".scc", ".stl", ".ttml"); + private Map saveFileIdCaches = new HashMap<>(); + private String saveDirId = null; + private final String saveDirName = "TV"; + private boolean isVip = false; + private final Cache cache; + private ScheduledExecutorService service; + private JDialog dialog; + + + private String serviceTicket; + + public Object[] proxyVideo(Map params) throws Exception { + String url = Utils.base64Decode(params.get("url")); + SpiderDebug.log("proxy url :" + url); + SpiderDebug.log("proxy header :" + Utils.base64Decode(params.get("header"))); + Map header = new Gson().fromJson(Utils.base64Decode(params.get("header")), Map.class); + if (header == null) header = new HashMap<>(); + List arr = ImmutableList.of("Range", "Accept", "Accept-Encoding", "Accept-Language", "Cookie", "Origin", "Referer", "Sec-Ch-Ua", "Sec-Ch-Ua-Mobile", "Sec-Ch-Ua-Platform", "Sec-Fetch-Dest", "Sec-Fetch-Mode", "Sec-Fetch-Site", "User-Agent"); + for (String key : params.keySet()) { + for (String s : arr) { + if (s.toLowerCase().equals(key.toLowerCase())) { + header.put(key, params.get(key)); + } + } + + } + if (Utils.getExt(url).contains("m3u8")) { + return getM3u8(url, header); + } + return new Object[]{ProxyVideo.proxy(url, header)}; + } + + /** + * 代理m3u8 + * + * @param url + * @param header + * @return + */ + private Object[] getM3u8(String url, Map header) { + SpiderDebug.log("m3u8 url :" + url); + OkResult result = OkHttp.get(url, new HashMap<>(), header); + String[] m3u8Arr = result.getBody().split("\n"); + List listM3u8 = new ArrayList<>(); + + String site = url.substring(0, url.lastIndexOf("/")) + "/"; + int mediaId = 0; + for (String oneLine : m3u8Arr) { + String thisOne = oneLine; + + if (oneLine.contains(".ts")) { + mediaId++; + thisOne = proxyVideoUrl(site + thisOne, header); + SpiderDebug.log("m3u8 line " + mediaId + ":" + oneLine); + SpiderDebug.log("m3u8 proxyed line " + mediaId + " :" + thisOne); + + } + listM3u8.add(thisOne); + } + String m3u8Str = StringUtils.join(listM3u8, "\n"); + String contentType = result.getResp().get("Content-Type").get(0); + + Map respHeaders = new HashMap<>(); + // respHeaders.put("Access-Control-Allow-Origin","*"); + // respHeaders.put("Access-Control-Allow-Credentials","true"); + for (String key : result.getResp().keySet()) { + respHeaders.put(key, result.getResp().get(key).get(0)); + } + return new Object[]{result.getCode(), contentType, new ByteArrayInputStream(m3u8Str.getBytes(Charset.defaultCharset())), respHeaders}; + } + + private static class Loader { + static volatile UCApi INSTANCE = new UCApi(); + } + + public static UCApi get() { + return Loader.INSTANCE; + } + + public void setCookie(String token) throws Exception { + if (StringUtils.isNoneBlank(token)) { + this.cookie = token; + initUserInfo(); + } + } + + private Map getHeaders() { + Map headers = new HashMap<>(); + headers.put("User-Agent", "Mozilla/5.0 (Linux; Android 8.0.0; SM-G955U Build/R16NW) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Mobile Safari/537.36"); + headers.put("Referer", "https://drive.uc.cn"); + headers.put("Content-Type", "application/json"); + headers.put("Cookie", cookie); + //headers.put("Host", "drive-pc.quark.cn"); + return headers; + } + + private Map getWebHeaders() { + Map headers = new HashMap<>(); + headers.put("User-Agent", "Mozilla/5.0 (Linux; Android 8.0.0; SM-G955U Build/R16NW) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Mobile Safari/537.36"); + headers.put("Referer", "https://drive.uc.cn"); + headers.put("Cookie", cookie); + return headers; + } + + public void initUc(String cookie) throws Exception { + this.ckey = Utils.MD5(cookie); + this.cookie = cookie; + this.isVip = getVip(); + } + + private UCApi() { + + + cache = Cache.objectFrom(Path.read(getCache())); + } + + public File getCache() { + return Path.tv("uc"); + } + + public Vod getVod(ShareData shareData) throws Exception { + getShareToken(shareData); + List files = new ArrayList<>(); + List subs = new ArrayList<>(); + List> listData = listFile(1, shareData, files, subs, shareData.getShareId(), shareData.getFolderId(), 1); + + List playFrom = UCApi.get().getPlayFormatList(); + playFrom = new ArrayList<>(playFrom); + playFrom.add("原画"); + + List playUrl = new ArrayList<>(); + + if (files.isEmpty()) { + return null; + } + for (int i = 0; i < files.get(files.size() - 1).getShareIndex(); i++) { + for (int index = 0; index < playFrom.size(); index++) { + List vodItems = new ArrayList<>(); + for (Item video_item : files) { + if (video_item.getShareIndex() == i + 1) { + vodItems.add(video_item.getEpisodeUrl("电影"));// + findSubs(video_item.getName(), subs)); + } + } + playUrl.add(StringUtils.join(vodItems, "#")); + } + } + + + Vod vod = new Vod(); + vod.setVodId(""); + vod.setVodContent(""); + vod.setVodPic(""); + vod.setVodName(""); + vod.setVodPlayUrl(StringUtils.join(playUrl, "$$$")); + vod.setVodPlayFrom(StringUtils.join(playFrom, "$$$")); + vod.setTypeName("uc云盘"); + return vod; + } + + public String playerContent(String[] split, String flag) throws Exception { + SpiderDebug.log("flag:" + flag); + String fileId = split[0], fileToken = split[1], shareId = split[2], stoken = split[3]; + String playUrl = ""; + if (flag.contains("uc原画")) { + playUrl = this.getDownload(shareId, stoken, fileId, fileToken, true); + } else { + playUrl = this.getLiveTranscoding(shareId, stoken, fileId, fileToken, flag); + } + SpiderDebug.log("origin playUrl:" + playUrl); + Map header = getHeaders(); + header.remove("Host"); + header.remove("Content-Type"); + return Result.get().url(proxyVideoUrl(playUrl, header)).octet().header(header).string(); + } + + private String proxyVideoUrl(String url, Map header) { + return String.format(Proxy.getProxyUrl() + "?do=uc&type=video&url=%s&header=%s", Utils.base64Encode(url), Utils.base64Encode(Json.toJson(header))); + } + + /** + * @param url + * @param params get 参数 + * @param data post json + * @param retry + * @param method + * @return + * @throws Exception + */ + private String api(String url, Map params, Map data, Integer retry, String method) throws Exception { + + + int leftRetry = retry != null ? retry : 3; + if (StringUtils.isAllBlank(cookie)) { + this.initUserInfo(); + return api(url, params, data, leftRetry - 1, method); + } + OkResult okResult; + if ("GET".equals(method)) { + okResult = OkHttp.get(this.apiUrl + url, params, getHeaders()); + } else { + okResult = OkHttp.post(this.apiUrl + url, Json.toJson(data), getHeaders()); + } + if (okResult.getResp().get("Set-Cookie") != null) { + Matcher matcher = Pattern.compile("__puus=([^;]+)").matcher(StringUtils.join(okResult.getResp().get("Set-Cookie"), ";;;")); + if (matcher.find()) { + Matcher cookieMatcher = Pattern.compile("__puus=([^;]+)").matcher(this.cookie); + if (cookieMatcher.find() && !cookieMatcher.group(1).equals(matcher.group(1))) { + this.cookie = this.cookie.replaceAll("__puus=[^;]+", "__puus=" + matcher.group(1)); + } else { + this.cookie = this.cookie + ";__puus=" + matcher.group(1); + } + } + } + + if (okResult.getCode() != 200 && leftRetry > 0) { + SpiderDebug.log("api error code:" + okResult.getCode()); + Thread.sleep(1000); + return api(url, params, data, leftRetry - 1, method); + } + return okResult.getBody(); + } + + private void initUserInfo() { + try { + SpiderDebug.log("uc initUserInfo..."); + + //extend没有cookie,从缓存中获取 + if (StringUtils.isAllBlank(cookie)) { + SpiderDebug.log("uc cookie from ext is empty..."); + cookie = cache.getUser().getCookie(); + } + //获取到cookie,初始化uc,并且把cookie缓存一次 + if (StringUtils.isNoneBlank(cookie) && cookie.contains("__pus")) { + SpiderDebug.log(" initUc ..."); + initUc(this.cookie); + cache.setUser(User.objectFrom(this.cookie)); + return; + } + + //没有cookie,也没有serviceTicket,抛出异常,提示用户重新登录 + if (StringUtils.isAllBlank(cookie) && StringUtils.isAllBlank(serviceTicket)) { + SpiderDebug.log("uccookie为空"); + throw new RuntimeException("uccookie为空"); + } + + String token = serviceTicket; + OkResult result = OkHttp.get("https://drive.uc.cn/account/info?st=" + token + "", new HashMap<>(), getWebHeaders()); + Map json = Json.parseSafe(result.getBody(), Map.class); + if (json.get("success").equals(Boolean.TRUE)) { + List cookies = result.getResp().get("set-Cookie"); + List cookieList = new ArrayList<>(); + for (String cookie : cookies) { + cookieList.add(cookie.split(";")[0]); + } + this.cookie += StringUtils.join(cookieList, ";"); + + cache.setUser(User.objectFrom(this.cookie)); + if (cache.getUser().getCookie().isEmpty()) throw new Exception(this.cookie); + initUc(this.cookie); + } + + } catch (Exception e) { + cache.getUser().clean(); + e.printStackTrace(); + stopService(); + startFlow(); + } finally { + try { + while (cache.getUser().getCookie().isEmpty()) Thread.sleep(250); + } catch (InterruptedException e) { +// throw new RuntimeException(e); + } + } + } + + /** + * 获取二维码登录的令牌 + * + * @return 返回包含二维码登录令牌的字符串 + */ + private String getTokenForQrcodeLogin() { + Map params = new HashMap<>(); + params.put("client_id", "381"); + params.put("v", "1.2"); + params.put("request_id", UUID.randomUUID().toString()); + OkResult res = OkHttp.post("https://api.open.uc.cn/cas/ajax/getTokenForQrcodeLogin?__dt=" + RandomUtils.nextInt(1000, 100000) + "&__t=" + new Date().getTime(), params, new HashMap<>()); + if (this.cookie.isEmpty()) { + List cookies = res.getResp().get("set-Cookie"); + List cookieList = new ArrayList<>(); + for (String cookie : cookies) { + cookieList.add(cookie.split(";")[0]); + } + this.cookie = StringUtils.join(cookieList, ";"); + } + Map json = Json.parseSafe(res.getBody(), Map.class); + if (Objects.equals(json.get("message"), "ok")) { + return (String) ((Map) ((Map) json.get("data")).get("members")).get("token"); + } + return ""; + } + + + /** + * 获取二维码内容 + *

+ * 此方法用于生成二维码的URL内容该URL用于二维码登录,包含了登录所需的token和客户端信息 + * + * @return 返回包含token的二维码URL字符串 + */ + private String getQrCodeToken() { + // 获取用于二维码登录的token + String token = getTokenForQrcodeLogin(); + // 组装二维码URL,包含token和客户端标识 + return token; + } + + private void startFlow() { + this.showInput(); + } + + private void showInput() { + + try { + JPanel jPanel = new JPanel(); + jPanel.setSize(Swings.dp2px(200), Swings.dp2px(80)); + + JTextField textField = new JTextField(); + textField.setName("UC cookie"); + textField.setColumns(Swings.dp2px(38)); + JButton button = new JButton("Ok"); + jPanel.add(textField); + jPanel.add(button); + + JButton qrButton = new JButton("QRCode"); + jPanel.add(qrButton); + JDialog jDialog = Utils.showDialog(jPanel, "请输入UC cookie"); + button.addActionListener((event) -> { + onPositive(textField.getText()); + jDialog.dispose(); + }); + qrButton.addActionListener((event) -> { + SwingUtilities.invokeLater(this::getQRCode); + jDialog.dispose(); + }); + } catch (Exception ignored) { + } + } + + + private void onNeutral() { + dismiss(); + Init.execute(this::getQRCode); + } + + private void onPositive(String text) { + dismiss(); + Init.execute(() -> { + if (text.startsWith("http")) setToken(OkHttp.string(text)); + else setToken(text); + }); + } + + private void getQRCode() { + String token = getQrCodeToken(); + + openApp(token); + } + + private void openApp(String token) { + try { + showQRCode("https://su.uc.cn/1_n0ZCv?uc_param_str=dsdnfrpfbivesscpgimibtbmnijblauputogpintnwktprchmt&token=" + token + "&client_id=381&uc_biz_str=S%3Acustom%7CC%3Atitlebar_fix"); + } catch (Exception e) { + + } finally { + Map map = new HashMap<>(); + map.put("token", token); + Init.execute(() -> startService(map)); + } + } + + private void showQRCode(String content) { + try { + final int size = 300; + SwingUtilities.invokeLater(() -> { + BufferedImage image = QRCode.getBitmap(content, size, 2); + JPanel jPanel = new JPanel(); + jPanel.setSize(Swings.dp2px(size), Swings.dp2px(size)); + jPanel.add(new JLabel(new ImageIcon(image))); + dialog = Utils.showDialog(jPanel, "请使用uc网盘App扫描二维码"); + }); + Utils.notify("请使用uc网盘App扫描二维码"); + } catch (Exception ignored) { + } + } + + private void startService(Map params) { + SpiderDebug.log("----startservice"); + params.put("client_id", "381"); + params.put("v", "1.2"); + params.put("request_id", UUID.randomUUID().toString()); + service = Executors.newScheduledThreadPool(1); + + service.scheduleWithFixedDelay(() -> { + SpiderDebug.log("----scheduleAtFixedRate" + new Date().toString()); + String result = OkHttp.string("https://api.open.uc.cn/cas/ajax/getServiceTicketByQrcodeToken?__dt=" + RandomUtils.nextInt(1000, 100000) + "&__t=" + new Date().getTime(), params, getWebHeaders()); + Map json = Json.parseSafe(result, Map.class); + if (json.get("status").equals(new Double(2000000))) { + setToken((String) ((Map) ((Map) json.get("data")).get("members")).get("service_ticket")); + + } + + }, 1, 3, TimeUnit.SECONDS); + } + + private void setToken(String value) { + this.serviceTicket = value; + SpiderDebug.log("ServiceTicket:" + value); + Utils.notify("ServiceTicket:" + value); + initUserInfo(); + stopService(); + } + + private void stopService() { + if (service != null) service.shutdownNow(); + + + this.dismiss(); + } + + + private void dismiss() { + try { + if (dialog != null) { + dialog.setVisible(false); + dialog.dispose(); + } + } catch (Exception ignored) { + } + } + + private boolean getVip() throws Exception { + Map listData = Json.parseSafe(api("member?pr=ucpro&fr=pc&uc_param_str=&fetch_subscribe=true&_ch=home&fetch_identity=true", null, null, 0, "GET"), Map.class); + return false;//((Map) listData.get("data")).get("member_type").contains("VIP"); + } + + public List getPlayFormatList() { + if (this.isVip) { + return Arrays.asList("4K", "超清", "高清", "普画"); + } else { + return Collections.singletonList("普画"); + } + } + + private List getPlayFormatUcList() { + if (this.isVip) { + return Arrays.asList("4k", "2k", "super", "high", "normal", "low"); + } else { + return Collections.singletonList("low"); + } + } + + public ShareData getShareData(String url) { + Pattern pattern = Pattern.compile("https://drive\\.uc\\.cn/s/([^?]+)"); + Matcher matcher = pattern.matcher(url); + if (matcher.find()) { + return new ShareData(matcher.group(1), "0"); + } + return null; + } + + + private void getShareToken(ShareData shareData) throws Exception { + if (!this.shareTokenCache.containsKey(shareData.getShareId())) { + this.shareTokenCache.remove(shareData.getShareId()); + Map shareToken = Json.parseSafe(api("share/sharepage/token?" + this.pr, Collections.emptyMap(), ImmutableMap.of("pwd_id", shareData.getShareId(), "passcode", shareData.getSharePwd() == null ? "" : shareData.getSharePwd()), 0, "POST"), Map.class); + if (shareToken.containsKey("data") && ((Map) shareToken.get("data")).containsKey("stoken")) { + this.shareTokenCache.put(shareData.getShareId(), (Map) shareToken.get("data")); + } + } + } + + private List> listFile(int shareIndex, ShareData shareData, List videos, List subtitles, String shareId, String folderId, Integer page) throws Exception { + int prePage = 200; + page = page != null ? page : 1; + + Map listData = Json.parseSafe(api("share/sharepage/detail?" + this.pr + "&pwd_id=" + shareId + "&stoken=" + encodeURIComponent((String) this.shareTokenCache.get(shareId).get("stoken")) + "&pdir_fid=" + folderId + "&force=0&_page=" + page + "&_size=" + prePage + "&_sort=file_type:asc,file_name:asc", Collections.emptyMap(), Collections.emptyMap(), 0, "GET"), Map.class); + if (listData.get("data") == null) return Collections.emptyList(); + List> items = (List>) ((Map) listData.get("data")).get("list"); + if (items == null) return Collections.emptyList(); + List> subDir = new ArrayList<>(); + for (Map item : items) { + if (Boolean.TRUE.equals(item.get("dir"))) { + subDir.add(item); + } else if (Boolean.TRUE.equals(item.get("file")) && "video".equals(item.get("obj_category"))) { + if ((Double) item.get("size") < 1024 * 1024 * 5) continue; + item.put("stoken", this.shareTokenCache.get(shareData.getShareId()).get("stoken")); + videos.add(Item.objectFrom(item, shareData.getShareId(), shareIndex)); + } else if ("file".equals(item.get("type")) && this.subtitleExts.contains("." + Utils.getExt((String) item.get("file_name")))) { + subtitles.add(Item.objectFrom(item, shareData.getShareId(), shareIndex)); + } + } + if (page < Math.ceil((double) ((Map) listData.get("metadata")).get("_total") / prePage)) { + List> nextItems = listFile(shareIndex, shareData, videos, subtitles, shareId, folderId, page + 1); + items.addAll(nextItems); + } + for (Map dir : subDir) { + List> subItems = listFile(shareIndex, shareData, videos, subtitles, shareId, dir.get("fid").toString(), null); + items.addAll(subItems); + } + return items; + } + + private Map findBestLCS(Item mainItem, List targetItems) { + List> results = new ArrayList<>(); + int bestMatchIndex = 0; + for (int i = 0; i < targetItems.size(); i++) { + LCSResult currentLCS = lcs(mainItem.getName(), targetItems.get(i).getName()); + Map result = new HashMap<>(); + result.put("target", targetItems.get(i)); + result.put("lcs", currentLCS); + results.add(result); + if (currentLCS.length > results.get(bestMatchIndex).get("lcs").toString().length()) { + bestMatchIndex = i; + } + } + Map bestMatch = results.get(bestMatchIndex); + Map finalResult = new HashMap<>(); + finalResult.put("allLCS", results); + finalResult.put("bestMatch", bestMatch); + finalResult.put("bestMatchIndex", bestMatchIndex); + return finalResult; + } + + public void getFilesByShareUrl(int shareIndex, String shareInfo, List videos, List subtitles) throws Exception { + ShareData shareData = getShareData((String) shareInfo); + if (shareData == null) return; + getShareToken(shareData); + if (!this.shareTokenCache.containsKey(shareData.getShareId())) return; + listFile(shareIndex, shareData, videos, subtitles, shareData.getShareId(), shareData.getFolderId(), 1); + if (!subtitles.isEmpty()) { + for (Item video : videos) { + Map matchSubtitle = findBestLCS(video, subtitles); + if (matchSubtitle.get("bestMatch") != null) { + video.setSubtitle((String) ((Map) matchSubtitle.get("bestMatch")).get("target")); + } + } + } + } + + private void clean() { + saveFileIdCaches.clear(); + } + + private void clearSaveDir() throws Exception { + + Map listData = Json.parseSafe(api("file/sort?" + this.pr + "&pdir_fid=" + this.saveDirId + "&_page=1&_size=200&_sort=file_type:asc,updated_at:desc", Collections.emptyMap(), Collections.emptyMap(), 0, "GET"), Map.class); + if (listData.get("data") != null && ((List>) ((Map) listData.get("data")).get("list")).size() > 0) { + List list = new ArrayList<>(); + for (Map stringStringMap : ((List>) ((Map) listData.get("data")).get("list"))) { + list.add((String) stringStringMap.get("fid")); + } + api("file/delete?" + this.pr, Collections.emptyMap(), ImmutableMap.of("action_type", "2", "filelist", Json.toJson(list), "exclude_fids", ""), 0, "POST"); + } + } + + private void createSaveDir(boolean clean) throws Exception { + if (this.saveDirId != null) { + if (clean) clearSaveDir(); + return; + } + + Map listData = Json.parseSafe(api("file/sort?" + this.pr + "&pdir_fid=0&_page=1&_size=200&_sort=file_type:asc,updated_at:desc", Collections.emptyMap(), Collections.emptyMap(), 0, "GET"), Map.class); + if (listData.get("data") != null) { + for (Map item : (List>) ((Map) listData.get("data")).get("list")) { + if (this.saveDirName.equals(item.get("file_name"))) { + this.saveDirId = item.get("fid").toString(); + clearSaveDir(); + break; + } + } + } + if (this.saveDirId == null) { + Map create = Json.parseSafe(api("file?" + this.pr, Collections.emptyMap(), ImmutableMap.of("pdir_fid", "0", "file_name", this.saveDirName, "dir_path", "", "dir_init_lock", "false"), 0, "POST"), Map.class); + if (create.get("data") != null && ((Map) create.get("data")).get("fid") != null) { + this.saveDirId = ((Map) create.get("data")).get("fid").toString(); + } + } + } + + private String save(String shareId, String stoken, String fileId, String fileToken, boolean clean) throws Exception { + createSaveDir(clean); + if (clean) { + clean(); + } + if (this.saveDirId == null) return null; + if (stoken == null) { + getShareToken(new ShareData(shareId, null)); + if (!this.shareTokenCache.containsKey(shareId)) return null; + } + + Map saveResult = Json.parseSafe(api("share/sharepage/save?" + this.pr, null, ImmutableMap.of("fid_list", ImmutableList.of(fileId), "fid_token_list", ImmutableList.of(fileToken), "to_pdir_fid", this.saveDirId, "pwd_id", shareId, "stoken", stoken != null ? stoken : (String) this.shareTokenCache.get(shareId).get("stoken"), "pdir_fid", "0", "scene", "link"), 0, "POST"), Map.class); + if (saveResult.get("data") != null && ((Map) saveResult.get("data")).get("task_id") != null) { + int retry = 0; + while (true) { + + Map taskResult = Json.parseSafe(api("task?" + this.pr + "&task_id=" + ((Map) saveResult.get("data")).get("task_id") + "&retry_index=" + retry, Collections.emptyMap(), Collections.emptyMap(), 0, "GET"), Map.class); + if (taskResult.get("data") != null && ((Map) taskResult.get("data")).get("save_as") != null && ((Map) ((Map) taskResult.get("data")).get("save_as")).get("save_as_top_fids") != null && ((List) ((Map) ((Map) taskResult.get("data")).get("save_as")).get("save_as_top_fids")).size() > 0) { + return ((List) ((Map) ((Map) taskResult.get("data")).get("save_as")).get("save_as_top_fids")).get(0); + } + retry++; + if (retry > 2) break; + Thread.sleep(1000); + } + } + return null; + } + + private String getLiveTranscoding(String shareId, String stoken, String fileId, String fileToken, String flag) throws Exception { + if (!this.saveFileIdCaches.containsKey(fileId)) { + String saveFileId = save(shareId, stoken, fileId, fileToken, true); + if (saveFileId == null) return null; + this.saveFileIdCaches.put(fileId, saveFileId); + } + + Map transcoding = Json.parseSafe(api("file/v2/play?" + this.pr, Collections.emptyMap(), ImmutableMap.of("fid", this.saveFileIdCaches.get(fileId), "resolutions", "normal,low,high,super,2k,4k", "supports", "fmp4"), 0, "POST"), Map.class); + if (transcoding.get("data") != null && ((Map) transcoding.get("data")).get("video_list") != null) { + String flagId = flag.split("-")[flag.split("-").length - 1]; + int index = findAllIndexes(getPlayFormatList(), flagId); + String ucFormat = getPlayFormatUcList().get(index); + for (Map video : (List>) ((Map) transcoding.get("data")).get("video_list")) { + if (video.get("resolution").equals(ucFormat)) { + return (String) ((Map) video.get("video_info")).get("url"); + } + } + return (String) ((Map) ((List>) ((Map) transcoding.get("data")).get("video_list")).get(index).get("video_info")).get("url"); + } + return null; + } + + private String getDownload(String shareId, String stoken, String fileId, String fileToken, boolean clean) throws Exception { + if (!this.saveFileIdCaches.containsKey(fileId)) { + String saveFileId = save(shareId, stoken, fileId, fileToken, clean); + if (saveFileId == null) return null; + this.saveFileIdCaches.put(fileId, saveFileId); + } + Map down = Json.parseSafe(api("file/download?" + this.pr + "&uc_param_str=", Collections.emptyMap(), ImmutableMap.of("fids", ImmutableList.of(this.saveFileIdCaches.get(fileId))), 0, "POST"), Map.class); + if (down.get("data") != null) { + return ((List>) down.get("data")).get(0).get("download_url").toString(); + } + return null; + } + + // Helper method to convert bytes to hex string + private String bytesToHex(byte[] bytes) { + StringBuilder sb = new StringBuilder(); + for (byte b : bytes) { + sb.append(String.format("%02x", b)); + } + return sb.toString(); + } + + // Encoding helper method + private String encodeURIComponent(String value) { + try { + return java.net.URLEncoder.encode(value, "UTF-8"); + } catch (Exception e) { + return value; + } + } + + +} + diff --git a/src/main/java/com/github/catvod/bean/uc/Cache.java b/src/main/java/com/github/catvod/bean/uc/Cache.java new file mode 100644 index 0000000..a455f42 --- /dev/null +++ b/src/main/java/com/github/catvod/bean/uc/Cache.java @@ -0,0 +1,38 @@ +package com.github.catvod.bean.uc; + +import com.github.catvod.api.UCApi; +import com.github.catvod.spider.Init; +import com.github.catvod.utils.Path; +import com.google.gson.Gson; +import com.google.gson.annotations.SerializedName; + +public class Cache { + + @SerializedName("user") + private User user; + + + public static Cache objectFrom(String str) { + Cache item = new Gson().fromJson(str, Cache.class); + return item == null ? new Cache() : item; + } + + public User getUser() { + return user == null ? new User("") : user; + } + + public void setUser(User user) { + this.user = user; + this.save(); + } + + + public void save() { + Init.execute(() -> Path.write(UCApi.get().getCache(), toString())); + } + + @Override + public String toString() { + return new Gson().toJson(this); + } +} diff --git a/src/main/java/com/github/catvod/bean/uc/Item.java b/src/main/java/com/github/catvod/bean/uc/Item.java new file mode 100644 index 0000000..67b1b1e --- /dev/null +++ b/src/main/java/com/github/catvod/bean/uc/Item.java @@ -0,0 +1,112 @@ +package com.github.catvod.bean.uc; + +import com.github.catvod.utils.Utils; + +import java.util.Map; +import java.util.regex.Pattern; + +public class Item { + private String fileId; + private String shareId; + private String shareToken; + private String shareFileToken; + private String seriesId; + private String name; + private String type; + private String formatType; + private Double size; + private String parent; + private String shareData; + private int shareIndex; + private Double lastUpdateAt; + private String subtitle; + + public Item() { + this.fileId = ""; + this.shareId = ""; + this.shareToken = ""; + this.shareFileToken = ""; + this.seriesId = ""; + this.name = ""; + this.type = ""; + this.formatType = ""; + this.size = 0d; + this.parent = ""; + this.shareData = null; + this.shareIndex = 0; + this.lastUpdateAt = 0d; + } + + public static Item objectFrom(Map item_json, String shareId, int shareIndex) { + Item item = new Item(); + item.fileId = item_json.get("fid") != null ? (String) item_json.get("fid") : ""; + item.shareId = shareId; + item.shareToken = item_json.get("stoken") != null ? (String) item_json.get("stoken") : ""; + item.shareFileToken = item_json.get("share_fid_token") != null ? (String) item_json.get("share_fid_token") : ""; + item.seriesId = item_json.get("series_id") != null ? (String) item_json.get("series_id") : ""; + item.name = item_json.get("file_name") != null ? (String) item_json.get("file_name") : ""; + item.type = item_json.get("obj_category") != null ? (String) item_json.get("obj_category") : ""; + item.formatType = item_json.get("format_type") != null ? (String) item_json.get("format_type") : ""; + item.size = item_json.get("size") != null ? (Double) item_json.get("size") : 0d; + item.parent = item_json.get("pdir_fid") != null ? (String) item_json.get("pdir_fid") : ""; + item.lastUpdateAt = item_json.get("last_update_at") != null ? (Double) item_json.get("last_update_at") : Double.valueOf(0d); + item.shareIndex = shareIndex; + return item; + } + + public String getFileExtension() { + String[] arr = name.split("\\."); + return arr[arr.length - 1]; + } + + public String getSubtitle() { + return subtitle; + } + + public void setSubtitle(String subtitle) { + this.subtitle = subtitle; + } + + public String getFileId() { + return fileId.isEmpty() ? "" : fileId; + } + + public String getName() { + return name.isEmpty() ? "" : name; + } + + public String getParent() { + return parent.isEmpty() ? "" : "[" + parent + "]"; + } + + public String getSize() { + return size.equals("0") ? "" : "[" + size + "]"; + } + + + public int getShareIndex() { + return shareIndex; + } + + public String getDisplayName(String type_name) { + String name = getName(); + if (type_name.equals("电视剧")) { + String[] replaceNameList = {"4k", "4K"}; + name = name.replaceAll("\\." + getFileExtension(), ""); + for (String replaceName : replaceNameList) { + name = name.replaceAll(replaceName, ""); + } + name = Pattern.compile("/\\.S01E(.*?)\\./").matcher(name).find() ? name.split("/\\.S01E(.*?)\\./")[1] : name; + String[] numbers = name.split("\\d+"); + if (numbers.length > 0) { + name = numbers[0]; + } + } + return name + " " + Utils.getSize(size); + } + + public String getEpisodeUrl(String type_name) { + return getDisplayName(type_name) + "$" + getFileId() + "++" + shareFileToken + "++" + shareId + "++" + shareToken; + } +} + diff --git a/src/main/java/com/github/catvod/bean/uc/ShareData.java b/src/main/java/com/github/catvod/bean/uc/ShareData.java new file mode 100644 index 0000000..aad568f --- /dev/null +++ b/src/main/java/com/github/catvod/bean/uc/ShareData.java @@ -0,0 +1,36 @@ +package com.github.catvod.bean.uc; + +public class ShareData { + private String shareId; + private String folderId; + private String sharePwd ; + + public ShareData(String shareId, String folderId) { + this.shareId = shareId; + this.folderId = folderId; + } + + public String getSharePwd() { + return sharePwd; + } + + public void setSharePwd(String sharePwd) { + this.sharePwd = sharePwd; + } + + public String getShareId() { + return shareId; + } + + public void setShareId(String shareId) { + this.shareId = shareId; + } + + public String getFolderId() { + return folderId; + } + + public void setFolderId(String folderId) { + this.folderId = folderId; + } +} diff --git a/src/main/java/com/github/catvod/bean/uc/User.java b/src/main/java/com/github/catvod/bean/uc/User.java new file mode 100644 index 0000000..714f373 --- /dev/null +++ b/src/main/java/com/github/catvod/bean/uc/User.java @@ -0,0 +1,30 @@ +package com.github.catvod.bean.uc; + +import com.google.gson.annotations.SerializedName; + +public class User { + public User(String cookie) { + this.cookie = cookie; + } + + @SerializedName("cookie") + private String cookie; + + public String getCookie() { + return cookie; + } + + public void setCookie(String cookie) { + this.cookie = cookie; + } + + public static User objectFrom(String cookie) { + return new User(cookie); + } + + + public void clean() { + this.cookie = ""; + + } +} diff --git a/src/main/java/com/github/catvod/spider/Cloud.java b/src/main/java/com/github/catvod/spider/Cloud.java index 81896aa..228d572 100644 --- a/src/main/java/com/github/catvod/spider/Cloud.java +++ b/src/main/java/com/github/catvod/spider/Cloud.java @@ -3,7 +3,6 @@ import com.github.catvod.crawler.Spider; import com.github.catvod.utils.Json; -import com.github.catvod.utils.Utils; import com.google.common.collect.ImmutableList; import com.google.gson.JsonObject; import org.apache.commons.lang3.StringUtils; @@ -17,14 +16,18 @@ public class Cloud extends Spider { private Quark quark = null; private Ali ali = null; + private UC uc = null; @Override public void init(String extend) throws Exception { JsonObject ext = StringUtils.isAllBlank(extend) ? new JsonObject() : Json.safeObject(extend); quark = new Quark(); ali = new Ali(); + uc = new UC(); quark.init(ext.has("cookie") ? ext.get("cookie").getAsString() : ""); ali.init(ext.has("token") ? ext.get("token").getAsString() : ""); + uc.init(ext.has("uccookie") ? ext.get("uccookie").getAsString() : ""); + } @Override @@ -33,26 +36,41 @@ public String detailContent(List shareUrl) throws Exception { return ali.detailContent(shareUrl); } else if (shareUrl.get(0).matches(Quark.patternQuark)) { return quark.detailContent(shareUrl); + } else if (shareUrl.get(0).matches(UC.patternUC)) { + return uc.detailContent(shareUrl); } return null; } @Override public String playerContent(String flag, String id, List vipFlags) throws Exception { - return flag.contains("quark") ? quark.playerContent(flag, id, vipFlags) : ali.playerContent(flag, id, vipFlags); + if (flag.contains("quark")) { + return quark.playerContent(flag, id, vipFlags); + } else if (flag.contains("uc")) { + return uc.playerContent(flag, id, vipFlags); + } else { + return ali.playerContent(flag, id, vipFlags); + } } protected String detailContentVodPlayFrom(List shareLinks) { List from = new ArrayList<>(); List aliShare = new ArrayList<>(); List quarkShare = new ArrayList<>(); + List ucShare = new ArrayList<>(); + for (String shareLink : shareLinks) { if (shareLink.matches(Ali.pattern.pattern())) { aliShare.add(shareLink); } else if (shareLink.matches(Quark.patternQuark)) { quarkShare.add(shareLink); + } else if (shareLink.matches(UC.patternUC)) { + ucShare.add(shareLink); } } + if (!ucShare.isEmpty()) { + from.add(uc.detailContentVodPlayFrom(ucShare)); + } if (!quarkShare.isEmpty()) { from.add(quark.detailContentVodPlayFrom(quarkShare)); } @@ -70,6 +88,8 @@ protected String detailContentVodPlayUrl(List shareLinks) throws Excepti urls.add(ali.detailContentVodPlayUrl(ImmutableList.of(shareLink))); } else if (shareLink.matches(Quark.patternQuark)) { urls.add(quark.detailContentVodPlayUrl(ImmutableList.of(shareLink))); + } else if (shareLink.matches(UC.patternUC)) { + urls.add(uc.detailContentVodPlayUrl(ImmutableList.of(shareLink))); } } return StringUtils.join(urls, "$$$"); diff --git a/src/main/java/com/github/catvod/spider/Mogg.java b/src/main/java/com/github/catvod/spider/Mogg.java new file mode 100644 index 0000000..80f8780 --- /dev/null +++ b/src/main/java/com/github/catvod/spider/Mogg.java @@ -0,0 +1,152 @@ +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.net.OkHttp; +import com.github.catvod.utils.Utils; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; +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.List; +import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * @author zhixc + */ +public class Mogg extends Cloud { + + private final String siteUrl = "https://www.mogg.top"; + private final Pattern regexCategory = Pattern.compile("index.php/vod/type/id/(\\w+).html"); + private final Pattern regexPageTotal = Pattern.compile("\\$\\(\"\\.mac_total\"\\)\\.text\\('(\\d+)'\\);"); + private JsonObject extend; + + private Map getHeader() { + Map header = new HashMap<>(); + header.put("User-Agent", Utils.CHROME); + return header; + } + + @Override + public void init(String extend) throws Exception { + this.extend = JsonParser.parseString(extend).getAsJsonObject(); + super.init( extend); + } + + @Override + public String homeContent(boolean filter) { + List classes = new ArrayList<>(); + Document doc = Jsoup.parse(OkHttp.string(siteUrl, getHeader())); + Elements elements = doc.select(".nav-link"); + for (Element e : elements) { + Matcher mather = regexCategory.matcher(e.attr("href")); + if (mather.find()) { + classes.add(new Class(mather.group(1), e.text().trim())); + } + } + return Result.string(classes, parseVodListFromDoc(doc)); + } + + @Override + public String categoryContent(String tid, String pg, boolean filter, HashMap extend) { + String[] urlParams = new String[]{tid, "", "", "", "", "", "", "", pg, "", "", ""}; + if (extend != null && extend.size() > 0) { + for (String key : extend.keySet()) { + urlParams[Integer.parseInt(key)] = extend.get(key); + } + } + Document doc = Jsoup.parse(OkHttp.string(String.format("%s/index.php/vod/show/id/%s/page/%s.html", siteUrl, tid, pg), getHeader())); + int page = Integer.parseInt(pg), limit = 72, total = 0; + Matcher matcher = regexPageTotal.matcher(doc.html()); + if (matcher.find()) total = Integer.parseInt(matcher.group(1)); + int count = total <= limit ? 1 : ((int) Math.ceil(total / (double) limit)); + return Result.get().vod(parseVodListFromDoc(doc)).page(page, count, limit, total).string(); + } + + private List parseVodListFromDoc(Document doc) { + List list = new ArrayList<>(); + Elements elements = doc.select(".module-item"); + for (Element e : elements) { + String vodId = e.selectFirst(".video-name a").attr("href"); + String vodPic = e.selectFirst(".module-item-pic > img").attr("data-src"); + String vodName = e.selectFirst(".video-name").text(); + String vodRemarks = e.selectFirst(".module-item-text").text(); + list.add(new Vod(vodId, vodName, vodPic, vodRemarks)); + } + return list; + } + + @Override + public String detailContent(List ids) throws Exception { + String vodId = ids.get(0); + Document doc = Jsoup.parse(OkHttp.string(siteUrl + vodId, getHeader())); + + Vod item = new Vod(); + item.setVodId(vodId); + item.setVodName(doc.selectFirst(".video-info-header > .page-title").text()); + item.setVodPic(doc.selectFirst(".module-item-pic img").attr("data-src")); + item.setVodArea(doc.select(".video-info-header a.tag-link").last().text()); + item.setTypeName(String.join(",", doc.select(".video-info-header div.tag-link a").eachText())); + + List shareLinks = doc.select(".module-row-text").eachAttr("data-clipboard-text"); + for (int i = 0; i < shareLinks.size(); i++) { + shareLinks.set(i, shareLinks.get(i).trim()); + //String detailContent = super.detailContent(List.of(shareLinks.get(i))); + } + item.setVodPlayUrl(super.detailContentVodPlayUrl(shareLinks)); + item.setVodPlayFrom(super.detailContentVodPlayFrom(shareLinks)); + + Elements elements = doc.select(".video-info-item"); + for (Element e : elements) { + String title = e.previousElementSibling().text(); + if (title.contains("导演")) { + item.setVodDirector(String.join(",", e.select("a").eachText())); + } else if (title.contains("主演")) { + item.setVodActor(String.join(",", e.select("a").eachText())); + } else if (title.contains("年代")) { + item.setVodYear(e.selectFirst("a").text().trim()); + } else if (title.contains("备注")) { + item.setVodRemarks(e.text().trim()); + } else if (title.contains("剧情")) { + item.setVodContent(e.selectFirst(".sqjj_a").text().replace("[收起部分]", "").trim()); + } + } + + return Result.string(item); + } + + @Override + public String searchContent(String key, boolean quick) throws Exception { + return searchContent(key, "1"); + } + + @Override + public String searchContent(String key, boolean quick, String pg) throws Exception { + return searchContent(key, pg); + } + + + private String searchContent(String key, String pg) { + String searchURL = siteUrl + String.format("/index.php/vod/search/page/%s/wd/%s.html", pg, URLEncoder.encode(key)); + String html = OkHttp.string(searchURL, getHeader()); + Elements items = Jsoup.parse(html).select(".module-search-item"); + List list = new ArrayList<>(); + for (Element item : items) { + String vodId = item.select(".video-serial").attr("href"); + String name = item.select(".video-serial").attr("title"); + String pic = item.select(".module-item-pic > img").attr("data-src"); + String remark = item.select(".video-tag-icon").text(); + list.add(new Vod(vodId, name, pic, remark)); + } + return Result.string(list); + } +} \ No newline at end of file diff --git a/src/main/java/com/github/catvod/spider/UC.java b/src/main/java/com/github/catvod/spider/UC.java new file mode 100644 index 0000000..7e55844 --- /dev/null +++ b/src/main/java/com/github/catvod/spider/UC.java @@ -0,0 +1,90 @@ +package com.github.catvod.spider; + + +import com.github.catvod.api.UCApi; +import com.github.catvod.bean.Result; +import com.github.catvod.bean.uc.ShareData; +import com.github.catvod.crawler.Spider; +import com.github.catvod.crawler.SpiderDebug; +import org.apache.commons.lang3.StringUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; +import java.util.Map; + +/** + * @author ColaMint & Adam & FongMi + */ +public class UC extends Spider { + + + public static final String patternUC = "(https:\\/\\/drive\\.uc\\.cn\\/s\\/[^\"]+)"; + ; + + @Override + public void init(String extend) throws Exception { + + UCApi.get().setCookie(extend); + } + + @Override + public String detailContent(List ids) throws Exception { + + ShareData shareData = UCApi.get().getShareData(ids.get(0)); + return Result.string(UCApi.get().getVod(shareData)); + } + + + @Override + public String playerContent(String flag, String id, List vipFlags) throws Exception { + String playContent = UCApi.get().playerContent(id.split("\\+\\+"), flag); + SpiderDebug.log("playContent:" + playContent); + return playContent; + } + + /** + * 獲取詳情內容視頻播放來源(多 shared_link) + * + * @param ids share_link 集合 + * @return 詳情內容視頻播放來源 + */ + public String detailContentVodPlayFrom(List ids) { + List playFrom = new ArrayList<>(); + /* if (ids.size() < 2){ + return TextUtils.join("$$$", UCApi.get().getPlayFormatList()); + }*/ + + for (int i = 1; i <= ids.size(); i++) { + + for (String s : UCApi.get().getPlayFormatList()) { + playFrom.add(String.format(Locale.getDefault(), "uc" + s + "#%02d", i)); + + } + playFrom.add("uc原画" + i); + } + return StringUtils.join(playFrom, "$$$"); + } + + /** + * 獲取詳情內容視頻播放地址(多 share_link) + * + * @param ids share_link 集合 + * @return 詳情內容視頻播放地址 + */ + public String detailContentVodPlayUrl(List ids) throws Exception { + List playUrl = new ArrayList<>(); + for (String id : ids) { + ShareData shareData = UCApi.get().getShareData(id); + playUrl.add(UCApi.get().getVod(shareData).getVodPlayUrl()); + } + return StringUtils.join(playUrl, "$$$"); + } + + public static Object[] proxy(Map params) throws Exception { + String type = params.get("type"); + if ("video".equals(type)) return UCApi.get().proxyVideo(params); + //if ("sub".equals(type)) return AliYun.get().proxySub(params); + return null; + } +} From dd84b20ad487d3e2fb9eae20b885b4c5ed69ce21 Mon Sep 17 00:00:00 2001 From: lushunming <1357197829@qq.com> Date: Wed, 6 Nov 2024 11:16:02 +0800 Subject: [PATCH 2/9] =?UTF-8?q?uc=20and=20=E6=9C=A8=E5=81=B6=E5=93=A5?= =?UTF-8?q?=E5=93=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jar/spider.jar | Bin 513241 -> 513290 bytes json/config.json | 2 +- json/configAll.json | 2 +- .../java/com/github/catvod/spider/Proxy.java | 2 ++ 4 files changed, 4 insertions(+), 2 deletions(-) diff --git a/jar/spider.jar b/jar/spider.jar index b805e5827bedca471860124de35c8dd287ef17a9..e43e767efd76941862d1ea6131df63f404d6ecc5 100644 GIT binary patch delta 4461 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 ix(6r>!kXx_z params) throws Exception { return Ali.proxy(params); case "quark": return Quark.proxy(params); + case "uc": + return UC.proxy(params); case "bili": return Bili.proxy(params); case "webdav": From ad0076726f6219dd1b484e376f47cbd400c75385 Mon Sep 17 00:00:00 2001 From: lushunming <1357197829@qq.com> Date: Wed, 6 Nov 2024 13:44:41 +0800 Subject: [PATCH 3/9] =?UTF-8?q?uc=20and=20=E6=9C=A8=E5=81=B6=E5=93=A5?= =?UTF-8?q?=E5=93=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jar/spider.jar | Bin 513290 -> 513322 bytes json/config.json | 2 +- json/configAll.json | 2 +- .../java/com/github/catvod/api/UCApi.java | 16 +++++++++------- 4 files changed, 11 insertions(+), 9 deletions(-) diff --git a/jar/spider.jar b/jar/spider.jar index e43e767efd76941862d1ea6131df63f404d6ecc5..17171ba007fa21ac7d91aca2e2f5d3583fea07bb 100644 GIT binary patch delta 19828 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 delta 19795 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 params) throws Exception { String url = Utils.base64Decode(params.get("url")); - SpiderDebug.log("proxy url :" + url); - SpiderDebug.log("proxy header :" + Utils.base64Decode(params.get("header"))); + SpiderDebug.log("uc proxy url :" + url); + SpiderDebug.log("uc proxy header :" + Utils.base64Decode(params.get("header"))); Map header = new Gson().fromJson(Utils.base64Decode(params.get("header")), Map.class); if (header == null) header = new HashMap<>(); List arr = ImmutableList.of("Range", "Accept", "Accept-Encoding", "Accept-Language", "Cookie", "Origin", "Referer", "Sec-Ch-Ua", "Sec-Ch-Ua-Mobile", "Sec-Ch-Ua-Platform", "Sec-Fetch-Dest", "Sec-Fetch-Mode", "Sec-Fetch-Site", "User-Agent"); @@ -82,7 +82,7 @@ public Object[] proxyVideo(Map params) throws Exception { * @return */ private Object[] getM3u8(String url, Map header) { - SpiderDebug.log("m3u8 url :" + url); + SpiderDebug.log("uc m3u8 url :" + url); OkResult result = OkHttp.get(url, new HashMap<>(), header); String[] m3u8Arr = result.getBody().split("\n"); List listM3u8 = new ArrayList<>(); @@ -95,8 +95,8 @@ private Object[] getM3u8(String url, Map header) { if (oneLine.contains(".ts")) { mediaId++; thisOne = proxyVideoUrl(site + thisOne, header); - SpiderDebug.log("m3u8 line " + mediaId + ":" + oneLine); - SpiderDebug.log("m3u8 proxyed line " + mediaId + " :" + thisOne); + SpiderDebug.log("uc m3u8 line " + mediaId + ":" + oneLine); + SpiderDebug.log("uc m3u8 proxyed line " + mediaId + " :" + thisOne); } listM3u8.add(thisOne); @@ -202,7 +202,7 @@ public Vod getVod(ShareData shareData) throws Exception { } public String playerContent(String[] split, String flag) throws Exception { - SpiderDebug.log("flag:" + flag); + SpiderDebug.log("uc flag:" + flag); String fileId = split[0], fileToken = split[1], shareId = split[2], stoken = split[3]; String playUrl = ""; if (flag.contains("uc原画")) { @@ -210,10 +210,12 @@ public String playerContent(String[] split, String flag) throws Exception { } else { playUrl = this.getLiveTranscoding(shareId, stoken, fileId, fileToken, flag); } - SpiderDebug.log("origin playUrl:" + playUrl); + SpiderDebug.log("uc origin playUrl:" + playUrl); Map header = getHeaders(); header.remove("Host"); header.remove("Content-Type"); + SpiderDebug.log("uc origin header:" + Json.toJson(header)); + return Result.get().url(proxyVideoUrl(playUrl, header)).octet().header(header).string(); } From a9cd6027bf0551d486c1c344a04fd976381e0e4a Mon Sep 17 00:00:00 2001 From: lushunming <1357197829@qq.com> Date: Wed, 6 Nov 2024 14:06:50 +0800 Subject: [PATCH 4/9] =?UTF-8?q?uc=20and=20=E6=9C=A8=E5=81=B6=E5=93=A5?= =?UTF-8?q?=E5=93=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jar/spider.jar | Bin 513322 -> 513335 bytes json/config.json | 2 +- json/configAll.json | 2 +- .../java/com/github/catvod/api/UCApi.java | 6 ++++-- 4 files changed, 6 insertions(+), 4 deletions(-) diff --git a/jar/spider.jar b/jar/spider.jar index 17171ba007fa21ac7d91aca2e2f5d3583fea07bb..7c029ca7d81209e729bda5dc6d35e9367a23e5d0 100644 GIT binary patch delta 20245 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 delta 20010 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 params) throws Exception { String url = Utils.base64Decode(params.get("url")); - SpiderDebug.log("uc proxy url :" + url); - SpiderDebug.log("uc proxy header :" + Utils.base64Decode(params.get("header"))); + SpiderDebug.log("uc proxy param url :" + url); + SpiderDebug.log("uc proxy param header :" + Utils.base64Decode(params.get("header"))); Map header = new Gson().fromJson(Utils.base64Decode(params.get("header")), Map.class); if (header == null) header = new HashMap<>(); List arr = ImmutableList.of("Range", "Accept", "Accept-Encoding", "Accept-Language", "Cookie", "Origin", "Referer", "Sec-Ch-Ua", "Sec-Ch-Ua-Mobile", "Sec-Ch-Ua-Platform", "Sec-Fetch-Dest", "Sec-Fetch-Mode", "Sec-Fetch-Site", "User-Agent"); @@ -68,6 +68,8 @@ public Object[] proxyVideo(Map params) throws Exception { } } + + SpiderDebug.log("uc proxy used header :" + Utils.base64Decode(params.get("header"))); if (Utils.getExt(url).contains("m3u8")) { return getM3u8(url, header); } From b75a768fda283c6bb5266672618a31a27a3449c0 Mon Sep 17 00:00:00 2001 From: lushunming <1357197829@qq.com> Date: Wed, 6 Nov 2024 15:08:08 +0800 Subject: [PATCH 5/9] =?UTF-8?q?uc=20and=20=E6=9C=A8=E5=81=B6=E5=93=A5?= =?UTF-8?q?=E5=93=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- json/config.json | 2 +- json/configAll.json | 2 +- .../java/com/github/catvod/api/UCApi.java | 20 ++++++++++++++----- 3 files changed, 17 insertions(+), 7 deletions(-) diff --git a/json/config.json b/json/config.json index 3b52f3e..72f3e74 100644 --- a/json/config.json +++ b/json/config.json @@ -1,5 +1,5 @@ { - "spider": "../jar/spider.jar;md5;67978c71453b6ab5b0478ba9c862a6e7", + "spider": "../jar/spider.jar;md5;eb8b697e15ca02c3c7a72e2633112ae0", "sites": [ { "key": "Douban", diff --git a/json/configAll.json b/json/configAll.json index 6815731..3d46614 100644 --- a/json/configAll.json +++ b/json/configAll.json @@ -1,5 +1,5 @@ { - "spider": "../jar/spider.jar;md5;67978c71453b6ab5b0478ba9c862a6e7", + "spider": "../jar/spider.jar;md5;eb8b697e15ca02c3c7a72e2633112ae0", "sites": [ { "key": "Douban", diff --git a/src/main/java/com/github/catvod/api/UCApi.java b/src/main/java/com/github/catvod/api/UCApi.java index 4cd9051..7f25769 100644 --- a/src/main/java/com/github/catvod/api/UCApi.java +++ b/src/main/java/com/github/catvod/api/UCApi.java @@ -54,10 +54,11 @@ public class UCApi { private String serviceTicket; public Object[] proxyVideo(Map params) throws Exception { - String url = Utils.base64Decode(params.get("url")); + String url = base64Decode(params.get("url")); SpiderDebug.log("uc proxy param url :" + url); - SpiderDebug.log("uc proxy param header :" + Utils.base64Decode(params.get("header"))); - Map header = new Gson().fromJson(Utils.base64Decode(params.get("header")), Map.class); + Map header = new Gson().fromJson(base64Decode(params.get("header")), Map.class); + SpiderDebug.log("uc proxy param header :" + Json.toJson(header)); + if (header == null) header = new HashMap<>(); List arr = ImmutableList.of("Range", "Accept", "Accept-Encoding", "Accept-Language", "Cookie", "Origin", "Referer", "Sec-Ch-Ua", "Sec-Ch-Ua-Mobile", "Sec-Ch-Ua-Platform", "Sec-Fetch-Dest", "Sec-Fetch-Mode", "Sec-Fetch-Site", "User-Agent"); for (String key : params.keySet()) { @@ -69,7 +70,7 @@ public Object[] proxyVideo(Map params) throws Exception { } - SpiderDebug.log("uc proxy used header :" + Utils.base64Decode(params.get("header"))); + SpiderDebug.log("uc proxy used header :" + Json.toJson(header)); if (Utils.getExt(url).contains("m3u8")) { return getM3u8(url, header); } @@ -222,7 +223,16 @@ public String playerContent(String[] split, String flag) throws Exception { } private String proxyVideoUrl(String url, Map header) { - return String.format(Proxy.getProxyUrl() + "?do=uc&type=video&url=%s&header=%s", Utils.base64Encode(url), Utils.base64Encode(Json.toJson(header))); + return String.format(Proxy.getProxyUrl() + "?do=uc&type=video&url=%s&header=%s", base64Encode(url), base64Encode(Json.toJson(header))); + } + + public String base64Encode(String str) { + return new String(Base64.getUrlEncoder().encode(str.getBytes())); + } + + public String base64Decode(String str) { + if (StringUtils.isBlank(str)) return ""; + return new String(Base64.getUrlDecoder().decode(str)); } /** From f477d2100fa3411ba8fad3214861943269142013 Mon Sep 17 00:00:00 2001 From: lushunming <1357197829@qq.com> Date: Wed, 6 Nov 2024 15:15:32 +0800 Subject: [PATCH 6/9] =?UTF-8?q?uc=20and=20=E6=9C=A8=E5=81=B6=E5=93=A5?= =?UTF-8?q?=E5=93=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jar/spider.jar | Bin 513335 -> 513597 bytes json/config.json | 2 +- json/configAll.json | 2 +- .../java/com/github/catvod/api/UCApi.java | 2 +- 4 files changed, 3 insertions(+), 3 deletions(-) diff --git a/jar/spider.jar b/jar/spider.jar index 7c029ca7d81209e729bda5dc6d35e9367a23e5d0..d12cedee57b5652cc1b1eb46f47b3b650714f630 100644 GIT binary patch delta 20418 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 delta 20416 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 Ow=!6}w-S#Xr~d=F12#bb diff --git a/json/config.json b/json/config.json index 72f3e74..39a5ccb 100644 --- a/json/config.json +++ b/json/config.json @@ -1,5 +1,5 @@ { - "spider": "../jar/spider.jar;md5;eb8b697e15ca02c3c7a72e2633112ae0", + "spider": "../jar/spider.jar;md5;a6c66565505deff62ce8e3936ab72d38", "sites": [ { "key": "Douban", diff --git a/json/configAll.json b/json/configAll.json index 3d46614..67d6d1f 100644 --- a/json/configAll.json +++ b/json/configAll.json @@ -1,5 +1,5 @@ { - "spider": "../jar/spider.jar;md5;eb8b697e15ca02c3c7a72e2633112ae0", + "spider": "../jar/spider.jar;md5;a6c66565505deff62ce8e3936ab72d38", "sites": [ { "key": "Douban", diff --git a/src/main/java/com/github/catvod/api/UCApi.java b/src/main/java/com/github/catvod/api/UCApi.java index 7f25769..c71e499 100644 --- a/src/main/java/com/github/catvod/api/UCApi.java +++ b/src/main/java/com/github/catvod/api/UCApi.java @@ -227,7 +227,7 @@ private String proxyVideoUrl(String url, Map header) { } public String base64Encode(String str) { - return new String(Base64.getUrlEncoder().encode(str.getBytes())); + return new String(Base64.getUrlEncoder().withoutPadding().encode(str.getBytes())); } public String base64Decode(String str) { From 09ebb7ad6520b5c6889aa753c7a5f4d310206f31 Mon Sep 17 00:00:00 2001 From: lushunming <1357197829@qq.com> Date: Wed, 6 Nov 2024 15:47:57 +0800 Subject: [PATCH 7/9] =?UTF-8?q?uc=20and=20=E6=9C=A8=E5=81=B6=E5=93=A5?= =?UTF-8?q?=E5=93=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- json/config.json | 20 +------------------- json/configAll.json | 11 +---------- 2 files changed, 2 insertions(+), 29 deletions(-) diff --git a/json/config.json b/json/config.json index 39a5ccb..6a2649e 100644 --- a/json/config.json +++ b/json/config.json @@ -1,5 +1,5 @@ { - "spider": "../jar/spider.jar;md5;a6c66565505deff62ce8e3936ab72d38", + "spider": "../jar/spider.jar;md5;58848cd724e2f9a14f4e61eff7f4d7c5", "sites": [ { "key": "Douban", @@ -28,15 +28,6 @@ "changeable": 0, "ext": {} }, - { - "key": "KuaKeBa", - "name": "夸克吧", - "type": 3, - "api": "csp_KuaKeBa", - "searchable": 1, - "changeable": 1, - "ext": {} - }, { "key": "glod", "name": "金牌 | 影视", @@ -180,15 +171,6 @@ "changeable": 1, "ext": {} }, - { - "key": "木偶", - "name": "木偶", - "type": 3, - "api": "csp_Mogg", - "searchable": 1, - "changeable": 1, - "ext": {} - }, { "key": "csp_AList", "name": "AList┃网盘", diff --git a/json/configAll.json b/json/configAll.json index 67d6d1f..3595e6c 100644 --- a/json/configAll.json +++ b/json/configAll.json @@ -1,5 +1,5 @@ { - "spider": "../jar/spider.jar;md5;a6c66565505deff62ce8e3936ab72d38", + "spider": "../jar/spider.jar;md5;58848cd724e2f9a14f4e61eff7f4d7c5", "sites": [ { "key": "Douban", @@ -69,15 +69,6 @@ "changeable": 1, "ext": {} }, - { - "key": "木偶", - "name": "木偶", - "type": 3, - "api": "csp_Mogg", - "searchable": 1, - "changeable": 1, - "ext": {} - }, { "key": "csp_AList", "name": "AList┃网盘", From 21ecdcfe6417edc6ab23eccf3ec5ff768300ec96 Mon Sep 17 00:00:00 2001 From: lushunming <1357197829@qq.com> Date: Wed, 6 Nov 2024 16:09:07 +0800 Subject: [PATCH 8/9] uc and mogg --- jar/spider.jar | Bin 513597 -> 513597 bytes json/config.json | 2 +- json/configAll.json | 2 +- 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/jar/spider.jar b/jar/spider.jar index d12cedee57b5652cc1b1eb46f47b3b650714f630..94f3043ba2aae04a066c3c0cc7941eaf7b86c253 100644 GIT binary patch delta 5243 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 Date: Wed, 6 Nov 2024 16:10:54 +0800 Subject: [PATCH 9/9] uc and mogg --- json/config.json | 9 +++++++++ json/configAll.json | 9 +++++++++ 2 files changed, 18 insertions(+) diff --git a/json/config.json b/json/config.json index dd990ef..9297ec2 100644 --- a/json/config.json +++ b/json/config.json @@ -171,6 +171,15 @@ "changeable": 1, "ext": {} }, + { + "key": "木偶", + "name": "木偶", + "type": 3, + "api": "csp_Mogg", + "searchable": 1, + "changeable": 1, + "ext": {} + }, { "key": "csp_AList", "name": "AList┃网盘", diff --git a/json/configAll.json b/json/configAll.json index 8a11acd..5f76213 100644 --- a/json/configAll.json +++ b/json/configAll.json @@ -69,6 +69,15 @@ "changeable": 1, "ext": {} }, + { + "key": "木偶", + "name": "木偶", + "type": 3, + "api": "csp_Mogg", + "searchable": 1, + "changeable": 1, + "ext": {} + }, { "key": "csp_AList", "name": "AList┃网盘",