bili support owner

This commit is contained in:
FongMi 2023-10-26 18:32:44 +08:00
parent b2f3535a93
commit a60914d0e8
7 changed files with 111 additions and 12 deletions

View File

@ -44,6 +44,10 @@ public class Data {
private List<Page> pages;
@SerializedName("dash")
private Dash dash;
@SerializedName("owner")
private Owner owner;
@SerializedName("wbi_img")
private Wbi wbi;
public JsonElement getResult() {
return result;
@ -116,4 +120,12 @@ public class Data {
public Dash getDash() {
return dash == null ? new Dash() : dash;
}
public Owner getOwner() {
return owner == null ? new Owner() : owner;
}
public Wbi getWbi() {
return wbi == null ? new Wbi() : wbi;
}
}

View File

@ -0,0 +1,25 @@
package com.github.catvod.bean.bili;
import android.text.TextUtils;
import com.google.gson.annotations.SerializedName;
public class Owner {
@SerializedName("mid")
private int mid;
@SerializedName("name")
private String name;
public int getMid() {
return mid;
}
public String getName() {
return TextUtils.isEmpty(name) ? "" : name;
}
public String getFormat() {
return String.format("[a=cr:{\"id\":\"%s\",\"name\":\"%s\"}/]%s[/a]", getMid() + "/{pg}", getName(), getName());
}
}

View File

@ -42,6 +42,8 @@ public class Resp {
private String pic;
@SerializedName("duration")
private String duration;
@SerializedName("length")
private String length;
public static List<Result> arrayFrom(JsonElement str) {
Type listType = new TypeToken<List<Result>>() {}.getType();
@ -61,7 +63,11 @@ public class Resp {
}
public String getDuration() {
return TextUtils.isEmpty(duration) ? "" : duration;
return TextUtils.isEmpty(duration) ? getLength() : duration.split(":")[0] + "分鐘";
}
public String getLength() {
return TextUtils.isEmpty(length) ? "" : length;
}
public String getPic() {
@ -72,8 +78,8 @@ public class Resp {
Vod vod = new Vod();
vod.setVodId(getBvId() + "@" + getAid());
vod.setVodName(Jsoup.parse(getTitle()).text());
vod.setVodRemarks(getDuration().split(":")[0] + "分鐘");
vod.setVodPic(getPic().startsWith("//") ? "https:" + getPic() : getPic());
vod.setVodRemarks(getDuration());
return vod;
}
}

View File

@ -0,0 +1,47 @@
package com.github.catvod.bean.bili;
import android.net.Uri;
import android.text.TextUtils;
import com.github.catvod.utils.Utils;
import com.google.gson.annotations.SerializedName;
import java.net.URLEncoder;
import java.util.LinkedHashMap;
public class Wbi {
private final int[] mixinKeyEncTab = new int[]{46, 47, 18, 2, 53, 8, 23, 32, 15, 50, 10, 31, 58, 3, 45, 35, 27, 43, 5, 49, 33, 9, 42, 19, 29, 28, 14, 39, 12, 38, 41, 13, 37, 48, 7, 16, 24, 55, 40, 61, 26, 17, 0, 1, 60, 51, 30, 4, 22, 25, 54, 21, 56, 59, 6, 63, 57, 62, 11, 36, 20, 34, 44, 52};
@SerializedName("img_url")
private String imgUrl;
@SerializedName("sub_url")
private String subUrl;
public String getImgUrl() {
return TextUtils.isEmpty(imgUrl) ? "" : imgUrl;
}
public String getSubUrl() {
return TextUtils.isEmpty(subUrl) ? "" : subUrl;
}
private String getMixinKey(String imgKey, String subKey) {
String s = imgKey + subKey;
StringBuilder key = new StringBuilder();
for (int i = 0; i < 32; i++) key.append(s.charAt(mixinKeyEncTab[i]));
return key.toString();
}
public String getParam(LinkedHashMap<String, Object> params) {
String imgKey = Uri.parse(getImgUrl()).getLastPathSegment().split("\\.")[0];
String subKey = Uri.parse(getSubUrl()).getLastPathSegment().split("\\.")[0];
String mixinKey = getMixinKey(imgKey, subKey);
StringBuilder sb = new StringBuilder();
params.put("wts", System.currentTimeMillis() / 1000);
for (String key : params.keySet()) sb.append(key).append("=").append(URLEncoder.encode(params.get(key).toString())).append("&");
String param = Utils.substring(sb.toString());
String wbiSign = Utils.MD5(param + mixinKey);
return param + "&w_rid=" + wbiSign;
}
}

View File

@ -113,15 +113,23 @@ public class Bili extends Spider {
@Override
public String categoryContent(String tid, String pg, boolean filter, HashMap<String, String> extend) throws Exception {
String order = extend.containsKey("order") ? extend.get("order") : "totalrank";
String duration = extend.containsKey("duration") ? extend.get("duration") : "0";
if (extend.containsKey("tid")) tid = tid + " " + extend.get("tid");
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());
Resp resp = Resp.objectFrom(json);
List<Vod> list = new ArrayList<>();
for (Resp.Result item : Resp.Result.arrayFrom(resp.getData().getResult())) list.add(item.getVod());
return Result.string(list);
if (tid.endsWith("/{pg}")) {
String mid = tid.split("/")[0];
List<Vod> list = new ArrayList<>();
String json = OkHttp.string("https://api.bilibili.com/x/space/wbi/arc/search?mid=" + mid + "&pn=" + pg, getHeader());
for (Resp.Result item : Resp.Result.arrayFrom(Resp.objectFrom(json).getData().getList().getAsJsonObject().get("vlist"))) list.add(item.getVod());
return Result.string(list);
} else {
String order = extend.containsKey("order") ? extend.get("order") : "totalrank";
String duration = extend.containsKey("duration") ? extend.get("duration") : "0";
if (extend.containsKey("tid")) tid = tid + " " + extend.get("tid");
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());
Resp resp = Resp.objectFrom(json);
List<Vod> list = new ArrayList<>();
for (Resp.Result item : Resp.Result.arrayFrom(resp.getData().getResult())) list.add(item.getVod());
return Result.string(list);
}
}
@Override
@ -141,6 +149,7 @@ public class Bili extends Spider {
vod.setVodName(detail.getTitle());
vod.setTypeName(detail.getType());
vod.setVodContent(detail.getDesc());
vod.setVodDirector(detail.getOwner().getFormat());
vod.setVodRemarks(detail.getDuration() / 60 + "分鐘");
List<String> acceptDesc = new ArrayList<>();

Binary file not shown.

View File

@ -1 +1 @@
77f83df61dccdda0e660148285fcc94a
447dbd3dd81f649465abb48b68deb958