修复Jianpian

This commit is contained in:
qlql765 2025-07-02 12:21:53 +08:00
parent 2c4ef43f76
commit a56912b23c
7 changed files with 443 additions and 1 deletions

View File

@ -0,0 +1,233 @@
package com.github.catvod.bean.jianpian;
import android.text.TextUtils;
import com.github.catvod.bean.Vod;
import com.github.catvod.utils.Util;
import com.google.gson.annotations.SerializedName;
import java.util.Collections;
import java.util.List;
public class Data {
@SerializedName("jump_id")
private String jumpId;
@SerializedName("id")
private String id;
@SerializedName(value = "thumbnail", alternate = "path")
private String thumbnail;
@SerializedName("title")
private String title;
@SerializedName("mask")
private String mask;
@SerializedName("description")
private String description;
@SerializedName("playlist")
private Value playlist;
@SerializedName("year")
private String year;
@SerializedName("area")
private String area;
@SerializedName("types")
private List<Value> types;
@SerializedName("actors")
private List<Value> actors;
@SerializedName("directors")
private List<Value> directors;
@SerializedName("source_list_source")
private List<SourceListSource> source_list_source;
@SerializedName("dataList")
private List<DataList> dataList;
public String getJumpId() {
return TextUtils.isEmpty(jumpId) ? "" : jumpId;
}
public String getId() {
return TextUtils.isEmpty(id) ? "" : id;
}
public String getThumbnail() {
return TextUtils.isEmpty(thumbnail) ? "" : "http://img1.vbwus.com" + thumbnail;
}
public String getTitle() {
return TextUtils.isEmpty(title) ? "" : title;
}
public String getMask() {
return TextUtils.isEmpty(mask) ? getPlaylist() : mask;
}
public String getDescription() {
return TextUtils.isEmpty(description) ? "" : description.replace(" ", "");
}
public String getPlaylist() {
return playlist == null ? "" : playlist.getTitle();
}
public String getYear() {
return year == null ? "" : year;
}
public String getArea() {
return area == null ? "" : area;
}
public String getTypes() {
return types == null ? "" : getValues(types, false);
}
public String getActors() {
return actors == null ? "" : getValues(actors, true);
}
public String getDirectors() {
return directors == null ? "" : getValues(directors, true);
}
public List<SourceListSource> getSourcelistsource() {
return source_list_source == null ? Collections.emptyList() : source_list_source;
}
public List<DataList> getDataList() {
return dataList == null ? Collections.emptyList() : dataList;
}
public Vod homeVod() {
return new Vod(getJumpId(), getTitle(), getThumbnail());
}
public Vod vod() {
return new Vod(getId(), getTitle(), getThumbnail(), getMask());
}
public String getValues(List<Value> items, boolean link) {
StringBuilder sb = new StringBuilder();
for (Value value : items) sb.append(value.getValue(link)).append(" ");
return Util.substring(sb.toString());
}
public static class Value {
@SerializedName(value = "title", alternate = "name")
private String title;
private String getTitle() {
return TextUtils.isEmpty(title) ? "" : title;
}
private String getLink() {
return String.format("[a=cr:{\"id\":\"%s\",\"name\":\"%s\"}/]%s[/a]", getTitle() + "/{pg}", getTitle(), getTitle());
}
public String getValue(boolean link) {
return link ? getLink() : getTitle();
}
}
public static class SourceListSource {
@SerializedName("name")
private String name;
@SerializedName("source_list")
private List<SourceList> source_list;
public String getName() {
return TextUtils.isEmpty(name) ? "" : name;
}
public List<SourceList> getSourcelist() {
return source_list == null ? Collections.emptyList() : source_list;
}
}
public static class SourceList {
@SerializedName("source_name")
private String source_name;
@SerializedName("url")
private String url;
public String getSource_name() {
return TextUtils.isEmpty(source_name) ? "" : source_name;
}
public String getUrl() {
return TextUtils.isEmpty(url) ? "" : url.replaceAll("ftp", "tvbox-xg:ftp");
}
}
public String getVodFrom() {
StringBuilder result = new StringBuilder();
List<SourceListSource> sources = getSourcelistsource();
if (sources != null && !sources.isEmpty()) {
for (int i = 0; i < sources.size(); i++) {
if (i > 0) {
result.append("$$$");
}
result.append(sources.get(i).getName());
}
}
return result.toString();
}
public String getVodUrl() {
StringBuilder result = new StringBuilder();
List<SourceListSource> sources = getSourcelistsource();
if (sources != null && !sources.isEmpty()) {
for (SourceListSource source : sources) {
List<SourceList> sourceLists = source.getSourcelist();
if (sourceLists != null && !sourceLists.isEmpty()) {
for (SourceList item : sourceLists) {
result.append(item.getSource_name())
.append("$")
.append(item.getUrl())
.append("#");
}
if (result.length() > 0) {
result.deleteCharAt(result.length() - 1);
}
result.append("$$$");
}
}
if (result.length() >= 3) {
result.delete(result.length() - 3, result.length());
}
}
return result.toString();
}
public static class DataList {
@SerializedName("id")
private String id;
@SerializedName(value = "thumbnail", alternate = "path")
private String thumbnail;
@SerializedName("title")
private String title;
@SerializedName("mask")
private String mask;
public String getId() {
return TextUtils.isEmpty(id) ? "" : id;
}
public String getThumbnail() {
return TextUtils.isEmpty(thumbnail) ? "" : "http://img1.vbwus.com" + thumbnail;
}
public String getTitle() {
return TextUtils.isEmpty(title) ? "" : title;
}
public String getMask() {
return TextUtils.isEmpty(mask) ? "" : mask;
}
public Vod vod() {
return new Vod(getId(), getTitle(), getThumbnail(), getMask());
}
}
}

View File

@ -0,0 +1,18 @@
package com.github.catvod.bean.jianpian;
import com.google.gson.Gson;
import com.google.gson.annotations.SerializedName;
public class Detail {
@SerializedName("data")
private Data data;
public static Detail objectFrom(String str) {
return new Gson().fromJson(str, Detail.class);
}
public Data getData() {
return data == null ? new Data() : data;
}
}

View File

@ -0,0 +1,21 @@
package com.github.catvod.bean.jianpian;
import com.google.gson.Gson;
import com.google.gson.annotations.SerializedName;
import java.util.Collections;
import java.util.List;
public class Resp {
@SerializedName("data")
private List<Data> data;
public static Resp objectFrom(String str) {
return new Gson().fromJson(str, Resp.class);
}
public List<Data> getData() {
return data == null ? Collections.emptyList() : data;
}
}

View File

@ -0,0 +1,51 @@
package com.github.catvod.bean.jianpian;
import android.text.TextUtils;
import com.github.catvod.bean.Vod;
import com.google.gson.Gson;
import com.google.gson.annotations.SerializedName;
import java.util.Collections;
import java.util.List;
public class Search {
public static Search objectFrom(String str) {
return new Gson().fromJson(str, Search.class);
}
@SerializedName("data")
private List<Search> data;
@SerializedName("id")
private String id;
@SerializedName(value = "thumbnail", alternate = "path")
private String thumbnail;
@SerializedName("title")
private String title;
@SerializedName("mask")
private String mask;
public String getId() {
return TextUtils.isEmpty(id) ? "" : id;
}
public String getThumbnail() {
return TextUtils.isEmpty(thumbnail) ? "" : "http://img1.vbwus.com" + thumbnail;
}
public String getTitle() {
return TextUtils.isEmpty(title) ? "" : title;
}
public String getMask() {
return TextUtils.isEmpty(mask) ? "" : mask;
}
public Vod vod() {
return new Vod(getId(), getTitle(), getThumbnail(), getMask());
}
public List<Search> getData() {
return data == null ? Collections.emptyList() : data;
}
}

View File

@ -0,0 +1,119 @@
package com.github.catvod.spider;
import android.content.Context;
import com.github.catvod.bean.Class;
import com.github.catvod.bean.Result;
import com.github.catvod.bean.Vod;
import com.github.catvod.bean.jianpian.Data;
import com.github.catvod.bean.jianpian.Detail;
import com.github.catvod.bean.jianpian.Resp;
import com.github.catvod.bean.jianpian.Search;
import com.github.catvod.crawler.Spider;
import com.github.catvod.net.OkHttp;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* Qile
*/
public class Jianpian extends Spider {
private static String siteUrl = "http://api.ubj83.com";
private Map<String, String> getHeader() {
Map<String, String> headers = new HashMap<>();
headers.put("user-agent", "Mozilla/5.0 (Linux; Android 11; Redmi K30 Pro Zoom Edition Build/RKQ1.200826.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/90.0.4430.210 Mobile Safari/537.36;webank/h5face;webank/1.0;netType:NETWORK_WIFI;appVersion:416;packageName:com.jp3.xg3");
headers.put("accept", "application/json, text/plain, */*");
headers.put("x-requested-with", "com.jp3.xg3");
return headers;
}
@Override
public void init(Context context, String extend) throws Exception {
if (!extend.isEmpty()) siteUrl = extend;
}
@Override
public String homeContent(boolean filter) throws Exception {
List<Class> classes = new ArrayList<>();
List<String> typeIds = Arrays.asList("1", "2", "3", "4", "50", "99");
List<String> typeNames = Arrays.asList("电影", "电视剧", "动漫", "综艺", "纪录片", "Netflix");
for (int i = 0; i < typeIds.size(); i++)
classes.add(new Class(typeIds.get(i), typeNames.get(i)));
return Result.string(classes, Collections.emptyList());
}
@Override
public String homeVideoContent() {
List<Vod> list = new ArrayList<>();
String url = siteUrl + "/api/slide/list?pos_id=88";
Resp resp = Resp.objectFrom(OkHttp.string(url, getHeader()));
for (Data data : resp.getData()) list.add(data.homeVod());
return Result.string(list);
}
@Override
public String categoryContent(String tid, String pg, boolean filter, HashMap<String, String> extend) throws Exception {
List<Vod> list = new ArrayList<>();
String url;
if (tid.equals("50") || tid.equals("99")) {
url = siteUrl + String.format("/api/dyTag/list?category_id=%s", tid);
Resp resp = Resp.objectFrom(OkHttp.string(url, getHeader()));
for (Data data : resp.getData()) {
for (Data.DataList dataList : data.getDataList()) list.add(dataList.vod());
}
return Result.string(list);
} else {
url = siteUrl + String.format("/api/crumb/list?fcate_pid=%s&category_id=&area=&year=&type=&sort=&page=%s", tid, pg);
}
Resp resp = Resp.objectFrom(OkHttp.string(url, getHeader()));
for (Data data : resp.getData()) list.add(data.vod());
return Result.string(list);
}
@Override
public String detailContent(List<String> ids) throws Exception {
String url = siteUrl + "/api/video/detailv2?id=" + ids.get(0);
Data data = Detail.objectFrom(OkHttp.string(url, getHeader())).getData();
Vod vod = data.vod();
vod.setVodPlayFrom(data.getVodFrom());
vod.setVodYear(data.getYear());
vod.setVodArea(data.getArea());
vod.setTypeName(data.getTypes());
vod.setVodActor(data.getActors());
vod.setVodPlayUrl(data.getVodUrl());
vod.setVodDirector("Qile");
vod.setVodContent(data.getDescription());
return Result.string(vod);
}
@Override
public String playerContent(String flag, String id, List<String> vipFlags) throws Exception {
return Result.get().url(id).header(getHeader()).string();
}
@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);
}
public String searchContent(String key, String pg) throws Exception {
List<Vod> list = new ArrayList<>();
String url = siteUrl + String.format("/api/v2/search/videoV2?key=%s&category_id=88&page=%s&pageSize=20", URLEncoder.encode(key), pg);
Search search = Search.objectFrom(OkHttp.string(url, getHeader()));
for (Search data : search.getData()) list.add(data.vod());
return Result.string(list);
}
}

Binary file not shown.

View File

@ -1 +1 @@
796d0367c1378d9397c2aa967715c636
bcbe9599e27e6b4145eaa583b88b9955