cloud异步

This commit is contained in:
lushunming 2025-12-13 08:09:34 +08:00
parent d488a00eab
commit d280d770bb
2 changed files with 58 additions and 37 deletions

View File

@ -9,15 +9,12 @@ import com.github.catvod.utils.Json;
import com.github.catvod.utils.Util; import com.github.catvod.utils.Util;
import com.google.gson.JsonObject; import com.google.gson.JsonObject;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.tuple.ImmutablePair;
import java.util.ArrayList; import java.util.*;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.ExecutorService; import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors; import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import static com.github.catvod.api.TianyiApi.URL_CONTAIN; import static com.github.catvod.api.TianyiApi.URL_CONTAIN;
@ -32,6 +29,7 @@ public class Cloud extends Spider {
private YiDongYun yiDongYun = null; private YiDongYun yiDongYun = null;
private BaiDuPan baiDuPan = null; private BaiDuPan baiDuPan = null;
private Pan123 pan123 = null; private Pan123 pan123 = null;
private static final Map<String, ImmutablePair<List<String>, List<String>>> resultMap = new HashMap<>();
@Override @Override
public void init(Context context, String extend) throws Exception { public void init(Context context, String extend) throws Exception {
@ -101,69 +99,92 @@ public class Cloud extends Spider {
} }
protected String detailContentVodPlayFrom(List<String> shareLinks) { protected String detailContentVodPlayFrom(List<String> shareLinks) {
ImmutablePair<List<String>, List<String>> pairs = resultMap.get(Util.MD5(Json.toJson(shareLinks)));
List<String> from = new ArrayList<>(); if (pairs != null && pairs.left != null && !pairs.left.isEmpty()) {
int i = 0; return TextUtils.join("$$$", pairs.right);
for (String shareLink : shareLinks) {
i++;
if (shareLink.matches(Util.patternUC)) {
from.add(uc.detailContentVodPlayFrom(List.of(shareLink), i));
} else if (shareLink.matches(Util.patternQuark)) {
from.add(quark.detailContentVodPlayFrom(List.of(shareLink), i));
} /*else if (shareLink.matches(Util.patternAli)) {
from.add(ali.detailContentVodPlayFrom(List.of(shareLink), i));
} */ else if (shareLink.contains(URL_CONTAIN)) {
from.add(tianYi.detailContentVodPlayFrom(List.of(shareLink), i));
} else if (shareLink.contains(YiDongYun.URL_START)) {
from.add(yiDongYun.detailContentVodPlayFrom(List.of(shareLink), i));
} else if (shareLink.contains(BaiDuPan.URL_START)) {
from.add(baiDuPan.detailContentVodPlayFrom(List.of(shareLink), i));
} else if (shareLink.matches(Pan123Api.regex)) {
from.add(pan123.detailContentVodPlayFrom(List.of(shareLink), i));
}
} }
return TextUtils.join("$$$", from); getPlayFromAndUrl(shareLinks);
pairs = resultMap.get(Util.MD5(Json.toJson(shareLinks)));
if (pairs != null && pairs.left != null && !pairs.left.isEmpty()) {
return TextUtils.join("$$$", pairs.right);
}
return "";
} }
protected String detailContentVodPlayUrl(List<String> shareLinks) { protected String detailContentVodPlayUrl(List<String> shareLinks) {
ImmutablePair<List<String>, List<String>> pairs = resultMap.get(Util.MD5(Json.toJson(shareLinks)));
if (pairs != null && pairs.left != null && !pairs.left.isEmpty()) {
return TextUtils.join("$$$", pairs.left);
}
List<String> urls = new CopyOnWriteArrayList<>(); getPlayFromAndUrl(shareLinks);
pairs = resultMap.get(Util.MD5(Json.toJson(shareLinks)));
if (pairs != null && pairs.left != null && !pairs.left.isEmpty()) {
return TextUtils.join("$$$", pairs.left);
}
return "";
}
//同時获取from 和url 放入缓存只要一个函数执行就行避免重复执行
private void getPlayFromAndUrl(List<String> shareLinks) {
//首先清空缓存避免太多缓存
resultMap.clear();
List<String> urls = new ArrayList<>();
List<String> froms = new ArrayList<>();
ExecutorService service = Executors.newFixedThreadPool(4); ExecutorService service = Executors.newFixedThreadPool(4);
List<CompletableFuture<String>> futures = new ArrayList<>(); List<Future<ImmutablePair<String, String>>> futures = new ArrayList<>();
int i = 0;
for (String shareLink : shareLinks) { for (String shareLink : shareLinks) {
futures.add(CompletableFuture.supplyAsync(() -> {
int finalI = ++i;
futures.add(service.submit(() -> {
String url = ""; String url = "";
String from = "";
if (shareLink.matches(Util.patternUC)) { if (shareLink.matches(Util.patternUC)) {
url = uc.detailContentVodPlayUrl(List.of(shareLink)); url = uc.detailContentVodPlayUrl(List.of(shareLink));
from = uc.detailContentVodPlayFrom(List.of(shareLink), finalI);
} else if (shareLink.matches(Util.patternQuark)) { } else if (shareLink.matches(Util.patternQuark)) {
url = quark.detailContentVodPlayUrl(List.of(shareLink)); url = quark.detailContentVodPlayUrl(List.of(shareLink));
from = quark.detailContentVodPlayFrom(List.of(shareLink), finalI);
}/* else if (shareLink.matches(Util.patternAli)) { }/* else if (shareLink.matches(Util.patternAli)) {
urls.add(ali.detailContentVodPlayUrl(List.of(shareLink))); urls.add(ali.detailContentVodPlayUrl(List.of(shareLink)));
} */ else if (shareLink.contains(URL_CONTAIN)) { } */ else if (shareLink.contains(URL_CONTAIN)) {
url = tianYi.detailContentVodPlayUrl(List.of(shareLink)); url = tianYi.detailContentVodPlayUrl(List.of(shareLink));
from = tianYi.detailContentVodPlayFrom(List.of(shareLink), finalI);
} else if (shareLink.contains(YiDongYun.URL_START)) { } else if (shareLink.contains(YiDongYun.URL_START)) {
url = yiDongYun.detailContentVodPlayUrl(List.of(shareLink)); url = yiDongYun.detailContentVodPlayUrl(List.of(shareLink));
from = yiDongYun.detailContentVodPlayFrom(List.of(shareLink), finalI);
} else if (shareLink.contains(BaiDuPan.URL_START)) { } else if (shareLink.contains(BaiDuPan.URL_START)) {
url = baiDuPan.detailContentVodPlayUrl(List.of(shareLink)); url = baiDuPan.detailContentVodPlayUrl(List.of(shareLink));
from = baiDuPan.detailContentVodPlayFrom(List.of(shareLink), finalI);
} else if (shareLink.matches(Pan123Api.regex)) { } else if (shareLink.matches(Pan123Api.regex)) {
url = pan123.detailContentVodPlayUrl(List.of(shareLink)); url = pan123.detailContentVodPlayUrl(List.of(shareLink));
from = pan123.detailContentVodPlayFrom(List.of(shareLink), finalI);
} }
return url; return new ImmutablePair<String, String>(url, from);
}, service)); }));
} }
try { try {
for (CompletableFuture<String> future : futures) { for (Future<ImmutablePair<String, String>> future : futures) {
urls.add(future.get()); //只有连接不为空才放入进去
if (StringUtils.isNoneBlank(future.get().left)) {
urls.add(future.get().left);
froms.add(future.get().right);
}
} }
} catch (Exception e) { } catch (Exception e) {
SpiderDebug.log("获取异步结果出错:" + e); SpiderDebug.log("获取异步结果出错:" + e);
} }
resultMap.put(Util.MD5(Json.toJson(shareLinks)), new ImmutablePair<List<String>, List<String>>(urls, froms));
SpiderDebug.log("---urls" + Json.toJson(urls)); SpiderDebug.log("---urls" + Json.toJson(urls));
SpiderDebug.log("---froms" + Json.toJson(froms));
service.shutdown(); service.shutdown();
return StringUtils.join(urls, "$$$");
} }
} }

View File

@ -75,10 +75,10 @@ public class Quark extends Spider {
for (String id : ids) { for (String id : ids) {
ShareData shareData = QuarkApi.get().getShareData(id); ShareData shareData = QuarkApi.get().getShareData(id);
try { try {
playUrl.add(QuarkApi.get().getVod(shareData)==null?" $$$ ":QuarkApi.get().getVod(shareData).getVodPlayUrl()); playUrl.add(QuarkApi.get().getVod(shareData)==null?"":QuarkApi.get().getVod(shareData).getVodPlayUrl());
} catch (Exception e) { } catch (Exception e) {
SpiderDebug.log("获取播放地址出错:" + e.getMessage()); SpiderDebug.log("获取播放地址出错:" + e.getMessage());
playUrl.add(" $$$ "); playUrl.add("");
} }
} }
return TextUtils.join("$$$", playUrl); return TextUtils.join("$$$", playUrl);