cloud异步
This commit is contained in:
parent
d488a00eab
commit
d280d770bb
|
|
@ -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, "$$$");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue