Add Alist

This commit is contained in:
FongMi 2022-09-13 00:44:07 +08:00
parent 59dd71c015
commit a243eab748
10 changed files with 173 additions and 1082 deletions

View File

@ -13,6 +13,8 @@ public class Class {
private String typeId; private String typeId;
@SerializedName("type_name") @SerializedName("type_name")
private String typeName; private String typeName;
@SerializedName("type_flag")
private String typeFlag;
public static List<Class> arrayFrom(String str) { public static List<Class> arrayFrom(String str) {
Type listType = new TypeToken<List<Class>>() {}.getType(); Type listType = new TypeToken<List<Class>>() {}.getType();
@ -24,8 +26,13 @@ public class Class {
} }
public Class(String typeId, String typeName) { public Class(String typeId, String typeName) {
this(typeId, typeName, "");
}
public Class(String typeId, String typeName, String typeFlag) {
this.typeId = typeId; this.typeId = typeId;
this.typeName = typeName; this.typeName = typeName;
this.typeFlag = typeFlag;
} }
public String getTypeId() { public String getTypeId() {

View File

@ -28,6 +28,8 @@ public class Vod {
private String vodPlayFrom; private String vodPlayFrom;
@SerializedName("vod_play_url") @SerializedName("vod_play_url")
private String vodPlayUrl; private String vodPlayUrl;
@SerializedName("vod_tag")
private String vodTag;
public Vod() { public Vod() {
} }
@ -86,4 +88,8 @@ public class Vod {
public void setVodPlayUrl(String vodPlayUrl) { public void setVodPlayUrl(String vodPlayUrl) {
this.vodPlayUrl = vodPlayUrl; this.vodPlayUrl = vodPlayUrl;
} }
public void setVodTag(String vodTag) {
this.vodTag = vodTag;
}
} }

View File

@ -112,9 +112,13 @@ public class OkHttpUtil {
return string(defaultClient(), url, null, paramsMap, headerMap, respHeaderMap, METHOD_POST); return string(defaultClient(), url, null, paramsMap, headerMap, respHeaderMap, METHOD_POST);
} }
public static String post(String url, String jsonStr, Map<String, String> headerMap) { public static String postJson(String url, String json) {
return postJson(url, json, null);
}
public static String postJson(String url, String json, Map<String, String> headerMap) {
OKCallBack.OKCallBackString callback = new OKCallBack.OKCallBackString(); OKCallBack.OKCallBackString callback = new OKCallBack.OKCallBackString();
new OKRequest(METHOD_POST, url, jsonStr, headerMap, callback).execute(defaultClient()); new OKRequest(METHOD_POST, url, json, headerMap, callback).execute(defaultClient());
return callback.getResult(); return callback.getResult();
} }

View File

@ -0,0 +1,152 @@
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.crawler.Spider;
import com.github.catvod.net.OkHttpUtil;
import com.google.gson.JsonParser;
import com.google.gson.JsonSyntaxException;
import org.json.JSONArray;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
public class Alist extends Spider {
private JSONObject ext;
private boolean isJson(String json) {
try {
JsonParser.parseString(json);
return true;
} catch (JsonSyntaxException e) {
return false;
}
}
@Override
public void init(Context context, String extend) {
this.ext = new JSONObject();
try {
if (extend.startsWith("http")) extend = OkHttpUtil.string(extend);
if (isJson(extend)) parseJson(extend);
else parseText(extend);
} catch (Exception ignored) {
}
}
private void parseJson(String extend) throws Exception {
JSONObject object = new JSONObject(extend);
JSONArray array = object.names();
for (int i = 0; i < array.length(); i++) {
String key = array.getString(i);
ext.put(key, object.getString(key));
}
}
private void parseText(String extend) throws Exception {
String[] array = extend.split("#");
for (String text : array) {
String[] arr = text.split("\\$");
if (arr.length == 1) {
ext.put("alist", arr[0]);
} else if (arr.length == 2) {
ext.put(arr[0], arr[1]);
}
}
}
@Override
public String homeContent(boolean filter) {
List<Class> classes = new ArrayList<>();
Iterator<String> keys = this.ext.keys();
while (keys.hasNext()) {
String key = keys.next();
classes.add(new Class(key + "$/", key, "1"));
}
return Result.string(classes, Collections.emptyList());
}
@Override
public String categoryContent(String tid, String pg, boolean filter, HashMap<String, String> extend) throws Exception {
int index = tid.indexOf('$');
String name = tid.substring(0, index);
String path = tid.substring(index + 1);
String url = ext.getString(name) + "/api/public/path";
JSONObject params = new JSONObject();
params.put("path", path);
String response = OkHttpUtil.postJson(url, params.toString());
JSONArray array = new JSONObject(response).getJSONObject("data").getJSONArray("files");
List<Vod> list = new ArrayList<>();
for (int i = 0; i < array.length(); ++i) {
JSONObject o = array.getJSONObject(i);
String pic = o.getString("thumbnail");
boolean folder = o.getInt("type") == 1;
if (pic.isEmpty() && folder) pic = "http://img1.3png.com/281e284a670865a71d91515866552b5f172b.png";
Vod vod = new Vod();
vod.setVodId(tid + (tid.charAt(tid.length() - 1) == '/' ? "" : "/") + o.getString("name"));
vod.setVodName(o.getString("name"));
vod.setVodPic(pic);
vod.setVodTag(folder ? "folder" : "file");
String size = getSize(o.getLong("size"));
vod.setVodRemarks(folder ? size + " 文件夹" : size);
list.add(vod);
}
return Result.string(list);
}
@Override
public String detailContent(List<String> ids) throws Exception {
String tid = ids.get(0);
int index = tid.indexOf('$');
String name = tid.substring(0, index);
String path = tid.substring(index + 1);
String url = this.ext.getString(name) + "/api/public/path";
JSONObject params = new JSONObject();
params.put("path", path);
String response = OkHttpUtil.postJson(url, params.toString());
JSONArray files = new JSONObject(response).getJSONObject("data").getJSONArray("files");
JSONObject o = files.getJSONObject(0);
url = o.getString("url");
if (url.indexOf("//") == 0) url = "http:" + url;
Vod vod = new Vod();
vod.setVodId(tid + "/" + o.getString("name"));
vod.setVodName(o.getString("name"));
vod.setVodPic(o.getString("thumbnail"));
vod.setVodTag(o.getInt("type") == 1 ? "folder" : "file");
vod.setVodPlayFrom("播放");
vod.setVodPlayUrl(o.getString("name") + "$" + url);
return Result.string(vod);
}
@Override
public String playerContent(String flag, String id, List<String> vipFlags) {
return Result.get().url(id).string();
}
private String getSize(double size) {
if (size == 0) return "";
if (size > 1024 * 1024 * 1024 * 1024.0) {
size /= (1024 * 1024 * 1024 * 1024.0);
return String.format(Locale.getDefault(), "%.2f%s", size, "TB");
} else if (size > 1024 * 1024 * 1024.0) {
size /= (1024 * 1024 * 1024.0);
return String.format(Locale.getDefault(), "%.2f%s", size, "GB");
} else if (size > 1024 * 1024.0) {
size /= (1024 * 1024.0);
return String.format(Locale.getDefault(), "%.2f%s", size, "MB");
} else {
size /= 1024.0;
return String.format(Locale.getDefault(), "%.2f%s", size, "KB");
}
}
}

View File

@ -25,7 +25,7 @@ import java.util.Objects;
*/ */
public class Bili extends Spider { public class Bili extends Spider {
private final String url = "https://www.bilibili.com"; private static final String url = "https://www.bilibili.com";
private HashMap<String, String> header; private HashMap<String, String> header;
private JSONObject ext; private JSONObject ext;

View File

@ -1,374 +0,0 @@
package com.github.catvod.spider.wait;
import android.text.TextUtils;
import com.github.catvod.bean.Class;
import com.github.catvod.bean.Result;
import com.github.catvod.bean.Vod;
import com.github.catvod.crawler.Spider;
import com.github.catvod.crawler.SpiderDebug;
import com.github.catvod.net.OkHttpUtil;
import org.json.JSONArray;
import org.json.JSONObject;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.net.URLDecoder;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* @author 不知名
*/
public class Anime1 extends Spider {
private final JSONArray srcArray = new JSONArray();
private final String vodPic = "https://sta.anicdn.com/playerImg/8.jpg";
private String authority = "";
private String cookies = "";
private HashMap<String, String> getHeaders3() {
HashMap<String, String> headers = new HashMap<>();
headers.put("Authority", "d1zquzjgwo9yb.cloudfront.net");
headers.put("Accept", "application/json, text/javascript, */*; q=0.01");
headers.put("Accept-Encoding", "gzip, deflate, br");
headers.put("Accept-Language", "zh-TW,zh;q=0.9,en-US;q=0.8,en;q=0.7,ja;q=0.6");
headers.put("Origin", "https://anime1.me");
headers.put("Referer", "https://anime1.me/");
headers.put("User-Agent", "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.134 YaBrowser/22.7.1.755 (beta) Yowser/2.5 Safari/537.36");
headers.put("Sec-Fetch-Dest", "empty");
headers.put("Sec-Fetch-Mode", "cors");
headers.put("Sec-Fetch-Site", "cross-site");
headers.put("sec-ch-ua-mobile", "?0");
headers.put("sec-ch-ua-platform", "\"Windows\"");
headers.put("sec-ch-ua", " \" Not A;Brand\";v=\"99\", \"Chromium\";v=\"102\" ");
return headers;
}
private HashMap<String, String> getHeaders2() {
HashMap<String, String> headers = new HashMap<>();
headers.put("Authority", "v.anime1.me");
headers.put("Accept", "*/*");
headers.put("Accept-Language", "en,zh-TW;q=0.9,zh;q=0.8");
headers.put("Origin", "https://anime1.me");
headers.put("Referer", "https://anime1.me/");
headers.put("User-Agent", "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.134 YaBrowser/22.7.1.755 (beta) Yowser/2.5 Safari/537.36");
headers.put("Sec-Fetch-Dest", "empty");
headers.put("Sec-Fetch-Mode", "cors");
headers.put("Sec-Fetch-Site", "same-site");
headers.put("sec-ch-ua-mobile", "?0");
headers.put("sec-ch-ua-platform", "\"Windows\"");
headers.put("sec-ch-ua", " \" Not A;Brand\";v=\"99\", \"Chromium\";v=\"102\" ");
return headers;
}
private HashMap<String, String> getHeaders1() {
HashMap<String, String> headers = new HashMap<>();
headers.put("Accept", "*/*");
headers.put("Accept-encoding", "identity;q=1, *;q=0");
headers.put("Accept-language", "en,zh-TW;q=0.9,zh;q=0.8");
headers.put("Referer", "https://anime1.me");
headers.put("User-Agent", "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.134 YaBrowser/22.7.1.755 (beta) Yowser/2.5 Safari/537.36");
headers.put("Sec-Fetch-Dest", "video");
headers.put("Sec-Fetch-Mode", "no-cors");
headers.put("Sec-Fetch-Site", "same-site");
headers.put("sec-ch-ua-mobile", "?0");
headers.put("sec-ch-ua-platform", "\"Windows\"");
headers.put("sec-ch-ua", " \" Not A;Brand\";v=\"99\", \"Chromium\";v=\"102\" ");
headers.put("Authority", authority);
headers.put("cookie", cookies);
return headers;
}
@Override
public String homeContent(boolean filter) {
try {
String srcurl = "https://d1zquzjgwo9yb.cloudfront.net/?_=" + System.currentTimeMillis();
String srcOrignstr = OkHttpUtil.string(srcurl, getHeaders3());
JSONArray srcOrign = new JSONArray(srcOrignstr);
int srclen = srcOrign.length();
for (int i = 0; i < srclen; i++) {
JSONObject subobj = new JSONObject();
subobj.put("link", srcOrign.getJSONArray(i).get(0).toString());
subobj.put("name", srcOrign.getJSONArray(i).get(1).toString());
subobj.put("hit", srcOrign.getJSONArray(i).get(2).toString());
subobj.put("year", srcOrign.getJSONArray(i).get(3).toString());
subobj.put("season", srcOrign.getJSONArray(i).get(4).toString());
subobj.put("team", srcOrign.getJSONArray(i).get(5).toString());
srcArray.put(subobj);
}
List<Class> classes = new ArrayList<>();
Calendar cal = Calendar.getInstance();
int year = cal.get(Calendar.YEAR) + 1;
for (int i = 0; i < 8; i++) {
if (i == 0) {
classes.add(new Class(i, "最近更新"));
} else if (i < 7) {
year = year - 1;
classes.add(new Class(i, String.valueOf(year)));
} else {
classes.add(new Class(i, "更早"));
}
}
List<Vod> list = new ArrayList<>();
for (int i = 0; i < 10; i++) {
String id = srcArray.getJSONObject(i).getString("link");
String name = srcArray.getJSONObject(i).getString("name");
String mark = srcArray.getJSONObject(i).getString("hit");
list.add(new Vod(id, name, vodPic, mark));
}
return Result.string(classes, list);
} catch (Exception e) {
SpiderDebug.log(e);
return "";
}
}
@Override
public String categoryContent(String tid, String pg, boolean filter, HashMap<String, String> extend) {
try {
JSONArray array = new JSONArray();
int cateId = Integer.parseInt(tid);
Calendar cal = Calendar.getInstance();
int doy = cal.get(Calendar.YEAR) + 1;
if (cateId == 0) {
for (int i = 0; i < 100; i++) {
array.put(srcArray.getJSONObject(i));
}
} else if (cateId > 0 && cateId < 7) {
int yearchk = doy - cateId;
for (int i = 0; i < srcArray.length(); i++) {
JSONObject subobj = srcArray.getJSONObject(i);
String yystr = subobj.getString("year");
if (yystr.contains("/")) yystr = yystr.substring(5);
int yy = Integer.parseInt(yystr);
if (yy == yearchk) array.put(subobj);
}
} else {
int yy = doy - 6;
for (int i = 0; i < srcArray.length(); i++) {
JSONObject subobj = srcArray.getJSONObject(i);
String yearchk = subobj.getString("year");
if (yearchk.contains("/")) {
yearchk = yearchk.substring(5);
}
int yearint = Integer.parseInt(yearchk);
if (yearint < yy) array.put(subobj);
}
}
List<Vod> list = new ArrayList<>();
for (int i = 0; i < array.length(); i++) {
String id = array.getJSONObject(i).getString("link");
String name = array.getJSONObject(i).getString("name");
String mark = array.getJSONObject(i).getString("hit");
list.add(new Vod(id, name, vodPic, mark));
}
return Result.string(list);
} catch (Exception e) {
SpiderDebug.log(e);
return "";
}
}
@Override
public String detailContent(List<String> ids) {
try {
String id = ids.get(0);
JSONObject dtinfo = new JSONObject();
for (int i = 0; i < srcArray.length(); i++) {
JSONObject dtobj = srcArray.getJSONObject(i);
String objid = dtobj.getString("link");
if (objid.equals(id)) dtinfo = dtobj;
}
String title = dtinfo.getString("name");
String mark = dtinfo.getString("hit");
String year = dtinfo.getString("year");
String season = dtinfo.getString("season");
String team = dtinfo.getString("team");
Vod vod = new Vod();
vod.setVodId(ids.get(0));
vod.setVodName(title);
vod.setVodPic(vodPic);
vod.setVodYear(year);
vod.setTypeName(season);
vod.setVodArea("日本");
vod.setVodActor(team);
vod.setVodContent(mark);
String url = "https://anime1.me/?cat=" + id;
Document doc = Jsoup.parse(OkHttpUtil.string(url, getHeaders2()));
String nextPage;
Map<String, String> vod_play_Order = new TreeMap<>();
do {
Element nextPageEle = doc.selectFirst("div.nav-previous a");
if (nextPageEle != null) {
nextPage = nextPageEle.attr("href");
} else {
nextPage = "";
}
Elements sources = doc.select("article");
for (int i = 0; i < sources.size(); i++) {
Element source = sources.get(i);
Element sno = source.selectFirst("h2 > a");
String sourceNameori = "";
if (sno != null) {
sourceNameori = sno.text().trim();
} else {
Element sno2 = source.selectFirst("h2");
if (sno2 != null) {
sourceNameori = sno2.text().trim();
} else {
sourceNameori = "[No Title]";
}
}
int st = sourceNameori.indexOf("[") + 1;
int ed = sourceNameori.indexOf("]");
String sourceName = sourceNameori.substring(st, ed);
Elements playListA = source.select("div.vjscontainer video");
for (int j = 0; j < playListA.size(); j++) {
String playURL = playListA.get(j).attr("data-apireq");
if (playURL.isEmpty()) continue;
if (playListA.size() > 1) {
if (j < 9) {
int jj = j + 1;
String nn = sourceName + "0" + jj;
vod_play_Order.put(nn, playURL);
} else {
int jj = j + 1;
String nn = sourceName + jj;
vod_play_Order.put(nn, playURL);
}
continue;
}
String regex = ".*[a-zA-Z\\u4e00-\\u9fa5]+.*";
Matcher m = Pattern.compile(regex).matcher(sourceName);
if (m.matches()) {
vod_play_Order.put(sourceName, playURL);
} else {
float count = Float.parseFloat(sourceName);
if (count < 100.0) {
String nnn = "0" + sourceName;
vod_play_Order.put(nnn, playURL);
} else {
vod_play_Order.put(sourceName, playURL);
}
}
}
}
if (!nextPage.equals("")) {
doc = Jsoup.parse(OkHttpUtil.string(nextPage, getHeaders2()));
}
} while (!nextPage.equals(""));
String playList = "";
List<String> vodItems = new ArrayList<>();
Set<Map.Entry<String, String>> entrySet = vod_play_Order.entrySet();
for (Map.Entry<String, String> entry : entrySet) {
String key = entry.getKey();
String value = entry.getValue();
String pl = key + "$" + value;
vodItems.add(pl);
}
if (vodItems.size() > 0) playList = TextUtils.join("#", vodItems);
if (playList.length() == 0) playList = "nothing here";
Map<String, String> vod_play = new TreeMap<>();
vod_play.put("Anime1", playList);
vod.setVodPlayFrom(TextUtils.join("$$$", vod_play.keySet()));
vod.setVodPlayUrl(TextUtils.join("$$$", vod_play.values()));
return Result.string(vod);
} catch (Exception e) {
SpiderDebug.log(e);
return "";
}
}
@Override
public String playerContent(String flag, String id, List<String> vipFlags) {
try {
authority = "";
String url = "https://v.anime1.me/api";
String jsonreq = URLDecoder.decode(id, "UTF-8");
HashMap<String, String> reqpayload = new HashMap<>();
reqpayload.put("d", jsonreq);
Map<String, List<String>> respHeaderMap = new HashMap<>();
String response = OkHttpUtil.string(url, reqpayload, getHeaders2(), respHeaderMap);
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 3; i++) sb.append(respHeaderMap.get("set-cookie").get(i).split(";")[0]).append(";");
cookies = sb.toString();
return Result.get().url(getVideoUrl(response)).header(getHeaders1()).toString();
} catch (Exception e) {
SpiderDebug.log(e);
return "";
}
}
private String getVideoUrl(String response) throws Exception {
JSONObject obj = new JSONObject(response);
JSONArray array = obj.getJSONArray("s");
String m3u8url = "";
String mp4url = "";
for (int i = 0; i < array.length(); i++) {
JSONObject obj2 = array.getJSONObject(i);
String m3u8chk = obj2.getString("src");
if (m3u8chk.contains("m3u8")) {
m3u8url = m3u8chk;
} else {
mp4url = m3u8chk;
}
}
String videoUrl;
if (m3u8url.length() > 0) {
authority = m3u8url.split("/")[2];
videoUrl = "https:" + m3u8url;
String docm3u8 = OkHttpUtil.string(videoUrl, getHeaders1());
if (docm3u8.contains("1080p.m3u8")) {
videoUrl = videoUrl.replace("playlist", "1080p");
} else if (docm3u8.contains("720p.m3u8")) {
videoUrl = videoUrl.replace("playlist", "720p");
} else {
authority = mp4url.split("/")[2];
videoUrl = "https:" + mp4url;
}
} else {
authority = mp4url.split("/")[2];
videoUrl = "https:" + mp4url;
}
return videoUrl;
}
@Override
public String searchContent(String key, boolean quick) {
try {
JSONArray searchResult = new JSONArray();
for (int i = 0; i < srcArray.length(); i++) {
JSONObject srobj = srcArray.getJSONObject(i);
String kw = srobj.getString("name");
if (kw.contains(key)) searchResult.put(srobj);
}
List<Vod> list = new ArrayList<>();
if (searchResult.length() > 0) {
int ch = Math.min(searchResult.length(), 10);
for (int i = 0; i < ch; i++) {
String id = searchResult.getJSONObject(i).getString("link");
String name = searchResult.getJSONObject(i).getString("name");
String mark = searchResult.getJSONObject(i).getString("hit");
list.add(new Vod(id, name, vodPic, mark));
}
}
return Result.string(list);
} catch (Exception e) {
SpiderDebug.log(e);
return "";
}
}
}

View File

@ -1,329 +0,0 @@
package com.github.catvod.spider.wait;
import android.content.Context;
import android.text.TextUtils;
import android.util.Base64;
import com.github.catvod.bean.Class;
import com.github.catvod.bean.Result;
import com.github.catvod.bean.Vod;
import com.github.catvod.crawler.Spider;
import com.github.catvod.crawler.SpiderDebug;
import com.github.catvod.net.OkHttpUtil;
import org.json.JSONException;
import org.json.JSONObject;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* @author 不知名
*/
public class Tangrenjie extends Spider {
private static final String siteUrl = "https://www.tangrenjie.tv";
private final Pattern regexCategory = Pattern.compile("/vod/type/id/(\\d+).html");
private final Pattern regexVid = Pattern.compile("/vod/detail/id/(\\d+).html");
private final Pattern regexPlay = Pattern.compile("/vod/play/id/(\\d+)/sid/(\\d+)/nid/(\\d+).html");
private JSONObject playerConfig;
private JSONObject filterConfig;
@Override
public void init(Context context) {
super.init(context);
try {
playerConfig = new JSONObject("{\"if101\":{\"show\":\"蓝光一\",\"des\":\"\",\"ps\":\"0\",\"parse\":\"\",\"or\":999}}");
filterConfig = new JSONObject("{\"1\":[{\"key\":\"cateId\",\"name\":\"分类\",\"value\":[{\"n\":\"全部\",\"v\":\"\"},{\"n\":\"动作片\",\"v\":\"6\"},{\"n\":\"喜剧片\",\"v\":\"7\"},{\"n\":\"爱情片\",\"v\":\"8\"},{\"n\":\"科幻片\",\"v\":\"9\"},{\"n\":\"恐怖片\",\"v\":\"10\"},{\"n\":\"剧情片\",\"v\":\"11\"},{\"n\":\"战争片\",\"v\":\"12\"}]},{\"key\":\"area\",\"name\":\"地区\",\"value\":[{\"n\":\"全部\",\"v\":\"\"},{\"n\":\"大陆\",\"v\":\"大陆\"},{\"n\":\"香港\",\"v\":\"香港\"},{\"n\":\"台湾\",\"v\":\"台湾\"},{\"n\":\"美国\",\"v\":\"美国\"},{\"n\":\"法国\",\"v\":\"法国\"},{\"n\":\"英国\",\"v\":\"英国\"},{\"n\":\"日本\",\"v\":\"日本\"},{\"n\":\"韩国\",\"v\":\"韩国\"},{\"n\":\"德国\",\"v\":\"德国\"},{\"n\":\"泰国\",\"v\":\"泰国\"},{\"n\":\"印度\",\"v\":\"印度\"},{\"n\":\"其他\",\"v\":\"其他\"}]},{\"key\":\"year\",\"name\":\"年份\",\"value\":[{\"n\":\"全部\",\"v\":\"\"},{\"n\":\"2022\",\"v\":\"2022\"},{\"n\":\"2021\",\"v\":\"2021\"},{\"n\":\"2020\",\"v\":\"2020\"},{\"n\":\"2019\",\"v\":\"2019\"},{\"n\":\"2018\",\"v\":\"2018\"},{\"n\":\"2017\",\"v\":\"2017\"},{\"n\":\"2016\",\"v\":\"2016\"},{\"n\":\"2008\",\"v\":\"2008\"},{\"n\":\"2000\",\"v\":\"2000\"},{\"n\":\"1997\",\"v\":\"1997\"},{\"n\":\"1980\",\"v\":\"1980\"}]},{\"key\":\"by\",\"name\":\"排序\",\"value\":[{\"n\":\"时间\",\"v\":\"time\"},{\"n\":\"人气\",\"v\":\"hits\"},{\"n\":\"评分\",\"v\":\"score\"}]}],\"2\":[{\"key\":\"cateId\",\"name\":\"分类\",\"value\":[{\"n\":\"全部\",\"v\":\"\"},{\"n\":\"国产剧\",\"v\":\"13\"},{\"n\":\"港台剧\",\"v\":\"14\"},{\"n\":\"日韩剧\",\"v\":\"15\"},{\"n\":\"欧美剧\",\"v\":\"16\"},{\"n\":\"海外剧\",\"v\":\"27\"}]},{\"key\":\"area\",\"name\":\"地区\",\"value\":[{\"n\":\"全部\",\"v\":\"\"},{\"n\":\"大陆\",\"v\":\"大陆\"},{\"n\":\"香港\",\"v\":\"香港\"},{\"n\":\"台湾\",\"v\":\"台湾\"},{\"n\":\"日本\",\"v\":\"日本\"},{\"n\":\"欧美\",\"v\":\"欧美\"},{\"n\":\"韩国\",\"v\":\"韩国\"}]},{\"key\":\"year\",\"name\":\"年份\",\"value\":[{\"n\":\"全部\",\"v\":\"\"},{\"n\":\"2022\",\"v\":\"2022\"},{\"n\":\"2021\",\"v\":\"2021\"},{\"n\":\"2020\",\"v\":\"2020\"},{\"n\":\"2019\",\"v\":\"2019\"},{\"n\":\"2018\",\"v\":\"2018\"},{\"n\":\"2017\",\"v\":\"2017\"},{\"n\":\"2016\",\"v\":\"2016\"},{\"n\":\"2008\",\"v\":\"2008\"},{\"n\":\"2000\",\"v\":\"2000\"},{\"n\":\"1997\",\"v\":\"1997\"},{\"n\":\"1980\",\"v\":\"1980\"}]},{\"key\":\"by\",\"name\":\"排序\",\"value\":[{\"n\":\"时间\",\"v\":\"time\"},{\"n\":\"人气\",\"v\":\"hits\"},{\"n\":\"评分\",\"v\":\"score\"}]}],\"4\":[{\"key\":\"area\",\"name\":\"地区\",\"value\":[{\"n\":\"全部\",\"v\":\"\"},{\"n\":\"大陆\",\"v\":\"大陆\"},{\"n\":\"香港\",\"v\":\"香港\"},{\"n\":\"台湾\",\"v\":\"台湾\"},{\"n\":\"日本\",\"v\":\"日本\"},{\"n\":\"欧美\",\"v\":\"欧美\"},{\"n\":\"韩国\",\"v\":\"韩国\"}]},{\"key\":\"year\",\"name\":\"年份\",\"value\":[{\"n\":\"全部\",\"v\":\"\"},{\"n\":\"2022\",\"v\":\"2022\"},{\"n\":\"2021\",\"v\":\"2021\"},{\"n\":\"2020\",\"v\":\"2020\"},{\"n\":\"2019\",\"v\":\"2019\"},{\"n\":\"2018\",\"v\":\"2018\"},{\"n\":\"2017\",\"v\":\"2017\"},{\"n\":\"2016\",\"v\":\"2016\"},{\"n\":\"2008\",\"v\":\"2008\"},{\"n\":\"2000\",\"v\":\"2000\"},{\"n\":\"1997\",\"v\":\"1997\"},{\"n\":\"1980\",\"v\":\"1980\"}]},{\"key\":\"by\",\"name\":\"排序\",\"value\":[{\"n\":\"时间\",\"v\":\"time\"},{\"n\":\"人气\",\"v\":\"hits\"},{\"n\":\"评分\",\"v\":\"score\"}]}],\"3\":[{\"key\":\"cateId\",\"name\":\"分类\",\"value\":[{\"n\":\"全部\",\"v\":\"\"},{\"n\":\"纪录片\",\"v\":\"28\"}]},{\"key\":\"area\",\"name\":\"地区\",\"value\":[{\"n\":\"全部\",\"v\":\"\"},{\"n\":\"大陆\",\"v\":\"大陆\"},{\"n\":\"香港\",\"v\":\"香港\"},{\"n\":\"台湾\",\"v\":\"台湾\"},{\"n\":\"美国\",\"v\":\"美国\"},{\"n\":\"法国\",\"v\":\"法国\"},{\"n\":\"英国\",\"v\":\"英国\"},{\"n\":\"日本\",\"v\":\"日本\"},{\"n\":\"韩国\",\"v\":\"韩国\"},{\"n\":\"德国\",\"v\":\"德国\"},{\"n\":\"泰国\",\"v\":\"泰国\"},{\"n\":\"印度\",\"v\":\"印度\"},{\"n\":\"其他\",\"v\":\"其他\"}]},{\"key\":\"year\",\"name\":\"年份\",\"value\":[{\"n\":\"全部\",\"v\":\"\"},{\"n\":\"2022\",\"v\":\"2022\"},{\"n\":\"2021\",\"v\":\"2021\"},{\"n\":\"2020\",\"v\":\"2020\"},{\"n\":\"2019\",\"v\":\"2019\"},{\"n\":\"2018\",\"v\":\"2018\"},{\"n\":\"2017\",\"v\":\"2017\"},{\"n\":\"2016\",\"v\":\"2016\"},{\"n\":\"2008\",\"v\":\"2008\"},{\"n\":\"2000\",\"v\":\"2000\"},{\"n\":\"1997\",\"v\":\"1997\"},{\"n\":\"1980\",\"v\":\"1980\"}]},{\"key\":\"by\",\"name\":\"排序\",\"value\":[{\"n\":\"时间\",\"v\":\"time\"},{\"n\":\"人气\",\"v\":\"hits\"},{\"n\":\"评分\",\"v\":\"score\"}]}]}");
} catch (JSONException e) {
SpiderDebug.log(e);
}
}
private HashMap<String, String> getHeaders() {
HashMap<String, String> headers = new HashMap<>();
headers.put("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36");
headers.put("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");
headers.put("Accept-Language", "zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2");
return headers;
}
@Override
public String homeContent(boolean filter) {
Document doc = Jsoup.parse(OkHttpUtil.string(siteUrl, getHeaders()));
Elements elements = doc.select("ul.top_nav li a");
List<Class> classes = new ArrayList<>();
for (Element ele : elements) {
Elements b = ele.select("b");
String name = b.text();
boolean show = name.equals("电影") || name.equals("电视剧") || name.equals("动漫") || name.equals("综艺");
if (show) {
Matcher mather = regexCategory.matcher(ele.attr("href"));
if (!mather.find()) continue;
String id = mather.group(1).trim();
classes.add(new Class(id, name));
}
}
Element homeList = doc.select("div.cbox1").get(1);
elements = homeList.select("ul.vodlist li.vodlist_item");
List<Vod> list = new ArrayList<>();
for (int i = 0; i < elements.size(); i++) {
Element vod = elements.get(i);
String title = vod.selectFirst("a.vodlist_thumb").attr("title");
String cover = siteUrl + vod.selectFirst("a.vodlist_thumb").attr("data-original");
String remark = vod.select("span.pic_text b").text();
Matcher matcher = regexVid.matcher(vod.selectFirst("a.vodlist_thumb").attr("href"));
if (!matcher.find()) continue;
String id = "1=" + matcher.group(1);
list.add(new Vod(id, title, cover, remark));
}
return Result.string(classes, list, filterConfig);
}
@Override
public String categoryContent(String tid, String pg, boolean filter, HashMap<String, String> extend) {
StringBuilder url = new StringBuilder(siteUrl + "/vod/show/id/");
if (extend != null && extend.size() > 0 && extend.containsKey("tid") && extend.get("tid").length() > 0) {
url.append(extend.get("tid"));
} else {
url.append(tid);
}
if (extend != null && extend.size() > 0) {
for (String key : extend.keySet()) {
String value = extend.get(key);
if (TextUtils.isEmpty(value)) continue;
url.append("/").append(key).append("/").append(URLEncoder.encode(value));
}
}
url.append("/page/").append(pg).append(".html");
String html = OkHttpUtil.string(url.toString(), getHeaders());
Document doc = Jsoup.parse(html);
List<Vod> list = new ArrayList<>();
if (!html.contains("没有找到您想要的结果哦")) {
Elements elements = doc.select("ul.vodlist li.vodlist_item");
for (int i = 0; i < elements.size(); i++) {
Element vod = elements.get(i);
String title = vod.selectFirst("a.vodlist_thumb").attr("title");
String cover = siteUrl + vod.selectFirst("a.vodlist_thumb").attr("data-original");
String remark = vod.select("span.pic_text b").text();
Matcher matcher = regexVid.matcher(vod.selectFirst("a.vodlist_thumb").attr("href"));
if (!matcher.find()) continue;
String id = tid + "=" + matcher.group(1);
list.add(new Vod(id, title, cover, remark));
}
}
return Result.string(list);
}
@Override
public String detailContent(List<String> ids) {
String[] idd = ids.get(0).split("=");
String tid = idd[0];
String detail = idd[1];
String url = siteUrl + "/vod/detail/id/" + detail + ".html";
String htmltemp = OkHttpUtil.string(url, getHeaders());
String htmlsrc = "";
if (tid.equals("1")) {
htmlsrc = htmltemp.substring(0, 25000);
} else {
htmlsrc = htmltemp;
}
Document doc = Jsoup.parse(htmlsrc);
String vid = doc.selectFirst("div.content_thumb a").attr("href");
String cover = siteUrl + doc.selectFirst("div.content_thumb a").attr("data-original");
String title = doc.selectFirst("div.content_thumb a").attr("title");
String desc = doc.selectFirst("div.content > section > font").text();
String category = "", area = "", year = "", director = "", actor = "", remark = "";
remark = doc.select("span.data_style b").text();
Elements span_text_muted = doc.select("li.data span");
for (int i = 0; i < span_text_muted.size() - 2; i++) {
Element text = span_text_muted.get(i);
String info = text.text();
if (info.contains("类型")) {
try {
String cate = text.parent().text();
category = cate.substring(3);
} catch (Exception e) {
category = "";
}
} else if (info.contains("年份")) {
try {
year = text.parent().select("a").get(0).text();
} catch (Exception e) {
year = "";
}
} else if (info.contains("地区")) {
try {
area = text.parent().select("a").get(0).text();
} catch (Exception e) {
area = "";
}
}
}
List<String> actors = new ArrayList<>();
Elements aa = doc.select("li.data").get(0).select("a");
for (int j = 0; j < aa.size(); j++) actors.add(aa.get(j).text());
actor = TextUtils.join(",", actors);
List<String> directors = new ArrayList<>();
Elements bb = doc.select("li.data").get(1).select("a");
for (int j = 0; j < bb.size(); j++) directors.add(bb.get(j).text());
director = TextUtils.join(",", directors);
Vod vod = new Vod();
vod.setVodId(vid);
vod.setVodName(title);
vod.setVodPic(cover);
vod.setTypeName(category);
vod.setVodYear(year);
vod.setVodArea(area);
vod.setVodRemarks(remark);
vod.setVodActor(actor);
vod.setVodDirector(director);
vod.setVodContent(desc);
Map<String, String> vod_play = new TreeMap<>((o1, o2) -> {
try {
int sort1 = playerConfig.getJSONObject(o1).getInt("or");
int sort2 = playerConfig.getJSONObject(o2).getInt("or");
if (sort1 == sort2) return 1;
return sort1 - sort2 > 0 ? 1 : -1;
} catch (JSONException e) {
SpiderDebug.log(e);
}
return 0;
});
Elements sources = doc.select("div.play_source_tab a");
Elements sourceList = doc.select("div.playlist_full");
for (int i = 0; i < sources.size(); i++) {
Element source = sources.get(i);
String sourceName = source.attr("alt");
sourceName = sourceName.replaceAll("[^\u4E00-\u9FA5]", "");
boolean found = false;
for (Iterator<String> it = playerConfig.keys(); it.hasNext(); ) {
try {
String flag = it.next();
if (playerConfig.getJSONObject(flag).getString("show").equals(sourceName)) {
sourceName = flag;
found = true;
break;
}
} catch (Exception ignored) {
}
}
if (!found) continue;
String playList = "";
Elements playListA = sourceList.get(i).select("ul>li>a");
List<String> vodItems = new ArrayList<>();
for (int j = 0; j < playListA.size(); j++) {
Element element = playListA.get(j);
Matcher matcher = regexPlay.matcher(element.attr("href"));
if (!matcher.find()) continue;
String playURL = matcher.group(1) + "/sid/" + matcher.group(2) + "/nid/" + matcher.group(3);
vodItems.add(element.text() + "$" + playURL + "=" + tid);
}
if (vodItems.size() > 0) playList = TextUtils.join("#", vodItems);
if (playList.length() == 0) continue;
vod_play.put(sourceName, playList);
}
if (vod_play.size() > 0) {
vod.setVodPlayFrom(TextUtils.join("$$$", vod_play.keySet()));
vod.setVodPlayUrl(TextUtils.join("$$$", vod_play.values()));
}
return Result.string(vod);
}
@Override
public String playerContent(String flag, String id, List<String> vipFlags) {
try {
String[] idd = id.split("=");
String tid = idd[1];
String detail = idd[0];
String url = siteUrl + "/vod/play/id/" + detail + ".html";
String htmltemp = OkHttpUtil.string(url, getHeaders());
String htmlsrc = "";
if (tid.equals("1")) {
htmlsrc = htmltemp.substring(0, 25000);
} else {
htmlsrc = htmltemp;
}
Document doc = Jsoup.parse(htmlsrc);
Elements allScript = doc.select("script");
JSONObject result = new JSONObject();
for (int i = 0; i < allScript.size(); i++) {
String scContent = allScript.get(i).toString();
if (scContent.contains("var player_")) { // 取直链
int start = scContent.indexOf('{');
int end = scContent.lastIndexOf('}') + 1;
String json = scContent.substring(start, end);
JSONObject player = new JSONObject(json);
String urlsrc = player.getString("url");
String urlb64 = new String(Base64.decode(urlsrc.getBytes(), Base64.DEFAULT));
String urldec = URLDecoder.decode(urlb64, "UTF-8");
result.put("parse", 0);
result.put("playUrl", "");
result.put("url", urldec);
result.put("header", "");
break;
}
}
String uu = result.getString("url");
if (!(uu.length() > 0)) {
result.put("parse", 1);
result.put("url", url);
}
return result.toString();
} catch (Exception e) {
SpiderDebug.log(e);
return "";
}
}
@Override
public String searchContent(String key, boolean quick) {
String url = siteUrl + "/vod/search.html?wd=" + URLEncoder.encode(key) + "&submit=";
String html = OkHttpUtil.string(url, getHeaders());
Document doc = Jsoup.parse(html);
List<Vod> list = new ArrayList<>();
Elements elements = doc.select("li.searchlist_item");
for (int i = 0; i < elements.size(); i++) {
Element vod = elements.get(i);
String classes = vod.selectFirst("h4.vodlist_title > a >span").text();
String tid = "";
switch (classes) {
case "电影":
tid = "1";
break;
case "电视剧":
tid = "2";
break;
case "综艺":
tid = "3";
break;
case "动漫":
tid = "4";
break;
}
String title = vod.selectFirst("a.vodlist_thumb").attr("title");
String cover = siteUrl + vod.selectFirst("a.vodlist_thumb").attr("data-original");
String remark = vod.select("span.pic_text").text();
Matcher matcher = regexVid.matcher(vod.selectFirst("a.vodlist_thumb").attr("href"));
if (!matcher.find()) continue;
String id = tid + "=" + matcher.group(1);
list.add(new Vod(id, title, cover, remark));
}
return Result.string(list);
}
}

View File

@ -1,375 +0,0 @@
package com.github.catvod.spider.wait;
import android.text.TextUtils;
import com.github.catvod.crawler.Spider;
import com.github.catvod.crawler.SpiderDebug;
import com.github.catvod.net.OkHttpUtil;
import org.json.JSONArray;
import org.json.JSONObject;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
/**
* @author 不知名
*/
public class Yj1211 extends Spider {
@Override
public String homeContent(boolean filter) {
try {
String srcurl = "http://live.yj1211.work/api/live/getRecommend?page=1&size=20";
String srcOrignstr = "";
for (int i = 0; i < 3; i++) {
srcOrignstr = OkHttpUtil.string(srcurl, getHeaders());
if (srcOrignstr.length() > 0) {
break;
} else {
Thread.sleep(1000);
}
}
JSONObject srcori = new JSONObject(srcOrignstr);
JSONArray srcoria = srcori.getJSONArray("data");
JSONObject result = new JSONObject();
JSONArray classes = new JSONArray();
String catestr = "{\"推荐\":\"?\",\"斗鱼\":\"ByPlatform?platform=douyu&\",\"哔哩哔哩\":\"ByPlatform?platform=bilibili&\",\"虎牙\":\"ByPlatform?platform=huya&\",\"网易CC\":\"ByPlatform?platform=cc&\"}";
JSONObject catedef = new JSONObject(catestr);
Iterator<String> it = catedef.keys();
while (it.hasNext()) {
JSONObject jsonObject = new JSONObject();
String key = (String) it.next();
jsonObject.put("type_name", key);
jsonObject.put("type_id", catedef.getString(key));
classes.put(jsonObject);
}
result.put("class", classes);
JSONObject filterConfig = new JSONObject();
String geta = "http://live.yj1211.work/api/live/getAllAreas";
String aaid = "";
for (int i = 0; i < 3; i++) {
aaid = OkHttpUtil.string(geta, getHeaders());
if (aaid.length() > 0) {
break;
} else {
Thread.sleep(1000);
}
}
JSONObject aido = new JSONObject(aaid);
JSONArray aidoa = aido.getJSONArray("data");
JSONArray extendsAll = new JSONArray();
for (int j = 0; j < 13; j++) {
JSONObject newTypeExtend = new JSONObject();
String typeName = aidoa.getJSONArray(j).getJSONObject(0).getString("typeName");
newTypeExtend.put("key", "typeName" + j);
newTypeExtend.put("name", typeName);
JSONArray newTypeExtendKV = new JSONArray();
int fg = Math.min(aidoa.getJSONArray(j).length(), 20);
JSONObject kv = new JSONObject();
kv.put("n", "全部");
kv.put("v", typeName + "=" + "all");
newTypeExtendKV.put(kv);
for (int k = 0; k < fg; k++) {
kv = new JSONObject();
String areaName = aidoa.getJSONArray(j).getJSONObject(k).getString("areaName");
kv.put("n", areaName);
kv.put("v", typeName + "=" + areaName);
newTypeExtendKV.put(kv);
}
newTypeExtend.put("value", newTypeExtendKV);
extendsAll.put(newTypeExtend);
}
for (int i = 0; i < 5; i++) {
String typeId = classes.getJSONObject(i).getString("type_id");
filterConfig.put(typeId, extendsAll);
}
JSONArray videos = new JSONArray();
int ch = Math.min(srcoria.length(), 10);
for (int i = 0; i < ch; i++) {
JSONObject srchome = new JSONObject();
String platForm = srcoria.getJSONObject(i).getString("platForm");
String rd = srcoria.getJSONObject(i).getString("roomId");
String id = platForm + "&" + rd;
String name = srcoria.getJSONObject(i).getString("ownerName");
String pic = srcoria.getJSONObject(i).getString("ownerHeadPic");
String mark = srcoria.getJSONObject(i).getString("categoryName");
srchome.put("vod_id", id);
srchome.put("vod_name", name);
srchome.put("vod_pic", pic);
srchome.put("vod_remarks", mark);
videos.put(srchome);
}
if (filter) {
result.put("filters", filterConfig);
}
result.put("list", videos);
return result.toString();
} catch (
Exception e) {
SpiderDebug.log(e);
}
return "";
}
@Override
public String categoryContent(String tid, String pg, boolean filter, HashMap<String, String> extend) {
try {
String catt = "";
switch (tid) {
case "?":
catt = "all";
break;
case "ByPlatform?platform=douyu&":
catt = "douyu";
break;
case "ByPlatform?platform=bilibili&":
catt = "bilibili";
break;
case "ByPlatform?platform=huya&":
catt = "huya";
break;
case "ByPlatform?platform=cc&":
catt = "cc";
break;
}
extend = extend == null ? new HashMap<>() : extend;
String srcurl = "";
String[] cate = new String[13];
int pp = 0;
for (int i = 0; i < 13; i++) {
cate[i] = extend.containsKey("typeName" + i) ? extend.get("typeName" + i) : ("typeName" + i + "=" + "all");
String[] info = cate[i].split("=");
String area = info[1];
if (!area.contains("all")) {
pp = pp + 1;
}
}
if (pp == 1) {
for (int i = 0; i < 13; i++) {
String[] info = cate[i].split("=");
String areaType = info[0];
String area = info[1];
if (!area.contains("all")) {
String urlft = "http://live.yj1211.work/api/live/getRecommendByAreaAll?areaType={areaType}&area={area}&page={pg}";
srcurl = urlft.replace("{areaType}", URLEncoder.encode(areaType)).replace("{area}", URLEncoder.encode(area)).replace("{pg}", pg);
break;
}
}
} else if (pp == 0 || pp > 1) {
String urlft = "http://live.yj1211.work/api/live/getRecommend{tid}page={pg}&size=20";
srcurl = urlft.replace("{tid}", tid).replace("{pg}", pg);
}
String srcOrignstr = "";
for (int i = 0; i < 3; i++) {
srcOrignstr = OkHttpUtil.string(srcurl, getHeaders());
if (srcOrignstr.length() > 0) {
break;
} else {
Thread.sleep(1000);
}
}
JSONObject srcori = new JSONObject(srcOrignstr);
JSONArray srcoria = srcori.getJSONArray("data");
JSONObject result = new JSONObject();
JSONArray videos = new JSONArray();
for (int i = 0; i < srcoria.length(); i++) {
JSONObject srchome = new JSONObject();
String platForm = srcoria.getJSONObject(i).getString("platForm");
if (pp == 1 && !catt.equals("all")) {
if (!platForm.equals(catt)) {
continue;
}
}
String rd = srcoria.getJSONObject(i).getString("roomId");
String id = platForm + "&" + rd;
String name = srcoria.getJSONObject(i).getString("ownerName");
String pic = srcoria.getJSONObject(i).getString("ownerHeadPic");
String mark = srcoria.getJSONObject(i).getString("categoryName");
srchome.put("vod_id", id);
srchome.put("vod_name", name);
srchome.put("vod_pic", pic);
srchome.put("vod_remarks", mark);
videos.put(srchome);
}
if (videos.length() == 0) {
JSONObject srchome = new JSONObject();
srchome.put("vod_id", 111);
srchome.put("vod_name", "此页无符合");
srchome.put("vod_pic", "");
srchome.put("vod_remarks", "nothing");
videos.put(srchome);
}
if (pp == 1) {
result.put("pagecount", 50);
result.put("limit", 1);
} else {
result.put("pagecount", Integer.MAX_VALUE);
result.put("limit", 90);
}
result.put("list", videos);
result.put("page", pg);
result.put("total", Integer.MAX_VALUE);
return result.toString();
} catch (Exception e) {
SpiderDebug.log(e);
return "";
}
}
private HashMap<String, String> getHeaders() {
HashMap<String, String> headers = new HashMap<>();
headers.put("User-Agent", "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.134 YaBrowser/22.7.1.755 (beta) Yowser/2.5 Safari/537.36");
return headers;
}
@Override
public String detailContent(List<String> ids) {
try {
String id = ids.get(0);
String[] info = id.split("&");
String platform = info[0];
String roomId = info[1];
String srcurl = "http://live.yj1211.work/api/live/getRoomInfo?platform=" + platform + "&roomId=" + roomId;
String srcplayurl = "http://live.yj1211.work/api/live/getRealUrl?platform=" + platform + "&roomId=" + roomId;
String srcdtlstr = OkHttpUtil.string(srcurl, getHeaders());
String srcdtlplay = OkHttpUtil.string(srcplayurl, getHeaders());
JSONObject srcdtl = new JSONObject(srcdtlstr);
JSONObject srcdtlo = srcdtl.getJSONObject("data");
JSONObject srcdtplay = new JSONObject(srcdtlplay);
JSONObject srcdtplayo = srcdtplay.getJSONObject("data");
String title = srcdtlo.getString("roomName");
String pic = srcdtlo.getString("roomPic");
String director = srcdtlo.getString("ownerName") + " RoomID:" + srcdtlo.getString("roomId");
String content = srcdtlo.getString("categoryName");
String actor = "观看人数:" + srcdtlo.getString("online");
String area = srcdtlo.getString("platForm");
String typechk = srcdtlo.optString("isLive");
String type = typechk.equals("") ? "录播" : "正在直播中";
JSONObject result = new JSONObject();
JSONObject vodList = new JSONObject();
vodList.put("vod_id", ids.get(0));
vodList.put("vod_pic", pic);
vodList.put("vod_name", title);
vodList.put("vod_area", area);
vodList.put("type_name", type);
vodList.put("vod_actor", actor);
vodList.put("vod_director", director);
vodList.put("vod_content", content);
String playList = "";
String pl = "";
List<String> vodItems = new ArrayList<>();
for (int i = 0; i < 5; i++) {
String[] qq = new String[]{"OD", "HD", "SD", "LD", "FD"};
String qa = srcdtplayo.optString(qq[i]);
if (qa.isEmpty()) {
continue;
}
switch (qq[i]) {
case "OD":
pl = "原画" + "$" + qa;
break;
case "HD":
pl = "超清" + "$" + qa;
break;
case "SD":
pl = "高清" + "$" + qa;
break;
case "LD":
pl = "清晣" + "$" + qa;
break;
case "FD":
pl = "流畅" + "$" + qa;
break;
}
vodItems.add(pl);
}
if (vodItems.size() > 0)
playList = TextUtils.join("#", vodItems);
if (playList.length() == 0)
playList = "NoStream$nolink";
Map<String, String> vod_play = new TreeMap<>();
vod_play.put("YJ1211", playList);
String vod_play_from = TextUtils.join("$$$", vod_play.keySet());
String vod_play_url = TextUtils.join("$$$", vod_play.values());
vodList.put("vod_play_from", vod_play_from);
vodList.put("vod_play_url", vod_play_url);
JSONArray list = new JSONArray();
list.put(vodList);
result.put("list", list);
return result.toString();
} catch (Exception e) {
SpiderDebug.log(e);
return "";
}
}
@Override
public String playerContent(String flag, String id, List<String> vipFlags) {
try {
JSONObject result = new JSONObject();
result.put("header", getHeaders());
result.put("parse", 1);
result.put("playUrl", "");
result.put("url", id);
return result.toString();
} catch (Exception e) {
SpiderDebug.log(e);
return "";
}
}
@Override
public String searchContent(String key, boolean quick) {
try {
String url = "http://live.yj1211.work/api/live/search?platform=all&keyWords=" + URLEncoder.encode(key) + "&isLive=0";
String content = "";
for (int i = 0; i < 3; i++) {
content = OkHttpUtil.string(url, getHeaders());
if (content.length() > 0) {
break;
} else {
Thread.sleep(1000);
}
}
JSONObject searchResult = new JSONObject(content);
JSONArray sra = searchResult.getJSONArray("data");
JSONObject result = new JSONObject();
JSONArray videos = new JSONArray();
if (sra.length() > 0) {
int ch = Math.min(sra.length(), 20);
for (int i = 0; i < ch; i++) {
JSONObject srat = new JSONObject();
String platForm = sra.getJSONObject(i).getString("platform");
String rd = sra.getJSONObject(i).getString("roomId");
String id = platForm + "&" + rd;
String name = sra.getJSONObject(i).getString("nickName");
String pic = sra.getJSONObject(i).getString("headPic");
String mark = "";
if (!sra.getJSONObject(i).isNull("cateName")) {
mark = sra.getJSONObject(i).getString("cateName");
}
srat.put("vod_remarks", mark);
srat.put("vod_id", id);
srat.put("vod_name", name);
srat.put("vod_pic", pic);
videos.put(srat);
}
}
result.put("list", videos);
return result.toString();
} catch (Exception e) {
SpiderDebug.log(e);
return "";
}
}
}

Binary file not shown.

View File

@ -1 +1 @@
8099b863f81113740c24c05d7feb3851 83309fc06ded7cbe68738abebbbca4fe