Use new proxy

This commit is contained in:
jhengazuji 2025-11-25 13:21:13 +08:00
parent 6ea1a9c090
commit 9ebe4fa54e
5 changed files with 34 additions and 40 deletions

View File

@ -39,14 +39,14 @@ import java.util.Map;
public class Bili extends Spider {
private static final String COOKIE = "buvid3=84B0395D-C9F2-C490-E92E-A09AB48FE26E71636infoc";
private static String cookie;
private String cookie;
private JsonObject extend;
private boolean login;
private boolean isVip;
private Wbi wbi;
private static Map<String, String> getHeader() {
private Map<String, String> getHeader() {
Map<String, String> headers = new HashMap<>();
headers.put("User-Agent", Util.CHROME);
headers.put("Referer", "https://www.bilibili.com");
@ -198,12 +198,13 @@ public class Bili extends Spider {
String dan = "https://api.bilibili.com/x/v1/dm/list.so?oid=".concat(cid);
for (int i = 0; i < acceptDesc.length; i++) {
url.add(acceptDesc[i]);
url.add("proxy://do=bili" + "&aid=" + aid + "&cid=" + cid + "&qn=" + acceptQuality[i] + "&type=mpd");
url.add(Proxy.getUrl(siteKey, "&aid=" + aid + "&cid=" + cid + "&qn=" + acceptQuality[i] + "&type=mpd"));
}
return Result.get().url(url).danmaku(Arrays.asList(Danmaku.create().name("B站").url(dan))).dash().header(getHeader()).string();
}
public static Object[] proxy(Map<String, String> params) {
@Override
public Object[] proxyLocal(Map<String, String> params) {
String aid = params.get("aid");
String cid = params.get("cid");
String qn = params.get("qn");
@ -223,7 +224,7 @@ public class Bili extends Spider {
return result;
}
private static HashMap<String, String> getAudioFormat() {
private HashMap<String, String> getAudioFormat() {
HashMap<String, String> audios = new HashMap<>();
audios.put("30280", "192000");
audios.put("30232", "132000");
@ -231,7 +232,7 @@ public class Bili extends Spider {
return audios;
}
private static void findAudio(Dash dash, StringBuilder sb) {
private void findAudio(Dash dash, StringBuilder sb) {
for (Media audio : dash.getAudio()) {
for (String key : getAudioFormat().keySet()) {
if (audio.getId().equals(key)) {
@ -241,7 +242,7 @@ public class Bili extends Spider {
}
}
private static void findVideo(Dash dash, StringBuilder sb, String qn) {
private void findVideo(Dash dash, StringBuilder sb, String qn) {
for (Media video : dash.getVideo()) {
if (video.getId().equals(qn)) {
sb.append(getMedia(video));
@ -249,7 +250,7 @@ public class Bili extends Spider {
}
}
private static String getMedia(Media media) {
private String getMedia(Media media) {
if (media.getMimeType().startsWith("video")) {
return getAdaptationSet(media, String.format(Locale.getDefault(), "height='%s' width='%s' frameRate='%s' sar='%s'", media.getHeight(), media.getWidth(), media.getFrameRate(), media.getSar()));
} else if (media.getMimeType().startsWith("audio")) {
@ -259,14 +260,14 @@ public class Bili extends Spider {
}
}
private static String getAdaptationSet(Media media, String params) {
private String getAdaptationSet(Media media, String params) {
String id = media.getId() + "_" + media.getCodecId();
String type = media.getMimeType().split("/")[0];
String baseUrl = media.getBaseUrl().replace("&", "&amp;");
return String.format(Locale.getDefault(), "<AdaptationSet>\n" + "<ContentComponent contentType=\"%s\"/>\n" + "<Representation id=\"%s\" bandwidth=\"%s\" codecs=\"%s\" mimeType=\"%s\" %s startWithSAP=\"%s\">\n" + "<BaseURL>%s</BaseURL>\n" + "<SegmentBase indexRange=\"%s\">\n" + "<Initialization range=\"%s\"/>\n" + "</SegmentBase>\n" + "</Representation>\n" + "</AdaptationSet>", type, id, media.getBandWidth(), media.getCodecs(), media.getMimeType(), params, media.getStartWithSap(), baseUrl, media.getSegmentBase().getIndexRange(), media.getSegmentBase().getInitialization());
}
private static String getMpd(Dash dash, String videoList, String audioList) {
private String getMpd(Dash dash, String videoList, String audioList) {
return String.format(Locale.getDefault(), "<MPD xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns=\"urn:mpeg:dash:schema:mpd:2011\" xsi:schemaLocation=\"urn:mpeg:dash:schema:mpd:2011 DASH-MPD.xsd\" type=\"static\" mediaPresentationDuration=\"PT%sS\" minBufferTime=\"PT%sS\" profiles=\"urn:mpeg:dash:profile:isoff-on-demand:2011\">\n" + "<Period duration=\"PT%sS\" start=\"PT0S\">\n" + "%s\n" + "%s\n" + "</Period>\n" + "</MPD>", dash.getDuration(), dash.getMinBufferTime(), dash.getDuration(), videoList, audioList);
}

View File

@ -13,13 +13,9 @@ public class Proxy {
private static Method method;
private static int port;
public static Object[] proxy(Map<String, String> params) throws Exception {
return switch (params.get("do")) {
case "ck" -> new Object[]{200, "text/plain; charset=utf-8", new ByteArrayInputStream("ok".getBytes(StandardCharsets.UTF_8))};
case "bili" -> Bili.proxy(params);
case "webdav" -> WebDAV.vod(params);
default -> null;
};
public static Object[] proxy(Map<String, String> params) {
if ("ck".equals(params.get("do"))) return new Object[]{200, "text/plain; charset=utf-8", new ByteArrayInputStream("ok".getBytes(StandardCharsets.UTF_8))};
return null;
}
public static void init() {

View File

@ -28,7 +28,7 @@ import java.util.TreeMap;
public class WebDAV extends Spider {
private static List<Drive> drives;
private List<Drive> drives;
private List<String> allExt;
private String extend;
@ -53,7 +53,7 @@ public class WebDAV extends Spider {
return Util.removeExt(item.getName());
}
private static Drive getDrive(String name) {
private Drive getDrive(String name) {
return drives.get(drives.indexOf(new Drive(name)));
}
@ -126,7 +126,20 @@ public class WebDAV extends Spider {
@Override
public String playerContent(String flag, String id, List<String> vipFlags) {
String[] ids = id.split("~~~");
return Result.get().url(getProxyUrl(ids[0])).subs(getSub(ids)).string();
return Result.get().url(Proxy.getUrl(siteKey, "&url=" + ids[0])).subs(getSub(ids)).string();
}
@Override
public Object[] proxyLocal(Map<String, String> params) throws IOException {
String url = params.get("url");
String key = url.contains("/") ? url.substring(0, url.indexOf("/")) : url;
url = url.substring(key.length());
Drive drive = getDrive(key);
Object[] result = new Object[3];
result[0] = 200;
result[1] = "application/octet-stream";
result[2] = drive.getWebdav().get(drive.getHost() + url, getHeaders(params));
return result;
}
private List<DavResource> getList(Drive drive, String path, List<String> ext) throws IOException {
@ -151,7 +164,7 @@ public class WebDAV extends Spider {
private String findSubs(Drive drive, DavResource res, List<DavResource> items) {
StringBuilder sb = new StringBuilder();
for (DavResource item : items) if (removeExt(item).equals(removeExt(res))) sb.append("~~~").append(item.getName()).append("@@@").append(getExt(item)).append("@@@").append(drive.getName()).append(item.getPath());
return !sb.isEmpty() ? sb.toString() : findSubs(drive, items);
return sb.length() > 0 ? sb.toString() : findSubs(drive, items);
}
private String findSubs(Drive drive, List<DavResource> items) {
@ -167,29 +180,13 @@ public class WebDAV extends Spider {
String[] split = text.split("@@@");
String name = split[0];
String ext = split[1];
String url = getProxyUrl(split[2]);
String url = Proxy.getUrl(siteKey, "&url=" + split[2]);
sub.add(Sub.create().name(name).ext(ext).url(url));
}
return sub;
}
private String getProxyUrl(String url) {
return "proxy://do=webdav&url=" + url;
}
public static Object[] vod(Map<String, String> params) throws IOException {
String url = params.get("url");
String key = url.contains("/") ? url.substring(0, url.indexOf("/")) : url;
url = url.substring(key.length());
Drive drive = getDrive(key);
Object[] result = new Object[3];
result[0] = 200;
result[1] = "application/octet-stream";
result[2] = drive.getWebdav().get(drive.getHost() + url, getHeaders(params));
return result;
}
private static Map<String, String> getHeaders(Map<String, String> params) {
private Map<String, String> getHeaders(Map<String, String> params) {
Map<String, String> headers = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
List<String> keys = Arrays.asList("referer", "icy-metadata", "range", "connection", "accept-encoding", "user-agent");
for (String key : params.keySet()) if (keys.contains(key)) headers.put(key, params.get(key));

Binary file not shown.

View File

@ -1 +1 @@
a460452b3a982dc9f4cf82e75b09391b
a0eb7f9582a738589ec05589299052c9