Add files via upload

This commit is contained in:
dlgt7
2022-10-07 23:39:25 +08:00
committed by GitHub
parent a5d2e8f43e
commit 5fafcdab0a
10 changed files with 3006 additions and 0 deletions
+187
View File
@@ -0,0 +1,187 @@
package com.github.catvod.spider;
import android.content.Context;
import com.github.catvod.crawler.Spider;
import com.github.catvod.utils.okhttp.OKCallBack;
import com.github.catvod.utils.okhttp.OkHttpUtil;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import org.json.JSONArray;
import org.json.JSONObject;
import okhttp3.Call;
public class Alist extends Spider {
private String ext;
public String categoryContent(String tid, String pg, boolean filter, HashMap<String, String> hashMap) {
try {
String url = this.ext + "/api/public/path";
JSONObject params = new JSONObject();
params.put("path", tid);
JSONArray jSONArray2 = new JSONArray();
OkHttpUtil.postJson(OkHttpUtil.defaultClient(), url, params.toString(), new OKCallBack.OKCallBackString() {
@Override
protected void onFailure(Call call, Exception e) {
}
@Override
protected void onResponse(String response) {
try {
JSONObject retval = new JSONObject(response);
JSONArray list = retval.getJSONObject("data").getJSONArray("files");
for (int i =0; i < list.length(); ++i){
JSONObject o = list.getJSONObject(i);
String pic = o.getString("thumbnail");
if(pic.isEmpty()){
pic = "http://img1.3png.com/281e284a670865a71d91515866552b5f172b.png";
}
JSONObject jSONObject2 = new JSONObject();
jSONObject2.put("vod_id", tid + (tid.charAt(tid.length()-1) == '/' ? "" : "/") + o.getString("name"));
jSONObject2.put("vod_name", o.getString("name"));
jSONObject2.put("vod_pic", pic);
jSONObject2.put("vod_tag",o.getInt("type")==1 ? "folder" : "file" );
jSONObject2.put("vod_remarks", o.getInt("type")==1 ? "文件夹" : "文件");
jSONArray2.put(jSONObject2);
}
}catch (Exception e){
e.printStackTrace();
}
}
});
JSONObject jSONObject3 = new JSONObject();
jSONObject3.put("page", 1);
jSONObject3.put("pagecount", 1);
jSONObject3.put("limit", jSONArray2.length());
jSONObject3.put("total", jSONArray2.length());
jSONObject3.put("list", jSONArray2);
return jSONObject3.toString();
} catch (Exception e) {
e.printStackTrace();
return "";
}
}
public String detailContent(List<String> ids) {
try
{
String filename = ids.get(0);
String url = this.ext + "/api/public/path";
JSONObject params = new JSONObject();
params.put("path", filename);
JSONObject result = new JSONObject();
JSONArray list = new JSONArray();
OkHttpUtil.postJson(OkHttpUtil.defaultClient(), url, params.toString(), new OKCallBack.OKCallBackString() {
@Override
protected void onFailure(Call call, Exception e) {
}
@Override
protected void onResponse(String response) {
try {
JSONObject retval = new JSONObject(response);
JSONArray files = retval.getJSONObject("data").getJSONArray("files");
for (int i =0; i < files.length(); ++i){
JSONObject o = files.getJSONObject(i);
String url = o.getString("url");
if(url.indexOf("//") ==0){
url = "http:"+url;
}
JSONObject jSONObject2 = new JSONObject();
jSONObject2.put("vod_id", filename + "/" + o.getString("name"));
jSONObject2.put("vod_name", o.getString("name"));
jSONObject2.put("vod_pic", o.getString("thumbnail"));
jSONObject2.put("vod_tag",o.getInt("type")==1 ? "folder" : "file" );
jSONObject2.put("vod_play_from", "播放");
jSONObject2.put("vod_play_url", o.getString("name")+"$"+url);
list.put(jSONObject2);
}
}catch (Exception e){
e.printStackTrace();
}
}
});
result.put("list", list);
return result.toString();
}
catch (Exception e){
e.printStackTrace();
}
return "";
}
String fileTime(long time, String fmt) {
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(time);
Date date = calendar.getTime();
SimpleDateFormat sdf = new SimpleDateFormat(fmt);
return sdf.format(date);
}
public String homeContent(boolean z) {
try {
JSONArray classes = new JSONArray();
JSONObject newCls = new JSONObject();
newCls.put("type_id", "/");
newCls.put("type_name", "Alist");
newCls.put("type_flag", "1"); // 1 列表形式的文件夹 2 缩略图 0 或者不存在 表示正常
classes.put(newCls);
JSONArray jSONArray3 = new JSONArray();
JSONObject jSONObject4 = new JSONObject();
jSONObject4.put("class", classes);
if(z) {
jSONObject4.put("filters", new JSONObject("{}"));
}
return jSONObject4.toString();
} catch (Exception e) {
e.printStackTrace();
return "";
}
}
public void init(Context context, String ext){
Alist.super.init(context);
this.ext = ext;
}
public String playerContent(String str, String str2, List<String> list) {
try{
JSONObject result = new JSONObject();
result.put("parse", 0);
result.put("playUrl", "");
result.put("url", str2);
return result.toString();
}catch (Exception e){
e.printStackTrace();
}
return "";
}
public String searchContent(String str, boolean z) {
try {
return "";
} catch (Exception e) {
e.printStackTrace();
return "";
}
}
}
@@ -0,0 +1,604 @@
package com.github.catvod.spider;
import android.annotation.TargetApi;
import android.content.Context;
import android.os.Build;
import android.text.TextUtils;
import android.util.Base64;
import java.io.InputStream;
import java.io.ByteArrayOutputStream;
import com.github.catvod.crawler.Spider;
import com.github.catvod.crawler.SpiderDebug;
import com.github.catvod.utils.Misc;
import com.github.catvod.utils.gZip;
import com.github.catvod.utils.okhttp.OKCallBack;
import com.github.catvod.utils.okhttp.OkHttpUtil;
import org.json.JSONArray;
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.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.TreeMap;
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import okhttp3.Call;
import okhttp3.Response;
public class Bdys01 extends Spider {
private static final String siteUrl = "https://www.bdys01.com";
private static final String siteHost = "www.bdys01.com";
private String cookie="";
private String referer="";
private String rspurl="";
/**
* 筛选配置
*/
private JSONObject filterConfig;
@Override
public void init(Context context) {
super.init(context);
try {
filterConfig = new JSONObject("{\"0\":[{\"key\":\"s\",\"name\":\"类型\",\"value\":[{\"n\":\"全部\",\"v\":\"all\"},{\"n\":\"动作\",\"v\":\"dongzuo\"},{\"n\":\"爱情\",\"v\":\"aiqing\"},{\"n\":\"喜剧\",\"v\":\"xiju\"},{\"n\":\"科幻\",\"v\":\"kehuan\"},{\"n\":\"恐怖\",\"v\":\"kongbu\"},{\"n\":\"战争\",\"v\":\"zhanzheng\"},{\"n\":\"武侠\",\"v\":\"wuxia\"},{\"n\":\"魔幻\",\"v\":\"mohuan\"},{\"n\":\"剧情\",\"v\":\"juqing\"},{\"n\":\"动画\",\"v\":\"donghua\"},{\"n\":\"惊悚\",\"v\":\"jingsong\"},{\"n\":\"3D\",\"v\":\"3D\"},{\"n\":\"灾难\",\"v\":\"zainan\"},{\"n\":\"悬疑\",\"v\":\"xuanyi\"},{\"n\":\"警匪\",\"v\":\"jingfei\"},{\"n\":\"文艺\",\"v\":\"wenyi\"},{\"n\":\"青春\",\"v\":\"qingchun\"},{\"n\":\"冒险\",\"v\":\"maoxian\"},{\"n\":\"犯罪\",\"v\":\"fanzui\"},{\"n\":\"纪录\",\"v\":\"jilu\"},{\"n\":\"古装\",\"v\":\"guzhuang\"},{\"n\":\"奇幻\",\"v\":\"qihuan\"},{\"n\":\"国语\",\"v\":\"guoyu\"},{\"n\":\"综艺\",\"v\":\"zongyi\"},{\"n\":\"历史\",\"v\":\"lishi\"},{\"n\":\"运动\",\"v\":\"yundong\"},{\"n\":\"原创压制\",\"v\":\"yuanchuang\"},{\"n\":\"美剧\",\"v\":\"meiju\"},{\"n\":\"韩剧\",\"v\":\"hanju\"},{\"n\":\"国产电视剧\",\"v\":\"guoju\"},{\"n\":\"日剧\",\"v\":\"riju\"},{\"n\":\"英剧\",\"v\":\"yingju\"},{\"n\":\"德剧\",\"v\":\"deju\"},{\"n\":\"俄剧\",\"v\":\"eju\"},{\"n\":\"巴剧\",\"v\":\"baju\"},{\"n\":\"加剧\",\"v\":\"jiaju\"},{\"n\":\"西剧\",\"v\":\"anish\"},{\"n\":\"意大利剧\",\"v\":\"yidaliju\"},{\"n\":\"泰剧\",\"v\":\"taiju\"},{\"n\":\"港台剧\",\"v\":\"gangtaiju\"},{\"n\":\"法剧\",\"v\":\"faju\"},{\"n\":\"澳剧\",\"v\":\"aoju\"}]},{\"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\":\"意大利\"},{\"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\":\"2015\",\"v\":\"2015\"},{\"n\":\"2014\",\"v\":\"2014\"},{\"n\":\"2013\",\"v\":\"2013\"},{\"n\":\"2012\",\"v\":\"2012\"},{\"n\":\"2011\",\"v\":\"2011\"},{\"n\":\"2010\",\"v\":\"2010\"},{\"n\":\"2009\",\"v\":\"2009\"},{\"n\":\"2008\",\"v\":\"2008\"},{\"n\":\"2007\",\"v\":\"2007\"},{\"n\":\"2006\",\"v\":\"2006\"},{\"n\":\"2005\",\"v\":\"2005\"},{\"n\":\"2004\",\"v\":\"2004\"},{\"n\":\"2003\",\"v\":\"2003\"},{\"n\":\"2002\",\"v\":\"2002\"},{\"n\":\"2001\",\"v\":\"2001\"},{\"n\":\"2000\",\"v\":\"2000\"}]},{\"key\":\"order\",\"name\":\"排序\",\"value\":[{\"n\":\"更新时间\",\"v\":\"0\"},{\"n\":\"豆瓣评分\",\"v\":\"1\"}]}],\"1\":[{\"key\":\"s\",\"name\":\"类型\",\"value\":[{\"n\":\"全部\",\"v\":\"all\"},{\"n\":\"动作\",\"v\":\"dongzuo\"},{\"n\":\"爱情\",\"v\":\"aiqing\"},{\"n\":\"喜剧\",\"v\":\"xiju\"},{\"n\":\"科幻\",\"v\":\"kehuan\"},{\"n\":\"恐怖\",\"v\":\"kongbu\"},{\"n\":\"战争\",\"v\":\"zhanzheng\"},{\"n\":\"武侠\",\"v\":\"wuxia\"},{\"n\":\"魔幻\",\"v\":\"mohuan\"},{\"n\":\"剧情\",\"v\":\"juqing\"},{\"n\":\"动画\",\"v\":\"donghua\"},{\"n\":\"惊悚\",\"v\":\"jingsong\"},{\"n\":\"3D\",\"v\":\"3D\"},{\"n\":\"灾难\",\"v\":\"zainan\"},{\"n\":\"悬疑\",\"v\":\"xuanyi\"},{\"n\":\"警匪\",\"v\":\"jingfei\"},{\"n\":\"文艺\",\"v\":\"wenyi\"},{\"n\":\"青春\",\"v\":\"qingchun\"},{\"n\":\"冒险\",\"v\":\"maoxian\"},{\"n\":\"犯罪\",\"v\":\"fanzui\"},{\"n\":\"纪录\",\"v\":\"jilu\"},{\"n\":\"古装\",\"v\":\"guzhuang\"},{\"n\":\"奇幻\",\"v\":\"qihuan\"},{\"n\":\"国语\",\"v\":\"guoyu\"},{\"n\":\"综艺\",\"v\":\"zongyi\"},{\"n\":\"历史\",\"v\":\"lishi\"},{\"n\":\"运动\",\"v\":\"yundong\"},{\"n\":\"原创压制\",\"v\":\"yuanchuang\"},{\"n\":\"美剧\",\"v\":\"meiju\"},{\"n\":\"韩剧\",\"v\":\"hanju\"},{\"n\":\"国产电视剧\",\"v\":\"guoju\"},{\"n\":\"日剧\",\"v\":\"riju\"},{\"n\":\"英剧\",\"v\":\"yingju\"},{\"n\":\"德剧\",\"v\":\"deju\"},{\"n\":\"俄剧\",\"v\":\"eju\"},{\"n\":\"巴剧\",\"v\":\"baju\"},{\"n\":\"加剧\",\"v\":\"jiaju\"},{\"n\":\"西剧\",\"v\":\"anish\"},{\"n\":\"意大利剧\",\"v\":\"yidaliju\"},{\"n\":\"泰剧\",\"v\":\"taiju\"},{\"n\":\"港台剧\",\"v\":\"gangtaiju\"},{\"n\":\"法剧\",\"v\":\"faju\"},{\"n\":\"澳剧\",\"v\":\"aoju\"}]},{\"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\":\"意大利\"},{\"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\":\"2015\",\"v\":\"2015\"},{\"n\":\"2014\",\"v\":\"2014\"},{\"n\":\"2013\",\"v\":\"2013\"},{\"n\":\"2012\",\"v\":\"2012\"},{\"n\":\"2011\",\"v\":\"2011\"},{\"n\":\"2010\",\"v\":\"2010\"},{\"n\":\"2009\",\"v\":\"2009\"},{\"n\":\"2008\",\"v\":\"2008\"},{\"n\":\"2007\",\"v\":\"2007\"},{\"n\":\"2006\",\"v\":\"2006\"},{\"n\":\"2005\",\"v\":\"2005\"},{\"n\":\"2004\",\"v\":\"2004\"},{\"n\":\"2003\",\"v\":\"2003\"},{\"n\":\"2002\",\"v\":\"2002\"},{\"n\":\"2001\",\"v\":\"2001\"},{\"n\":\"2000\",\"v\":\"2000\"}]},{\"key\":\"order\",\"name\":\"排序\",\"value\":[{\"n\":\"更新时间\",\"v\":\"0\"},{\"n\":\"豆瓣评分\",\"v\":\"1\"}]}],\"a\":[{\"key\":\"s\",\"name\":\"类型\",\"value\":[{\"n\":\"全部\",\"v\":\"all\"},{\"n\":\"动作\",\"v\":\"dongzuo\"},{\"n\":\"爱情\",\"v\":\"aiqing\"},{\"n\":\"喜剧\",\"v\":\"xiju\"},{\"n\":\"科幻\",\"v\":\"kehuan\"},{\"n\":\"恐怖\",\"v\":\"kongbu\"},{\"n\":\"战争\",\"v\":\"zhanzheng\"},{\"n\":\"武侠\",\"v\":\"wuxia\"},{\"n\":\"魔幻\",\"v\":\"mohuan\"},{\"n\":\"剧情\",\"v\":\"juqing\"},{\"n\":\"动画\",\"v\":\"donghua\"},{\"n\":\"惊悚\",\"v\":\"jingsong\"},{\"n\":\"3D\",\"v\":\"3D\"},{\"n\":\"灾难\",\"v\":\"zainan\"},{\"n\":\"悬疑\",\"v\":\"xuanyi\"},{\"n\":\"警匪\",\"v\":\"jingfei\"},{\"n\":\"文艺\",\"v\":\"wenyi\"},{\"n\":\"青春\",\"v\":\"qingchun\"},{\"n\":\"冒险\",\"v\":\"maoxian\"},{\"n\":\"犯罪\",\"v\":\"fanzui\"},{\"n\":\"纪录\",\"v\":\"jilu\"},{\"n\":\"古装\",\"v\":\"guzhuang\"},{\"n\":\"奇幻\",\"v\":\"qihuan\"},{\"n\":\"国语\",\"v\":\"guoyu\"},{\"n\":\"综艺\",\"v\":\"zongyi\"},{\"n\":\"历史\",\"v\":\"lishi\"},{\"n\":\"运动\",\"v\":\"yundong\"},{\"n\":\"原创压制\",\"v\":\"yuanchuang\"},{\"n\":\"美剧\",\"v\":\"meiju\"},{\"n\":\"韩剧\",\"v\":\"hanju\"},{\"n\":\"国产电视剧\",\"v\":\"guoju\"},{\"n\":\"日剧\",\"v\":\"riju\"},{\"n\":\"英剧\",\"v\":\"yingju\"},{\"n\":\"德剧\",\"v\":\"deju\"},{\"n\":\"俄剧\",\"v\":\"eju\"},{\"n\":\"巴剧\",\"v\":\"baju\"},{\"n\":\"加剧\",\"v\":\"jiaju\"},{\"n\":\"西剧\",\"v\":\"anish\"},{\"n\":\"意大利剧\",\"v\":\"yidaliju\"},{\"n\":\"泰剧\",\"v\":\"taiju\"},{\"n\":\"港台剧\",\"v\":\"gangtaiju\"},{\"n\":\"法剧\",\"v\":\"faju\"},{\"n\":\"澳剧\",\"v\":\"aoju\"}]},{\"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\":\"意大利\"},{\"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\":\"2015\",\"v\":\"2015\"},{\"n\":\"2014\",\"v\":\"2014\"},{\"n\":\"2013\",\"v\":\"2013\"},{\"n\":\"2012\",\"v\":\"2012\"},{\"n\":\"2011\",\"v\":\"2011\"},{\"n\":\"2010\",\"v\":\"2010\"},{\"n\":\"2009\",\"v\":\"2009\"},{\"n\":\"2008\",\"v\":\"2008\"},{\"n\":\"2007\",\"v\":\"2007\"},{\"n\":\"2006\",\"v\":\"2006\"},{\"n\":\"2005\",\"v\":\"2005\"},{\"n\":\"2004\",\"v\":\"2004\"},{\"n\":\"2003\",\"v\":\"2003\"},{\"n\":\"2002\",\"v\":\"2002\"},{\"n\":\"2001\",\"v\":\"2001\"},{\"n\":\"2000\",\"v\":\"2000\"}]},{\"key\":\"order\",\"name\":\"排序\",\"value\":[{\"n\":\"更新时间\",\"v\":\"0\"},{\"n\":\"豆瓣评分\",\"v\":\"1\"}]}]}");
} catch (JSONException e) {
SpiderDebug.log(e);
}
}
/**
* 爬虫headers
*
* @param url
* @return
*/
protected HashMap<String, String> getHeaders(String url,String ref) {
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");
if(!ref.equals("google")){
headers.put("Authority", "www.bdys01.com");
if(ref.length()>0){
if(ref.equals("origin")){
headers.put("Origin", "https://www.bdys01.com");
} else {
headers.put("Referer", ref);
}
}
if(cookie.length()>0){
headers.put("Cookie", cookie);
}
}
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;
}
protected HashMap<String, String> getHeaders2(String url) {
HashMap<String, String> headers = new HashMap<>();
String ss = url.replace("https://","").split("/")[0];
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("Authority", ss);
headers.put("Origin", "www.bdys01.com");
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;
}
protected void getCookie(){
cookie="";
String cookieurl="https://www.bdys01.com/zzzzz";
Map<String, List<String>> cookies = new HashMap<>();
OkHttpUtil.string(cookieurl,getHeaders(cookieurl,""),cookies);
for( Map.Entry<String, List<String>> entry : cookies.entrySet() ){
if(entry.getKey().equals("set-cookie")){
cookie = "Messi YYDS Forever 8K ;" + TextUtils.join(";",entry.getValue());
break;
}
}
}
/**
* 获取分类数据 + 首页最近更新视频列表数据
*
* @param filter 是否开启筛选 关联的是 软件设置中 首页数据源里的筛选开关
* @return
*/
@Override
public String homeContent(boolean filter) {
try {
getCookie();
Document doc = Jsoup.parse(OkHttpUtil.string(siteUrl, getHeaders(siteUrl,referer)));
referer=siteUrl+"/";
// 分类节点
JSONObject result = new JSONObject();
JSONArray classes = new JSONArray();
String catestr ="{\"全部\": \"a\",\"电影\": \"0\",\"电视剧\": \"1\"}";
JSONObject catedef = new JSONObject(catestr);
Iterator 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);
if (filter) {
result.put("filters", filterConfig);
}
try {
// 取首页推荐视频列表
Element homeList = doc.select("div.row.row-cards").get(0);
Elements list = homeList.select("div.col-4.rows-md-7");
JSONArray videos = new JSONArray();
for (int i = 0; i < list.size(); i++) {
Element vod = list.get(i);
String title = vod.selectFirst("h3.card-title").text();
String cover = vod.selectFirst("img.w-100" ).attr("data-src");
String remark = vod.selectFirst("p.text-muted").text();
String id =vod.selectFirst("a.d-block.cover").attr("href");
JSONObject v = new JSONObject();
v.put("vod_id", id);
v.put("vod_name", title);
v.put("vod_pic", cover);
v.put("vod_remarks", remark);
videos.put(v);
}
result.put("list", videos);
} catch (Exception e) {
SpiderDebug.log(e);
}
return result.toString();
} catch (Exception e) {
SpiderDebug.log(e);
}
return "";
}
/**
* 获取分类信息数据
*
* @param tid 分类id
* @param pg 页数
* @param filter 同homeContent方法中的filter
* @param extend 筛选参数{k:v, k1:v1}
* @return
*/
@Override
public String categoryContent(String tid, String pg, boolean filter, HashMap<String, String> extend) {
try {
String url = siteUrl + "/s/" ;
if (extend != null && extend.size() > 0 ) {
String urlformat= "";
if(tid.equals("a")){
urlformat= url +"{s}/"+ pg +"?&area={area}&year={year}&order={order}";
}else {
urlformat= url +"{s}/"+ pg +"?&type="+tid+"&area={area}&year={year}&order={order}";
}
for (Iterator<String> it = extend.keySet().iterator(); it.hasNext(); ) {
String key = it.next();
String value = extend.get(key);
if (value.length() > 0) {
urlformat=urlformat.replace("{"+key+"}",URLEncoder.encode(value));
}
}
for (int i=0 ;i<4;i++) {
if (urlformat.contains("{s}")) {
urlformat = urlformat.replace("{s}", "all");
} else if (urlformat.contains("{area}")) {
urlformat = urlformat.replace("&area={area}", "");
} else if (urlformat.contains("{year}")) {
urlformat = urlformat.replace("&year={year}", "");
} else if (urlformat.contains("{order}")) {
urlformat = urlformat.replace("{order}", "0");
}
}
url = urlformat;
} else {
if(tid.equals("a")){
url += "all/" + pg + "?&order=0";
}else {
url += "all/" + pg + "?&type=" + tid + "&order=0";
}
}
referer=siteUrl+"/";
String html = OkHttpUtil.string(url, getHeaders(url,referer));
referer = url;
Document doc = Jsoup.parse(html);
JSONObject result = new JSONObject();
JSONArray videos = new JSONArray();
if (!html.contains("没有找到您想要的结果哦")) {
// 取当前分类页的视频列表
Elements list = doc.select("div.col-lg-8");
for (int i = 0; i < list.size(); i++) {
Element vod = list.get(i);
String title = vod.selectFirst("h3.mb-0").text();
String cover = vod.selectFirst("img.w-100").attr("src");
String remark = vod.selectFirst("p.mb-0").text();
String idtt = vod.selectFirst("a.d-block").attr("href");
String id ="";
if(idtt.contains("JSESSIONID")) {
int end = idtt.indexOf(";");
id = idtt.substring(0,end);
}else{
id =idtt;
}
JSONObject v = new JSONObject();
v.put("vod_id", id);
v.put("vod_name", title);
v.put("vod_pic", cover);
v.put("vod_remarks", remark);
videos.put(v);
}
}
int page =Integer.parseInt(pg);
result.put("page", page);
result.put("pagecount", videos.length()== 24 ? page + 1 : page);
result.put("limit", 24);
result.put("total",Integer.MAX_VALUE );
result.put("list", videos);
return result.toString();
} catch (Exception e) {
SpiderDebug.log(e);
}
return "";
}
/**
* 视频详情信息
*
* @param ids 视频id
* @return
*/
@Override
public String detailContent(List<String> ids) {
try {
String url = siteUrl + ids.get(0);
Document doc = Jsoup.parse(OkHttpUtil.string(url, getHeaders(url,referer)));
referer=url;
JSONObject result = new JSONObject();
JSONObject vodList = new JSONObject();
String cover = doc.selectFirst("div.col-md-auto img").attr("src");
String title = doc.selectFirst("h1.d-none.d-md-block").text();
String desc = doc.select("div.card.collapse > div.card-body").text();
String year = doc.select("span.badge.bg-purple-lt").text().replace("更新时间:","").split("-")[0];
String category = "", area = "", remark = "", director = "", actor = "";
Element details = doc.select("div.col.mb-2").get(0);
Elements allp = details.select("p");
for (int i = 0; i < allp.size(); i++) {
Element text = allp.get(i);
String info = text.selectFirst("strong").text();
if (info.equals("类型:")) {
List<String> categorys = new ArrayList<>();
Elements aa = text.select("a");
for (int j = 0; j < aa.size(); j++) {
categorys.add(aa.get(j).text());
}
category ="类型:"+TextUtils.join(",", categorys);
} else if (info.contains("地区")) {
int start= text.text().indexOf("[")+1;
int end = text.text().indexOf("]");
area = text.text().substring(start,end);
} else if (info.contains("豆瓣")) {
remark = "豆瓣:"+text.text();
} else if (info.contains("导演:")) {
director = text.selectFirst("a").text();
} else if (info.contains("主演:")) {
List<String> actors = new ArrayList<>();
Elements aa = text.select("a");
for (int j = 0; j < aa.size(); j++) {
actors.add(aa.get(j).text());
}
actor =TextUtils.join(",", actors);
}
}
String vid = ids.get(0);
vodList.put("vod_id", vid);
vodList.put("vod_name", title);
vodList.put("vod_pic", cover);
vodList.put("type_name", category);
vodList.put("vod_year", year);
vodList.put("vod_area", area);
vodList.put("vod_remarks", remark);
vodList.put("vod_actor", actor);
vodList.put("vod_director", director);
vodList.put("vod_content", desc);
Map<String, String> vod_play = new TreeMap<>();
// 取播放列表数据
Elements playListA = doc.select("a.btn.btn-square");
String sourceName = "播放列表";
String playList = "";
List<String> vodItems = new ArrayList<>();
for (int j = 0; j < playListA.size(); j++) {
Element vod = playListA.get(j);
String idtt = vod.attr("href");
String playURL ="";
if(idtt.contains("JSESSIONID")) {
int end = idtt.indexOf(";");
playURL = idtt.substring(0,end);
}else{
playURL =idtt;
}
vodItems.add(vod.text() + "$" + playURL);
}
if (vodItems.size() > 0)
playList = TextUtils.join("#", vodItems);
vod_play.put(sourceName, playList);
if (vod_play.size() > 0) {
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 "";
}
/**
* 获取视频播放信息
*
* @param flag 播放源
* @param id 视频id
* @param vipFlags 所有可能需要vip解析的源
* @return
*/
@TargetApi(Build.VERSION_CODES.KITKAT)
@Override
public String playerContent(String flag, String id, List<String> vipFlags) {
try {
String url = siteUrl + id ;
String htmlplay = OkHttpUtil.string(url, getHeaders(url,referer));
Document doc = Jsoup.parse(htmlplay);
Elements allScript = doc.select("script");
JSONObject result = new JSONObject();
String pid="";
for (int i = 0; i < allScript.size(); i++) {
String scContent = allScript.get(i).toString();
if (scContent.contains("var pid =")) {
int start = scContent.indexOf("var pid =");
int end = scContent.lastIndexOf("var time") + 1;
String pidtmp = scContent.substring(start, end);
start = pidtmp.indexOf("=")+2;
end = pidtmp.lastIndexOf(";") ;
pid = pidtmp.substring(start, end);
break;
}
}
long t = System.currentTimeMillis();
String key = Misc.MD5(pid+"-"+t, StandardCharsets.UTF_8).substring(0,16);
String sg = encrypt(pid+"-"+t,key);
String geturl = siteUrl+"/lines?t="+t+"&sg="+sg+"&pid="+pid;
String urlsrc = OkHttpUtil.string(geturl, getHeaders(geturl,""));
JSONObject urlsrcobj = new JSONObject(urlsrc);
JSONObject urldb = urlsrcobj.getJSONObject("data");
List <String> urldblist = new ArrayList<>();
if(!urldb.isNull("url3")){
String url3 = urldb.optString("url3");
urldblist.add(url3);
}
if(!urldb.isNull("m3u8")){
String m3u8 = urldb.optString("m3u8").replace("www.bde4.cc","www.bdys01.com");
urldblist.add(m3u8);
}
if(!urldb.isNull("m3u8_2")){
String m3u8_2 =urldb.optString("m3u8_2");
String[] m2=m3u8_2.split(",");
for(int i=0; i< m2.length ;i++){
urldblist.add(m2[i].replace("www.bde4.cc","www.bdys01.com"));
}
}
if(urldblist.isEmpty()){
rspurl="";
t = System.currentTimeMillis();
key = Misc.MD5(pid+"-"+t, StandardCharsets.UTF_8).substring(0,16);
sg = encrypt(pid+"-"+t,key);
geturl = siteUrl+"/god/"+pid;
HashMap<String, String> hashMap = new HashMap();
hashMap.put("t", Long.toString(t));
hashMap.put("sg", sg);
hashMap.put("verifyCode", "666");
OkHttpUtil.post(OkHttpUtil.defaultClient(), geturl, hashMap,getHeaders(geturl,"origin") ,new OKCallBack.OKCallBackString() {
@Override
protected void onFailure(Call call, Exception exc) {
}
public void onResponse(String str) {
try {
JSONObject rspobj = new JSONObject(str);
if(rspobj.isNull("url")){
rspurl="";
}else {
rspurl = rspobj.getString("url");
}
} catch (JSONException e) {
e.printStackTrace();
}
}
});
if(rspurl.isEmpty()){
t = System.currentTimeMillis();
key = Misc.MD5(pid+"-"+t, StandardCharsets.UTF_8).substring(0,16);
sg = encrypt(pid+"-"+t,key);
geturl = siteUrl+"/god/"+pid+"?type=1";
HashMap<String, String> hashMap2 = new HashMap();
hashMap2.put("t", Long.toString(t));
hashMap2.put("sg", sg);
hashMap2.put("verifyCode", "888");
OkHttpUtil.post(OkHttpUtil.defaultClient(), geturl, hashMap2,getHeaders(geturl,"origin") ,new OKCallBack.OKCallBackString() {
@Override
protected void onFailure(Call call, Exception exc) {
}
public void onResponse(String str) {
try {
rspurl = new JSONObject(str).getString("url");
} catch (JSONException e) {
e.printStackTrace();
}
}
});
}
String realurl ="";
if(rspurl.contains("rkey")){
t = System.currentTimeMillis();
realurl =rspurl.replace("?rkey",t+".mp4?ver=6010&rkey");
}else if (rspurl.contains("ixigua")) {
realurl = rspurl;
}else{
t = System.currentTimeMillis();
realurl = rspurl.replace("http:","https:") +"/"+t+".mp4";
}
result.put("parse", 0);
result.put("playUrl", "");
result.put("url", realurl);
result.put("header", "");
return result.toString();
}
int index =new Random().nextInt(urldblist.size());
String videourl = urldblist.get(index);
if(videourl.contains("mp4")){
result.put("parse", 0);
result.put("playUrl", "");
result.put("url", videourl);
result.put("header", "");
return result.toString();
}
Map<String, List<String>> respHeaders = new HashMap<>();
OkHttpUtil.stringNoRedirect(videourl, getHeaders(videourl,""), respHeaders);
String redirect = OkHttpUtil.getRedirectLocation(respHeaders);
String realm3u8="";
OKCallBack.OKCallBackDefault callBack = new OKCallBack.OKCallBackDefault() {
@Override
protected void onFailure(Call call, Exception e) {
}
@Override
protected void onResponse(Response response) {
}
};
OkHttpUtil.get(OkHttpUtil.defaultClient(), redirect, null, getHeaders2(redirect), callBack);
if (callBack.getResult().code() == 200) {
InputStream picsrc = callBack.getResult().body().byteStream();
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
int nRead;
byte[] data = new byte[4];
while ((nRead = picsrc.read(data, 0, data.length)) != -1) {
buffer.write(data, 0, nRead);
}
buffer.flush();
byte[] targetArray = buffer.toByteArray();
picsrc.close();
byte[] dep = Arrays.copyOfRange(targetArray,3354,targetArray.length);
String pp = gZip.KS(dep);
String[] m3u8ori = pp.split("\n");
for(int i=0;i<m3u8ori.length;i++){
String mt= m3u8ori[i];
if(mt.contains(".ts")){
mt="https://vod.bdys.me/"+mt;
m3u8ori[i]=mt;
}
}
realm3u8= TextUtils.join("\n",m3u8ori);
}
String realm3u8b64=Base64.encodeToString(realm3u8.getBytes(), 2);
result.put("url", "data:application/vnd.apple.mpegurl;base64,"+realm3u8b64);
result.put("parse", 0);
result.put("playUrl", "");
result.put("header", new JSONObject(getHeaders2("https://vod.bdys.me/")).toString());
return result.toString();
} catch (Exception e) {
SpiderDebug.log(e);
}
return "";
}
@Override
public String searchContent(String key, boolean quick) {
try {
String url = "https://www.google.com/search?q=site%3A" + siteHost + "+" + URLEncoder.encode(key);
Document doc = Jsoup.parse(OkHttpUtil.string(url,getHeaders(url,"google")));
JSONObject result = new JSONObject();
JSONArray videos = new JSONArray();
Elements sourceList = doc.select("div.yuRUbf a");
if(sourceList.size()>0){
for (int i = 0; i < 1; i++) {
Element sourcess = sourceList.get(i);
String sourceName = sourcess.select("h3.LC20lb.MBeuO.DKV0Md").text();
String list1 = sourcess.attr("href");
if(list1.contains("/s/")||list1.contains("play")||list1.contains("performer")||list1.contains("search")||list1.contains("jsessionid")){
continue;
}
if (sourceName.contains(key)) {
Document ddrklink = Jsoup.parse(OkHttpUtil.string(list1, getHeaders(list1,referer)));
JSONObject v = new JSONObject();
String cover = ddrklink.selectFirst("div.col-md-auto img").attr("src");
String title = ddrklink.selectFirst("h2.d-sm-block.d-md-none").text();
String id =list1.replace("https://www.bdys01.com","");
v.put("vod_name", title);
v.put("vod_remarks", "");
v.put("vod_id", id);
v.put("vod_pic", cover);
videos.put(v);
}
}
result.put("list", videos);
return result.toString();
}
} catch (Exception e) {
SpiderDebug.log(e);
}
return "";
}
protected String encrypt(String src, String KEY) {
try {
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS7Padding");
SecretKeySpec keySpec = new SecretKeySpec(KEY.getBytes(), "AES");
cipher.init(Cipher.ENCRYPT_MODE, keySpec);
return bytesToHexStr(cipher.doFinal(src.getBytes())).toUpperCase();
} catch (Exception exception) {
SpiderDebug.log(exception);
}
return null;
}
protected String bytesToHexStr(byte[] bytes) {
StringBuilder hexStr = new StringBuilder();
for (byte b : bytes) {
String hex = Integer.toHexString(b & 0xFF);
if (hex.length() == 1) {
hex = '0' + hex;
}
hexStr.append(hex);
}
return hexStr.toString();
}
}
+386
View File
@@ -0,0 +1,386 @@
package com.github.catvod.spider;
import android.text.TextUtils;
import android.util.Base64;
import com.github.catvod.crawler.Spider;
import com.github.catvod.crawler.SpiderDebug;
import com.github.catvod.utils.CBC;
import com.github.catvod.utils.okhttp.OkHttpUtil;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.TreeMap;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
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;
/* loaded from: classes.dElements */
public class Bttwoo extends Spider {
private final String O = "{}";
private final Pattern G = Pattern.compile("https://www.bttwoo.com/(\\S+)");
private final Pattern n = Pattern.compile("https://www.bttwoo.com/movie/(\\d+).html");
private final Pattern Ur = Pattern.compile("https://www.bttwoo.com/v_play/(\\S+).html");
private final Pattern eA = Pattern.compile("https://www.bttwoo.com/\\S+/page/(\\d+)");
private final Pattern o = Pattern.compile("=\"(.*?)\";var");
private final Pattern F = Pattern.compile("parse\\(\"(.*?)\"\\);var iv");
private final Pattern Cp = Pattern.compile("iv=md5\\.enc\\.Utf8\\.parse\\((.*?)\\);var decrypted");
private final Pattern JC = Pattern.compile("url: \"(.*?)\"");
protected HashMap<String, String> header(String str) {
HashMap<String, String> hashMap = new HashMap<>();
hashMap.put("method", "GET");
if (!TextUtils.isEmpty(str)) {
hashMap.put("Referer", str);
}
hashMap.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");
return hashMap;
}
public String categoryContent(String str, String str2, boolean z, HashMap<String, String> hashMap) {
int i;
try {
String str3 = "https://www.bttwoo.com/" + str + "/page/" + str2;
String h = OkHttpUtil.string(str3, header(str3));
Document ue = Jsoup.parse(h);
JSONObject jSONObject = new JSONObject();
Matcher matcher = this.eA.matcher(ue.select("div.pagenavi_txt > a.extend").attr("href"));
int i2 = 1;
int parseInt = matcher.find() ? Integer.parseInt(matcher.group(1).trim()) : 1;
Elements B1 = ue.select("div.pagenavi_txt > a ");
int i3 = 0;
if (B1.size() > 0) {
i = Integer.parseInt(str2);
for (int i4 = 0; i4 < B1.size(); i4++) {
Element O = B1.get(i4).selectFirst("a");
if (O != null) {
O.text().trim();
if (O.hasClass("current")) {
Matcher matcher2 = this.eA.matcher(O.attr("href"));
if (matcher2.find()) {
i = Integer.parseInt(matcher2.group(1).trim());
}
}
}
}
} else {
i = 1;
// i = Integer.parseInt(str2);
}
JSONArray jSONArray = new JSONArray();
if (!h.contains("没有找到您想要的结果哦")) {
Elements B12 = ue.select("div.bt_img > ul > li");
while (i3 < B12.size()) {
Element hq = B12.get(i3);
String pE = hq.selectFirst("h3.dytit > a").text();
String Pd = hq.selectFirst("a > img ").attr("data-original");
Element O2 = hq.selectFirst("div.jidi > span");
String pE2 = O2 != null ? O2.text() : "";
Matcher matcher3 = this.n.matcher(hq.selectFirst("h3.dytit > a").attr("href"));
if (matcher3.find()) {
String group = matcher3.group(i2);
JSONObject jSONObject2 = new JSONObject();
jSONObject2.put("vod_id", group);
jSONObject2.put("vod_name", pE);
jSONObject2.put("vod_pic", Pd);
jSONObject2.put("vod_remarks", pE2);
jSONArray.put(jSONObject2);
}
i3++;
i2 = 1;
}
}
System.out.println("page: "+i);
jSONObject.put("page", i);
jSONObject.put("pagecount", parseInt);
jSONObject.put("limit", 25);
jSONObject.put("total", parseInt <= 1 ? jSONArray.length() : parseInt * 25);
jSONObject.put("list", jSONArray);
return jSONObject.toString();
} catch (Exception e) {
SpiderDebug.log(e);
return "";
}
}
public String detailContent(List<String> list) {
String str ="";
Exception e;
Document ue = null;
JSONObject jSONObject = null;
String Pd = "";
String pE = "";
String pE2 ="";
Elements B1 = null;
String str2 =" ";
String str3 = "";
String str4 = "";
String str5 = "";
String str6 = "";
String str7 = "";
int i = 0;
Element hq = null;
String str8;
String str9 = "$$$";
String str10 = "";
try {
String str11 = "https://www.bttwoo.com/movie/" + list.get(0) + ".html";
ue = Jsoup.parse(OkHttpUtil.string(str11, header(str11)));
jSONObject = new JSONObject();
Pd = ue.selectFirst("div.dyimg > img").attr("src");
pE = ue.selectFirst("div.moviedteail_tt > h1").text();
pE2 = Jsoup.parse(ue.selectFirst("meta[name=description]").attr("content")).text();
B1 = ue.select("ul.moviedteail_list > li");
str2 = str10;
str3 = str2;
str4 = str3;
str5 = str4;
str6 = str5;
str7 = str6;
// i = 0;
} catch (Exception e2) {
e = e2;
str = str10;
return "1111";
}
while (true) {
str = str10;
if (i >= B1.size()) {
break;
}
try {
Element hq2 = B1.get(i);
Elements exVar = B1;
String pE3 = hq2.text();
JSONObject jSONObject3 = jSONObject;
if (pE3.contains("类型:")) {
str2 = hq2.text();
} else if (pE3.contains("年份:")) {
str3 = hq2.text();
} else if (pE3.contains("地区:")) {
str4 = hq2.text();
} else if (pE3.contains("上映:")) {
str5 = hq2.text();
} else {
str8 = str9;
if (pE3.contains("导演:")) {
ArrayList arrayList = new ArrayList();
Elements B12 = hq2.select("a");
for (int i2 = 0; i2 < B12.size(); i2++) {
arrayList.add(B12.get(i2).text());
}
str7 = TextUtils.join(",", arrayList);
} else if (pE3.contains("主演:")) {
ArrayList arrayList2 = new ArrayList();
Elements B13 = hq2.select("a");
for (int i3 = 0; i3 < B13.size(); i3++) {
arrayList2.add(B13.get(i3).text());
}
str6 = TextUtils.join(",", arrayList2);
}
}
str8 = str9;
i++;
str10 = str;
B1 = exVar;
jSONObject = jSONObject3;
str9 = str8;
} catch (Exception e3) {
e = e3;
SpiderDebug.log(e);
return str;
}
}
String str12 = str9;
JSONObject jSONObject4 = jSONObject;
JSONObject jSONObject2 = new JSONObject();
try{
jSONObject2.put("vod_id", list.get(0));
jSONObject2.put("vod_name", pE);
jSONObject2.put("vod_pic", Pd);
jSONObject2.put("type_name", str2);
jSONObject2.put("vod_year", str3);
jSONObject2.put("vod_area", str4);
jSONObject2.put("vod_remarks", str5);
jSONObject2.put("vod_actor", str6);
jSONObject2.put("vod_director", str7);
jSONObject2.put("vod_content", pE2);
TreeMap treeMap = new TreeMap();
Elements B14 = ue.select("div.mi_paly_box > div > div.ypxingq_t");
Elements B15 = ue.select("div.paly_list_btn");
for (int i4 = 0; i4 < B14.size(); i4++) {
String pE4 = B14.get(i4).text();
Elements B16 = B15.get(i4).select("a");
ArrayList arrayList3 = new ArrayList();
for (int i5 = 0; i5 < B16.size(); i5++) {
String name = B16.get(i5).text();
Matcher matcher = this.Ur.matcher(B16.get(i5).attr("href"));
if (matcher.find()) {
arrayList3.add(name + "$" + matcher.group(1));
}
}
String join = arrayList3.size() > 0 ? TextUtils.join("#", arrayList3) : str;
if (join.length() != 0) {
treeMap.put(pE4, join);
}
}
if (treeMap.size() > 0) {
String join2 = TextUtils.join(str12, treeMap.keySet());
String join3 = TextUtils.join(str12, treeMap.values());
jSONObject2.put("vod_play_from", join2);
jSONObject2.put("vod_play_url", join3);
}
JSONArray jSONArray = new JSONArray();
jSONArray.put(jSONObject2);
jSONObject4.put("list", jSONArray);
}catch (Exception e4){
SpiderDebug.log(e4);
}
return jSONObject4.toString();
}
public String homeContent(boolean z) {
int i;
try {
Document ue = Jsoup.parse(OkHttpUtil.string("https://www.bttwoo.com/", header("https://www.bttwoo.com")));
Elements B1 = ue.select("ul.navlist > li > a");
JSONArray jSONArray = new JSONArray();
Iterator<Element> it = B1.iterator();
while (true) {
i = 0;
if (!it.hasNext()) {
break;
}
Element next = it.next();
String pE = next.text();
if (pE.equals("最新电影")) {
pE = "最新";
}
if (pE.equals("热门下载")) {
pE = "热门放映";
}
if (pE.equals("最新") || pE.equals("本月热门") || pE.equals("热门放映") || pE.equals("国产剧") || pE.equals("日韩剧") || pE.equals("美剧")) {
i = 1;
}
if (i != 0) {
Matcher matcher = this.G.matcher(next.attr("href"));
if (matcher.find()) {
String trim = matcher.group(1).trim();
JSONObject jSONObject = new JSONObject();
jSONObject.put("type_id", trim);
jSONObject.put("type_name", pE);
jSONArray.put(jSONObject);
}
}
}
JSONObject jSONObject2 = new JSONObject();
if (z) {
jSONObject2.put("filters", new JSONObject("{}"));
}
jSONObject2.put("class", jSONArray);
try {
Elements B12 = ue.select("div.leibox > ul > li ");
JSONArray jSONArray2 = new JSONArray();
while (i < B12.size()) {
Element hq = B12.get(i);
String pE2 = hq.selectFirst("h3.dytit > a").text();
String Pd = hq.selectFirst("a > img").attr("data-original");
Element O = hq.selectFirst("div.jidi > span ");
String pE3 = O != null ? O.text() : "";
Matcher matcher2 = this.n.matcher(hq.selectFirst("h3.dytit > a").attr("href"));
if (matcher2.find()) {
String group = matcher2.group(1);
JSONObject jSONObject3 = new JSONObject();
jSONObject3.put("vod_id", group);
jSONObject3.put("vod_name", pE2);
jSONObject3.put("vod_pic", Pd);
jSONObject3.put("vod_remarks", pE3);
jSONArray2.put(jSONObject3);
}
i++;
}
jSONObject2.put("list", jSONArray2);
} catch (Exception e) {
SpiderDebug.log(e);
}
return jSONObject2.toString();
} catch (Exception e2) {
SpiderDebug.log(e2);
return "";
}
}
public String playerContent(String str, String str2, List<String> list) {
try {
String str3 = "https://www.bttwoo.com/v_play/" + str2 + ".html";
Document ue = Jsoup.parse(OkHttpUtil.string(str3, header(str3)));
JSONObject jSONObject = new JSONObject();
Matcher matcher = this.o.matcher(ue.toString());
Matcher matcher2 = this.F.matcher(ue.toString());
Matcher matcher3 = this.Cp.matcher(ue.toString());
if (matcher.find() && matcher2.find() && matcher3.find()) {
// Matcher matcher4 = this.JC.matcher(AES.decryptToString(Base64.decode(matcher.group(1), 0), matcher2.group(1).getBytes(), matcher3.group(1).getBytes(),AES.AES_CBC_PKCS7Padding));
Matcher matcher4 = this.JC.matcher(CBC.DECRYPT(Base64.decode(matcher.group(1), 0), matcher2.group(1).getBytes(), matcher3.group(1).getBytes()));
if (matcher4.find()) {
String group = matcher4.group(1);
HashMap hashMap = new HashMap();
hashMap.put("User-Agent", " Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36");
jSONObject.put("url", group);
jSONObject.put("header", new JSONObject(hashMap).toString());
jSONObject.put("parse", "0");
jSONObject.put("palyUrl", "");
}
}
return jSONObject.toString();
} catch (Exception e) {
SpiderDebug.log(e);
return "";
}
}
public String searchContent(String str, boolean z) {
if (z) {
return "";
}
try {
String str2 = "https://www.bttwoo.com/xssearch?q=" + URLEncoder.encode(str) + "&f=_all&p=1";
Document ue = Jsoup.parse(OkHttpUtil.string(str2, header(str2)));
JSONObject jSONObject = new JSONObject();
JSONArray jSONArray = new JSONArray();
Elements B1 = ue.select("div.mi_ne_kd > ul > li");
for (int i = 0; i < B1.size(); i++) {
Element hq = B1.get(i);
String trim = hq.selectFirst("img").attr("alt").trim();
String Pd = hq.selectFirst("img ").attr("data-original");
Element O = hq.selectFirst("div.jidi > span");
String pE = O != null ? O.text() : "";
Matcher matcher = this.n.matcher(hq.selectFirst("a").attr("href"));
if (matcher.find()) {
String group = matcher.group(1);
JSONObject jSONObject2 = new JSONObject();
jSONObject2.put("vod_id", group);
jSONObject2.put("vod_name", trim);
jSONObject2.put("vod_pic", Pd);
jSONObject2.put("vod_remarks", pE);
jSONArray.put(jSONObject2);
}
}
jSONObject.put("list", jSONArray);
return jSONObject.toString();
} catch (Exception e) {
SpiderDebug.log(e);
return "";
}
}
}
+479
View File
@@ -0,0 +1,479 @@
package com.github.catvod.spider;
import android.content.Context;
import android.text.TextUtils;
import android.util.Base64;
import com.github.catvod.crawler.Spider;
import com.github.catvod.crawler.SpiderDebug;
import com.github.catvod.utils.AES;
import com.github.catvod.utils.okhttp.OkHttpUtil;
import org.json.JSONArray;
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.URLEncoder;
import java.util.ArrayList;
import java.util.Comparator;
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;
import static com.github.catvod.utils.AES.AES_CBC_PKCS7Padding;
import static com.github.catvod.utils.AES.decryptToString;
/**
* 双十电影
* <p>
* Author: 忍一忍我很大
*/
public class Dy1010 extends Spider {
private static final String siteUrl = "http://www.1010dy1.com";
private static final String siteHost = "www.1010dy1.com";
/**
* 播放源配置
*/
private JSONObject playerConfig;
/**
* 筛选配置
*/
private JSONObject filterConfig;
private Pattern regexCategory = Pattern.compile("/type/(\\w+)/");
private Pattern regexVid = Pattern.compile("/detail/(\\w+)/");
private Pattern regexPlay = Pattern.compile("/play/(\\w+)-(\\d+)-(\\d+)/");
private Pattern regexPage = Pattern.compile("/show/\\d+/page/(\\d+)/");
@Override
public void init(Context context) {
super.init(context);
try {
playerConfig = new JSONObject("{\"xg_app_player\":{\"show\":\"app全局解析\",\"or\":999,\"ps\":\"1\",\"parse\":\"\"},\"duoduozy\":{\"show\":\"多多云\",\"or\":999,\"ps\":\"0\",\"parse\":\"\"},\"renrenmi\":{\"show\":\"快速云\",\"or\":999,\"ps\":\"0\",\"parse\":\"\"},\"xigua\":{\"show\":\"西瓜云\",\"or\":999,\"ps\":\"0\",\"parse\":\"\"},\"mgtv\":{\"show\":\"芒果云\",\"or\":999,\"ps\":\"0\",\"parse\":\"\"},\"qq\":{\"show\":\"腾讯云\",\"or\":999,\"ps\":\"0\",\"parse\":\"\"},\"youku\":{\"show\":\"优酷云\",\"or\":999,\"ps\":\"0\",\"parse\":\"\"},\"qiyi\":{\"show\":\"爱奇艺\",\"or\":999,\"ps\":\"0\",\"parse\":\"\"},\"pptv\":{\"show\":\"PPTV\",\"or\":999,\"ps\":\"0\",\"parse\":\"\"},\"letv\":{\"show\":\"乐视云\",\"or\":999,\"ps\":\"0\",\"parse\":\"\"},\"sohu\":{\"show\":\"搜狐云\",\"or\":999,\"ps\":\"0\",\"parse\":\"\"},\"bilibili\":{\"show\":\"哔哩云\",\"or\":999,\"ps\":\"0\",\"parse\":\"\"},\"dbm3u8\":{\"show\":\"百度云\",\"des\":\"在线播放\",\"ps\":\"0\",\"parse\":\"\"},\"tkm3u8\":{\"show\":\"天空云\",\"des\":\"天空播放器\",\"ps\":\"0\",\"parse\":\"\"},\"dplayer\":{\"show\":\"DPlayer-H5播放器\",\"des\":\"dplayer.js.org\",\"ps\":\"0\",\"parse\":\"\"},\"videojs\":{\"show\":\"videojs-H5播放器\",\"des\":\"videojs.com\",\"ps\":\"0\",\"parse\":\"\"},\"iva\":{\"show\":\"iva-H5播放器\",\"des\":\"videojj.com\",\"ps\":\"0\",\"parse\":\"\"},\"iframe\":{\"show\":\"iframe外链数据\",\"des\":\"iframe外链数据\",\"ps\":\"0\",\"parse\":\"\"},\"link\":{\"show\":\"外链数据\",\"des\":\"外部网站播放链接\",\"ps\":\"0\",\"parse\":\"\"},\"swf\":{\"show\":\"Flash文件\",\"des\":\"swf\",\"ps\":\"0\",\"parse\":\"\"},\"flv\":{\"show\":\"Flv文件\",\"des\":\"flv\",\"ps\":\"0\",\"parse\":\"\"},\"bdxm3u8\":{\"show\":\"北斗云\",\"des\":\"在线播放\",\"ps\":\"0\",\"parse\":\"\"},\"lym3u8\":{\"show\":\"老鸭资源\",\"des\":\"在线播放\",\"ps\":\"0\",\"parse\":\"\"},\"aliplayer\":{\"show\":\"阿里云播放器\",\"or\":999,\"ps\":\"0\",\"parse\":\"\"},\"hnm3u8\":{\"show\":\"红牛云\",\"or\":999,\"ps\":\"0\",\"parse\":\"\"},\"kbm3u8\":{\"show\":\"快播云\",\"or\":999,\"ps\":\"0\",\"parse\":\"\"},\"wjm3u8\":{\"show\":\"无尽备用\",\"or\":999,\"ps\":\"0\",\"parse\":\"\"}}");
filterConfig = new JSONObject("{\"1\":[{\"key\":\"class\",\"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\":\"惊悚\"},{\"n\":\"冒险\",\"v\":\"冒险\"}]},{\"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\":\"2015\",\"v\":\"2015\"},{\"n\":\"2014\",\"v\":\"2014\"},{\"n\":\"2013\",\"v\":\"2013\"},{\"n\":\"2012\",\"v\":\"2012\"},{\"n\":\"2011\",\"v\":\"2011\"},{\"n\":\"2010\",\"v\":\"2010\"},{\"n\":\"2009\",\"v\":\"2009\"},{\"n\":\"2008\",\"v\":\"2008\"},{\"n\":\"2007\",\"v\":\"2007\"},{\"n\":\"2006\",\"v\":\"2006\"},{\"n\":\"2000\",\"v\":\"2000\"},{\"n\":\"1997\",\"v\":\"1997\"}]},{\"key\":\"by\",\"name\":\"排序\",\"value\":[{\"n\":\"全部\",\"v\":\"\"},{\"n\":\"时间\",\"v\":\"time\"},{\"n\":\"人气\",\"v\":\"hits\"},{\"n\":\"评分\",\"v\":\"score\"}]}],\"2\":[{\"key\":\"class\",\"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\":\"历史\"},{\"n\":\"网剧\",\"v\":\"网剧\"}]},{\"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\":\"其他\"}]},{\"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\":\"2015\",\"v\":\"2015\"},{\"n\":\"2014\",\"v\":\"2014\"},{\"n\":\"2013\",\"v\":\"2013\"},{\"n\":\"2012\",\"v\":\"2012\"},{\"n\":\"2011\",\"v\":\"2011\"},{\"n\":\"2010\",\"v\":\"2010\"},{\"n\":\"2009\",\"v\":\"2009\"},{\"n\":\"2008\",\"v\":\"2008\"},{\"n\":\"2007\",\"v\":\"2007\"},{\"n\":\"2006\",\"v\":\"2006\"},{\"n\":\"1997\",\"v\":\"1997\"},{\"n\":\"1980\",\"v\":\"1980\"}]},{\"key\":\"by\",\"name\":\"排序\",\"value\":[{\"n\":\"全部\",\"v\":\"\"},{\"n\":\"时间\",\"v\":\"time\"},{\"n\":\"人气\",\"v\":\"hits\"},{\"n\":\"评分\",\"v\":\"score\"}]}]}");
} catch (JSONException e) {
SpiderDebug.log(e);
}
}
/**
* 爬虫headers
*
* @param url
* @return
*/
protected HashMap<String, String> getHeaders(String url) {
HashMap<String, String> headers = new HashMap<>();
headers.put("Referer", "http://www.1010dy1.com/");
headers.put("User-Agent", "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36 Core/1.94.169.400 QQBrowser/11.0.5130.400");
return headers;
}
/**
* 获取分类数据 + 首页最近更新视频列表数据
*
* @param filter 是否开启筛选 关联的是 软件设置中 首页数据源里的筛选开关
* @return
*/
@Override
public String homeContent(boolean filter) {
try {
Document doc = Jsoup.parse(OkHttpUtil.string(siteUrl, getHeaders(siteUrl)));
// 分类节点
Elements elements = doc.select("ul.stui-header__menu > li > a");
JSONArray classes = new JSONArray();
for (Element ele : elements) {
String name = ele.text();
Matcher mather = regexCategory.matcher(ele.attr("href"));
if (!mather.find())
continue;
String id = mather.group(1).trim();
JSONObject jsonObject = new JSONObject();
jsonObject.put("type_id", id);
jsonObject.put("type_name", name);
classes.put(jsonObject);
}
JSONObject result = new JSONObject();
if (filter) {
result.put("filters", filterConfig);
}
result.put("class", classes);
try {
// 取首页推荐视频列表
Elements list = doc.select("div.stui-pannel_bd:nth-child(1) ul.stui-vodlist li div.stui-vodlist__box");
JSONArray videos = new JSONArray();
for (int i = 0; i < list.size(); i++) {
Element vod = list.get(i);
Matcher matcher = regexVid.matcher(vod.selectFirst(".stui-vodlist__thumb").attr("href"));
if (!matcher.find())
continue;
String title = vod.selectFirst(".stui-vodlist__thumb").attr("title");
String cover = vod.selectFirst(".stui-vodlist__thumb").attr("data-original");
String remark = vod.selectFirst("span.pic-text").text();
String id = matcher.group(1);
JSONObject v = new JSONObject();
v.put("vod_id", id);
v.put("vod_name", title);
v.put("vod_pic", cover);
v.put("vod_remarks", remark);
videos.put(v);
}
result.put("list", videos);
} catch (Exception e) {
SpiderDebug.log(e);
}
return result.toString();
} catch (Exception e) {
SpiderDebug.log(e);
}
return "";
}
/**
* 获取分类信息数据
*
* @param tid 分类id
* @param pg 页数
* @param filter 同homeContent方法中的filter
* @param extend 筛选参数{k:v, k1:v1}
* @return
*/
@Override
public String categoryContent(String tid, String pg, boolean filter, HashMap<String, String> extend) {
try {
String url = siteUrl + "/show/";
if (extend != null && extend.size() > 0 && extend.containsKey("tid") && extend.get("tid").length() > 0) {
url += extend.get("tid");
} else {
url += tid;
}
if (extend != null && extend.size() > 0) {
for (Iterator<String> it = extend.keySet().iterator(); it.hasNext(); ) {
String key = it.next();
String value = extend.get(key);
if (value.length() > 0) {
url += "/" + key + "/" + URLEncoder.encode(value);
}
}
}
url += "/page/" + pg + "/";
// 获取分类数据的url
//String url = siteUrl + "/show/" + tid + "/page/" + pg + "/";
String html = OkHttpUtil.string(url, getHeaders(url));
Document doc = Jsoup.parse(html);
JSONObject result = new JSONObject();
int pageCount = 0;
int page = -1;
// 取页码相关信息
Elements pageInfo = doc.select(".stui-page li");
if (pageInfo.size() == 0) {
page = Integer.parseInt(pg);
pageCount = page;
} else {
for (int i = 0; i < pageInfo.size(); i++) {
Element li = pageInfo.get(i);
Element a = li.selectFirst("a");
if (a == null)
continue;
String name = a.text();
if (page == -1 && li.hasClass("active")) {
Matcher matcher = regexPage.matcher(a.attr("href"));
if (matcher.find()) {
page = Integer.parseInt(matcher.group(1));
} else {
page = 0;
}
}
if (name.equals("尾页")) {
Matcher matcher = regexPage.matcher(a.attr("href"));
if (matcher.find()) {
pageCount = Integer.parseInt(matcher.group(1));
} else {
pageCount = 0;
}
break;
}
}
}
JSONArray videos = new JSONArray();
if (!html.contains("没有找到您想要的结果哦")) {
Elements list = doc.select("ul.stui-vodlist li div.stui-vodlist__box");
for (int i = 0; i < list.size(); i++) {
Element vod = list.get(i);
String title = vod.selectFirst(".title").text();
String cover = vod.selectFirst(".stui-vodlist__thumb").attr("data-original");
String remark = vod.selectFirst("span.pic-text").text();
Matcher matcher = regexVid.matcher(vod.selectFirst(".stui-vodlist__thumb").attr("href"));
if (!matcher.find())
continue;
String id = matcher.group(1);
JSONObject v = new JSONObject();
v.put("vod_id", id);
v.put("vod_name", title);
v.put("vod_pic", cover);
v.put("vod_remarks", remark);
videos.put(v);
}
}
result.put("page", page);
result.put("pagecount", pageCount);
result.put("limit", 30);
result.put("total", pageCount <= 1 ? videos.length() : pageCount * 30);
result.put("list", videos);
return result.toString();
} catch (Exception e) {
SpiderDebug.log(e);
}
return "";
}
/**
* 视频详情信息
*
* @param ids 视频id
* @return
*/
@Override
public String detailContent(List<String> ids) {
try {
// 视频详情url
String url = siteUrl + "/detail/" + ids.get(0) + "/";
Document doc = Jsoup.parse(OkHttpUtil.string(url, getHeaders(url)));
JSONObject result = new JSONObject();
JSONObject vodList = new JSONObject();
// 取基本数据
String cover = doc.selectFirst("a.stui-vodlist__thumb img").attr("data-original");
String title = doc.selectFirst("a.stui-vodlist__thumb").attr("title");
String desc = Jsoup.parse(doc.selectFirst("meta[name=description]").attr("content")).text();
String category = "", area = "", year = "", remark = "", director = "", actor = "";
Elements span_text_muted = doc.select("div.stui-content__detail span.text-muted");
for (int i = 0; i < span_text_muted.size(); i++) {
Element text = span_text_muted.get(i);
String info = text.text();
if (info.equals("类型:")) {
category = text.nextElementSibling().text();
} else if (info.equals("年份:")) {
year = text.nextElementSibling().text();
} else if (info.equals("地区:")) {
area = text.nextElementSibling().text();
} else if (info.equals("更新:")) {
remark = text.nextSibling().outerHtml().trim();
} else if (info.equals("导演:")) {
List<String> directors = new ArrayList<>();
Elements aa = text.parent().select("a");
for (int j = 0; j < aa.size(); j++) {
directors.add(aa.get(j).text());
}
director = TextUtils.join(",", directors);
} else if (info.equals("主演:")) {
List<String> actors = new ArrayList<>();
Elements aa = text.parent().select("a");
for (int j = 0; j < aa.size(); j++) {
actors.add(aa.get(j).text());
}
actor = TextUtils.join(",", actors);
}
}
vodList.put("vod_id", ids.get(0));
vodList.put("vod_name", title);
vodList.put("vod_pic", cover);
vodList.put("type_name", category);
vodList.put("vod_year", year);
vodList.put("vod_area", area);
vodList.put("vod_remarks", remark);
vodList.put("vod_actor", actor);
vodList.put("vod_director", director);
vodList.put("vod_content", desc);
Map<String, String> vod_play = new TreeMap<>(new Comparator<String>() {
@Override
public int compare(String o1, String 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 1;
}
});
Elements sources = doc.select("div.playlist");
for (int i = 0; i < sources.size(); i++) {
Element source = sources.get(i);
String sourceName = source.selectFirst("h3.title").text().trim();
String tabHref = source.attr("href");
boolean found = false;
for (Iterator<String> it = playerConfig.keys(); it.hasNext(); ) {
String flag = it.next();
if (playerConfig.getJSONObject(flag).getString("show").equals(sourceName)) {
sourceName = playerConfig.getJSONObject(flag).getString("show");
found = true;
break;
}
}
if (!found)
continue;
String playList = "";
Elements playListA = source.select("ul.stui-content__playlist > li > a");
List<String> vodItems = new ArrayList<>();
for (int j = 0; j < playListA.size(); j++) {
Element vod = playListA.get(j);
Matcher matcher = regexPlay.matcher(vod.attr("href"));
if (!matcher.find())
continue;
String playURL = matcher.group(1) + "-" + matcher.group(2) + "-" + matcher.group(3);
vodItems.add(vod.text() + "$" + playURL);
}
if (vodItems.size() > 0)
playList = TextUtils.join("#", vodItems);
if (playList.length() == 0)
continue;
vod_play.put(sourceName, playList);
}
if (vod_play.size() > 0) {
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 "";
}
private final Pattern regexUrl = Pattern.compile("(?<=urls = \").+?(?=\";)");
/**
* 获取视频播放信息
*
* @param flag 播放源
* @param id 视频id
* @param vipFlags 所有可能需要vip解析的源
* @return
*/
@Override
public String playerContent(String flag, String id, List<String> vipFlags) {
try {
JSONObject headers = new JSONObject();
headers.put("Origin", " https://dp.1010dy.cc");
//headers.put("Referer", " http://www.1010dy1.com/");
//headers.put("Icy-MetaData", "1");
//headers.put("scheme", " https");
headers.put("User-Agent", " Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36");
headers.put("Accept", " */*");
//headers.put("Accept-Language", " zh-CN,zh;q=0.9,en-GB;q=0.8,en-US;q=0.7,en;q=0.6");
//headers.put("Accept-Encoding", " gzip, deflate");
headers.put("Connection", " close");
// 播放页 url
String url = siteUrl + "/play/" + id + "/";
Document doc = Jsoup.parse(OkHttpUtil.string(url, getHeaders(url)));
Elements allScript = doc.select("script");
JSONObject result = new JSONObject();
for (int i = 0; i < allScript.size(); i++) {
String scContent = allScript.get(i).html().trim();
if (scContent.startsWith("var player_")) {
int start = scContent.indexOf('{');
int end = scContent.lastIndexOf('}') + 1;
String json = scContent.substring(start, end);
JSONObject player = new JSONObject(json);
if (playerConfig.has(player.getString("from"))) {
HashMap<String, String> hashMap = new HashMap<>();
hashMap.put("User-Agent", " Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36");
hashMap.put("Referer", url);
String jxurl = "https://dp.1010dy.cc/?url=" + player.getString("url")+"&next="+player.getString("link_next")+"&id="+player.getString("id")+"&nid="+player.getString("nid")+"&from="+player.getString("from");
String doc1 = OkHttpUtil.string(jxurl, hashMap);
Matcher matcher = regexUrl.matcher(doc1);
if (!matcher.find()) {
return "";
}
String data = matcher.group(0);
byte[] decode = Base64.decode(data, Base64.DEFAULT);
String iv = "c487ebl2e38a0faO";
String key = "Of84ff0clf252cba";
String directUrl = decryptToString(decode, key.getBytes(), iv.getBytes(),AES_CBC_PKCS7Padding);
if (player.getString("from").equals("duoduozy")) {
result.put("parse", 0);
result.put("playUrl", "");
result.put("url", directUrl);
result.put("header", headers.toString());
} else {
result.put("parse", 0);
result.put("playUrl", "");
result.put("url", directUrl);
result.put("header", "");
}
}
}
}
return result.toString();
} catch (Exception e) {
SpiderDebug.log(e);
}
return "";
}
/**
* 搜索
*
* @param key
* @param quick 是否播放页的快捷搜索
* @return
*/
@Override
public String searchContent(String key, boolean quick) {
try {
long currentTime = System.currentTimeMillis();
String url = siteUrl + "/index.php/ajax/suggest?mid=1&wd=" + URLEncoder.encode(key) + "&limit=10&timestamp=" + currentTime;
JSONObject searchResult = new JSONObject(OkHttpUtil.string(url, getHeaders(url)));
JSONObject result = new JSONObject();
JSONArray videos = new JSONArray();
if (searchResult.getInt("total") > 0) {
JSONArray lists = new JSONArray(searchResult.getString("list"));
for (int i = 0; i < lists.length(); i++) {
JSONObject vod = lists.getJSONObject(i);
String id = vod.getString("id");
String title = vod.getString("name");
String cover = vod.getString("pic");
JSONObject v = new JSONObject();
v.put("vod_id", id);
v.put("vod_name", title);
v.put("vod_pic", cover);
v.put("vod_remarks", "");
videos.put(v);
}
}
result.put("list", videos);
return result.toString();
} catch (Exception e) {
SpiderDebug.log(e);
}
return "";
}
}
@@ -0,0 +1,296 @@
package com.github.catvod.spider;
import android.annotation.TargetApi;
import android.content.Context;
import com.github.catvod.crawler.Spider;
import com.github.catvod.crawler.SpiderDebug;
import com.github.catvod.utils.CBC;
import com.github.catvod.utils.okhttp.OKCallBack;
import com.github.catvod.utils.okhttp.OkHttpUtil;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.HashMap;
import java.util.List;
import okhttp3.Call;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;
public class Jianying extends Spider {
public static String token;
public void init(Context context, String str) {
super.init(context, str);
token = str;
}
private HashMap<String, String> getHeaders(String url) {
HashMap<String, String> headers = new HashMap<>();
headers.put("accept", "application/json, text/plain, */*");
headers.put("accept-encoding", "gzip, deflate, br");
headers.put("connection", "keep-alive");
headers.put("Authorization", token);
headers.put("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.54 Safari/537.36");
return headers;
}
public String homeContent(boolean filter) {
try {
String url = "https://admin.syrme.top/v1/api/video/index";
JSONObject jSONObject = new JSONObject();
JSONArray classes = new JSONArray();
OkHttpUtil.postJson(OkHttpUtil.defaultClient(), url, jSONObject.toString(), getHeaders(url), new OKCallBack.OKCallBackString() {
@Override
public void onFailure(Call call, Exception exc) {
}
public void onResponse(String str) {
try {
JSONArray list = new JSONObject(str).getJSONArray("data");
for (int i = 0; i < list.length(); i++) {
JSONObject vObj = list.getJSONObject(i);
String name = vObj.getString("title");
if (!name.equals("轮播")) {
String id = vObj.getString("title");
JSONObject newCls = new JSONObject();
newCls.put("type_id", id);
newCls.put("type_name", name);
classes.put(newCls);
}
}
} catch (JSONException unused) {
}
}
});
JSONObject result = new JSONObject();
result.put("class", classes);
return result.toString();
} catch (Exception e) {
SpiderDebug.log(e);
}
return "";
}
public String homeVideoContent() {
try {
JSONArray videos = new JSONArray();
JSONObject jSONObject = new JSONObject();
String url = "https://admin.syrme.top/v1/api/video/index";
OkHttpUtil.postJson(OkHttpUtil.defaultClient(), url, jSONObject.toString(), getHeaders(url), new OKCallBack.OKCallBackString() {
@Override
public void onFailure(Call call, Exception exc) {
}
public void onResponse(String str) {
try {
JSONArray jsonArray = new JSONObject(str).getJSONArray("data");
JSONArray list = jsonArray.getJSONObject(1).getJSONArray("video_list");
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject vObj = list.getJSONObject(i);
String id = vObj.getString("ID");
String title = vObj.getString("title");
String cover = vObj.getString("image");
String mark = vObj.getString("score");
JSONObject v = new JSONObject();
v.put("vod_id", id);
v.put("vod_name", title);
v.put("vod_pic", cover);
v.put("vod_remarks", mark);
videos.put(v);
}
} catch (JSONException unused) {
}
}
});
JSONObject result = new JSONObject();
result.put("list", videos);
return result.toString();
} catch (Exception e) {
SpiderDebug.log(e);
}
return "";
}
public String categoryContent(String tid, String pg, boolean filter, HashMap<String, String> extend) {
try {
int parseInt = Integer.parseInt(pg);
if (parseInt == 0) {
parseInt = 1;
}
String url = "https://admin.syrme.top/v1/api/video/search?q=" + tid + "&page=" + pg + "&size=" + 24;
JSONObject jSONObject = new JSONObject();
JSONArray list = new JSONArray();
OkHttpUtil.postJson(OkHttpUtil.defaultClient(), url, jSONObject.toString(), getHeaders(url), new OKCallBack.OKCallBackString() {
@Override
public void onFailure(Call call, Exception exc) {
}
public void onResponse(String str4) {
try {
JSONArray data = new JSONObject(str4).getJSONArray("data");
for (int i = 0; i < data.length(); i++) {
JSONObject vObj = data.getJSONObject(i);
JSONObject vodAtom = new JSONObject();
vodAtom.put("vod_id", vObj.getString("ID"));
vodAtom.put("vod_name", vObj.getString("title"));
vodAtom.put("vod_pic", vObj.optString("image"));
String mark = vObj.optString("score");
if (mark.equals("null")) {
mark = "";
}
vodAtom.put("vod_remarks", mark);
list.put(vodAtom);
}
} catch (JSONException unused) {
}
}
});
JSONObject result = new JSONObject();
result.put("page", parseInt);
if (list.length() == 24) {
parseInt++;
}
result.put("pagecount", parseInt);
result.put("limit", 24);
result.put("total", Integer.MAX_VALUE);
result.put("list", list);
return result.toString();
} catch (Exception e) {
SpiderDebug.log(e);
}
return "";
}
public String detailContent(List<String> ids) {
try {
String url = "https://admin.syrme.top/v1/api/video/id?id=" + ids.get(0);
JSONObject jSONObject = new JSONObject();
JSONObject vodAtom = new JSONObject();
OkHttpUtil.postJson(OkHttpUtil.defaultClient(), url, jSONObject.toString(), getHeaders(url), new OKCallBack.OKCallBackString() {
@Override
public void onFailure(Call call, Exception exc) {
}
public void onResponse(String str) {
try {
JSONObject vObj = new JSONObject(str).getJSONObject("data");
vodAtom.put("vod_id", vObj.getString("ID"));
vodAtom.put("vod_name", vObj.getString("title"));
vodAtom.put("vod_pic", vObj.getString("image"));
vodAtom.put("type_name", vObj.getString("video_type"));
vodAtom.put("vod_year", vObj.getString("year"));
vodAtom.put("vod_area", vObj.getString("video_tags"));
String optString = vObj.optString("score");
String des = "";
if (optString.equals("null")) {
optString = des;
}
vodAtom.put("vod_remarks", optString);
vodAtom.put("vod_actor", vObj.getString("authors"));
vodAtom.put("vod_director", vObj.getString("director"));
String optString2 = vObj.optString("content");
if (!optString2.equals("null")) {
des = optString2;
}
vodAtom.put("vod_content", des);
vodAtom.put("vod_play_from", "简影");
vodAtom.put("vod_play_url", vObj.optString("url_content").replace("\n", "#"));
} catch (JSONException unused) {
}
}
});
JSONObject result = new JSONObject();
JSONArray list = new JSONArray();
list.put(vodAtom);
result.put("list", list);
return result.toString();
} catch (Exception e) {
SpiderDebug.log(e);
}
return "";
}
@TargetApi(26)
public String playerContent(String flag, String id, List<String> vipFlags) {
try {
JSONObject result = new JSONObject();
String time = LocalDateTime.now(ZoneId.of("Asia/Shanghai")).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm")).replace("-", "");
String key = "ba0-1024-11eb-ad";
String enData = CBC.hexs(time, key, key);
String basic = "";
int i = 0;
while (i < enData.length()) {
int i2 = i + 8;
basic = basic + enData.substring(i, i2) + "-";
i = i2;
}
String sid = basic.substring(0, basic.length() - 1);
JSONObject headers = new JSONObject();
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", " */*");
headers.put("Accept-Language", " zh-CN,zh;q=0.9,en-US;q=0.3,en;q=0.7");
headers.put("Accept-Encoding", " gzip, deflate");
result.put("parse", 0);
result.put("url", id + "?sid=" + sid);
result.put("playUrl", "");
result.put("header", headers.toString());
return result.toString();
} catch (Exception e) {
SpiderDebug.log(e);
}
return "";
}
public String searchContent(String str, boolean quick) {
if (quick) {
return "";
}
try {
JSONArray videos = new JSONArray();
try {
String url = "https://admin.syrme.top/v1/api/video/search?q=" + str + "&page=1&size=24";
OkHttpUtil.postJson(OkHttpUtil.defaultClient(), url, new JSONObject().toString(), getHeaders(url), new OKCallBack.OKCallBackString() {
@Override
public void onFailure(Call call, Exception exc) {
}
public void onResponse(String str3) {
try {
JSONArray jsonArray = new JSONObject(str3).getJSONArray("data");
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject vObj = jsonArray.getJSONObject(i);
JSONObject v = new JSONObject();
v.put("vod_id", vObj.getString("ID"));
v.put("vod_name", vObj.getString("title"));
v.put("vod_pic", vObj.optString("image"));
String mark = vObj.optString("score");
if (mark.equals("null")) {
mark = "";
}
v.put("vod_remarks", mark);
videos.put(v);
}
} catch (JSONException unused) {
}
}
});
} catch (Exception unused) {
}
JSONObject result = new JSONObject();
result.put("list", videos);
return result.toString();
} catch (Exception e) {
SpiderDebug.log(e);
}
return "";
}
}
@@ -0,0 +1,326 @@
package com.github.catvod.spider;
import android.content.Context;
import android.text.TextUtils;
import android.util.Base64;
import com.github.catvod.utils.okhttp.OkHttpUtil;
import com.github.catvod.crawler.Spider;
import com.github.catvod.crawler.SpiderDebug;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
public class Nianying extends Spider {
private static String host = "http://cms111.nbhut.com/api.php/Chengcheng/vod";
public HashMap<String, String> headers() {
HashMap<String, String> hashMap = new HashMap<>();
hashMap.put("User-Agent", "Dalvik/2.1.0 (Linux; U; Android 11; M2105K81AC Build/RKQ1.200826.002)");
return hashMap;
}
@Override
public void init(Context context) {
super.init(context);
}
@Override
public void init(Context context, String extend) {
super.init(context, extend);
}
@Override
public String homeContent(boolean filter) {
try {
JSONObject result = new JSONObject();
JSONArray classes = new JSONArray();
LinkedHashMap<String, String> linkedHashMap = new LinkedHashMap<>();
linkedHashMap.put("movie", "电影");
linkedHashMap.put("tvplay", "剧集");
linkedHashMap.put("comic", "动漫");
linkedHashMap.put("tvshow", "综艺");
for (String str : linkedHashMap.keySet()) {
JSONObject item = new JSONObject();
item.put("type_id", str);
item.put("type_name", linkedHashMap.get(str));
classes.put(item);
}
result.put("class", classes);
if (filter) {
JSONObject filterBox = new JSONObject();
result.put("filters", filterBox);
String json = OkHttpUtil.string(host + "/?ac=flitter", headers());
JSONObject sourceData = new JSONObject(decrypt(json));
for (String tid : linkedHashMap.keySet()) {
JSONArray filterArr = new JSONArray();
filterBox.put(tid, filterArr);
JSONArray typeJSON = sourceData.optJSONArray(tid);
for (int j = 0; j < typeJSON.length(); j++) {
JSONObject item = typeJSON.optJSONObject(j);
String itemName = item.optString("name");
String itemField = item.optString("field");
JSONArray itemValues = item.optJSONArray("values");
JSONObject jOne = new JSONObject();
jOne.put("key", itemField);
jOne.put("name", itemName);
filterArr.put(jOne);
JSONArray values = new JSONArray();
jOne.put("value", values);
JSONObject all = new JSONObject();
all.put("n", "全部");
all.put("v", "");
values.put(all);
for (int k = 0; k < itemValues.length(); k++) {
String k1 = itemValues.optString(k);
JSONObject kvo = new JSONObject();
kvo.put("n", k1);
kvo.put("v", k1);
values.put(kvo);
}
}
}
}
return result.toString();
} catch (Exception e) {
SpiderDebug.log(e);
return "";
}
}
private String decrypt(String data) {
return data;
}
@Override
public String homeVideoContent() {
JSONObject result = new JSONObject();
try {
String url = host + "/?ac=list&class=tvplay&page=1";
String encodeData = OkHttpUtil.string(url, headers());
JSONObject json = new JSONObject(decrypt(encodeData));
JSONArray data = json.optJSONArray("data");
JSONArray list = new JSONArray();
for (int i = 0; i < data.length(); i++) {
JSONObject item = data.getJSONObject(i);
JSONObject vod = new JSONObject();
String nextlink = item.getString("nextlink");
String vod_id = nextlink.substring(nextlink.indexOf("ids=") + 4);
vod.put("vod_id", vod_id);
vod.put("vod_name", item.getString("title"));
vod.put("vod_pic", item.getString("pic"));
vod.put("vod_remarks", item.getString("state"));
list.put(vod);
}
result.put("list", list);
} catch (Exception e) {
SpiderDebug.log(e);
}
return result.toString();
}
@Override
public String categoryContent(String tid, String pg, boolean filter, HashMap<String, String> extend) {
JSONObject result = new JSONObject();
try {
String url = host + "/";
Map<String, String> params = new HashMap<>();
if (extend != null) {
params.putAll(extend);
}
params.put("class", tid);
params.put("page", pg);
params.put("ac", "list");
List<String> ps = new LinkedList<>();
for (Map.Entry<String, String> entry : params.entrySet()) {
ps.add(entry.getKey() + "=" + entry.getValue());
}
url = url + "?" + TextUtils.join("&", ps);
String encodeData = OkHttpUtil.string(url, headers());
JSONObject json = new JSONObject(decrypt(encodeData));
JSONArray list = json.optJSONArray("data");
JSONArray vods = new JSONArray();
for (int i = 0; i < list.length(); i++) {
JSONObject item = list.getJSONObject(i);
JSONObject vod = new JSONObject();
String nextlink = item.getString("nextlink");
String vod_id = nextlink.substring(nextlink.indexOf("ids=") + 4);
vod.put("vod_id", vod_id);
vod.put("vod_name", item.getString("title"));
vod.put("vod_pic", item.getString("pic"));
vod.put("vod_remarks", item.getString("state"));
vods.put(vod);
}
int parseInt = Integer.parseInt(pg);
result.put("page", parseInt);
if (vods.length() == 20) {
parseInt++;
}
result.put("pagecount", parseInt);
result.put("limit", 20);
result.put("total", Integer.MAX_VALUE);
result.put("list", vods);
} catch (Exception e) {
SpiderDebug.log(e);
}
return result.toString();
}
@Override
public String detailContent(List<String> ids) {
JSONObject result = new JSONObject();
try {
String url = host + "/?ac=detail&ids=" + ids.get(0);
String encodeData = OkHttpUtil.string(url, headers());
JSONObject vodInfo = new JSONObject(decrypt(encodeData));
JSONObject vod = new JSONObject();
vod.put("vod_id", vodInfo.getString("id"));
vod.put("vod_name", vodInfo.getString("title"));
vod.put("vod_pic", vodInfo.getString("img_url"));
vod.put("vod_year", vodInfo.optString("pubtime"));
vod.put("vod_remarks", vodInfo.optString("season_num"));
vod.put("vod_content", vodInfo.optString("intro").trim());
JSONArray type = vodInfo.optJSONArray("type");
if (type != null && type.length() > 0) {
vod.put("type_name", type.toString().replace("[\"", "").replace("\"]", ""));
}
JSONArray area = vodInfo.optJSONArray("area");
if (area != null && area.length() > 0) {
vod.put("vod_area", area.toString().replace("[\"", "").replace("\"]", ""));
}
JSONArray actor = vodInfo.optJSONArray("actor");
if (actor != null && actor.length() > 0) {
vod.put("vod_actor", actor.toString().replace("[\"", "").replace("\"]", ""));
}
JSONArray director = vodInfo.optJSONArray("director");
if (director != null && director.length() > 0) {
vod.put("vod_director", director.toString().replace("[\"", "").replace("\"]", ""));
}
JSONObject videolist = vodInfo.getJSONObject("videolist");
Iterator<String> keys = videolist.keys();
Map<String, String> map = new TreeMap<>((o1, o2) -> {
if (o1.contains("m3u8")) {
if (o2.contains("lzm3u8")) {
return 1;
}
return 1;
}
if (o1.contains("ddzy")) {
return -1;
}
return 1;
});
while (keys.hasNext()) {
String source = keys.next();
JSONArray urls = videolist.optJSONArray(source);
List<String> sourceValues = new ArrayList<>();
for (int i = 0; i < urls.length(); i++) {
JSONObject item = urls.getJSONObject(i);
String title = item.optString("title");
String urlv = item.optString("url");
if (urlv.contains("url=")) {
urlv = urlv.replace("http://ry.nbhut.com/4.7.php?url=", "");
}
sourceValues.add(title + "$" + urlv);
}
map.put(source, TextUtils.join("#", sourceValues));
}
String join = TextUtils.join("$$$", map.keySet());
String join2 = TextUtils.join("$$$", map.values());
vod.put("vod_play_from", join);
vod.put("vod_play_url", join2);
JSONArray vods = new JSONArray();
vods.put(vod);
result.put("list", vods);
} catch (Exception e) {
SpiderDebug.log(e);
}
return result.toString();
}
/**
* @param flag
* @param id
* @param vipFlags
* @return
*/
@Override
public String playerContent(String flag, String id, List<String> vipFlags) {
JSONObject result = new JSONObject();
try {
result.put("parse", "0");
if (Misc.isVideoFormat(id)) {
result.put("url", id);
} else if (Misc.isVip(id)) {
result.put("url", id);
result.put("parse", "1");
}
} catch (Exception e) {
SpiderDebug.log(e);
}
return result.toString();
}
@Override
public String searchContent(String key, boolean quick) {
JSONObject result = new JSONObject();
try {
String url = host + "/?ac=list&wd=" + key + "&page=1";
String encodeData = OkHttpUtil.string(url, headers());
JSONObject json = new JSONObject(decrypt(encodeData));
JSONArray list = json.optJSONArray("data");
JSONArray vods = new JSONArray();
for (int i = 0; i < list.length(); i++) {
JSONObject item = list.getJSONObject(i);
JSONObject vod = new JSONObject();
String nextlink = item.getString("nextlink");
String vod_id = nextlink.substring(nextlink.indexOf("ids=") + 4);
vod.put("vod_id", vod_id);
vod.put("vod_name", item.getString("title"));
vod.put("vod_pic", item.getString("pic"));
vod.put("vod_remarks", item.getString("state"));
vods.put(vod);
}
result.put("list", vods);
} catch (Exception e) {
}
return result.toString();
}
@Override
public boolean isVideoFormat(String url) {
return super.isVideoFormat(url);
}
@Override
public boolean manualVideoCheck() {
return super.manualVideoCheck();
}
}
+410
View File
@@ -0,0 +1,410 @@
package com.github.catvod.spider;
import android.content.Context;
import android.text.TextUtils;
import android.util.Base64;
import com.github.catvod.utils.Misc;
import com.github.catvod.utils.okhttp.OKCallBack;
import com.github.catvod.utils.okhttp.OkHttpUtil;
import com.github.catvod.crawler.Spider;
import org.json.JSONArray;
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.URLEncoder;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import okhttp3.Call;
public class Tkys extends Spider {
private static final String siteUrl = new String("https://www.tkys.tv");
private static final String siteHost = new String("www.tkys.tv");
protected JSONObject playerConfig;
protected JSONObject filterConfig;
protected Pattern regexCategory = Pattern.compile("/vodtype/(\\d+).html");
protected Pattern regexVoddetail = Pattern.compile("/voddetail/(\\d+).html");
protected Pattern regexPlay = Pattern.compile("/vodplay/(\\S+).html");
protected Pattern regexPage = Pattern.compile("/vodshow/\\d+--------(\\d+)---.html");
protected Pattern regexBtToken = Pattern.compile("token = \"(.*?)\"");
protected Pattern regexEnurl = Pattern.compile("getVideoInfo\\(\"(.*?)\"");
private final String filterString = "";
private final String playerString = "{\"mgtv\":{\"show\":\"芒果-官方\",\"des\":\"\",\"ps\":\"1\",\"parse\":\"https://play.tkys.tv/?url=\"},\"qiyi\":{\"show\":\"奇艺-官方\",\"des\":\"\",\"ps\":\"1\",\"parse\":\"https://jx.tiankongyingshi.tv/m3u8222222.php?url=\"},\"qq\":{\"show\":\"QQ-官方\",\"des\":\"\",\"ps\":\"1\",\"parse\":\"https://jx.tiankongyingshi.tv/m3u8222222.php?url=\"},\"sohu\":{\"show\":\"搜狐-官方\",\"des\":\"\",\"ps\":\"1\",\"parse\":\"https://play.tkys.tv/?url=\"},\"xx\":{\"show\":\"蓝光C\",\"des\":\"\",\"ps\":\"1\",\"parse\":\"https://jx.tiankongyingshi.tv/m3u8222222.php?url=\"},\"youku\":{\"show\":\"优酷-官方\",\"des\":\"\",\"ps\":\"1\",\"parse\":\"https://jx.tiankongyingshi.tv/m3u8222222.php?url=\"},\"bilibili\":{\"show\":\"BL-官方\",\"des\":\"\",\"ps\":\"1\",\"parse\":\"https://jx.tiankongyingshi.tv/m3u8222222.php?url=\"},\"dbm3u8\":{\"show\":\"备用1(请勿相信片中广告!!)\",\"des\":\"\",\"ps\":\"1\",\"parse\":\"https://jx.tiankongyingshi.tv/m3u8222222.php?url=\"},\"wjm3u8\":{\"show\":\"备用2(请勿相信片中广告!!)\",\"des\":\"\",\"ps\":\"1\",\"parse\":\"https://jx.tiankongyingshi.tv/m3u8222222.php?url=\"},\"kbm3u8\":{\"show\":\"备用3(有广告,误信)\",\"des\":\"\",\"ps\":\"1\",\"parse\":\"https://jx.tiankongyingshi.tv/m3u8222222.php?url=\"},\"tkqp\":{\"show\":\"app专用\",\"des\":\"天空自切\",\"ps\":\"1\",\"parse\":\"https://jxqd.tkys.tv/dnmdsb2.php?url=\"},\"wuduzy\":{\"show\":\"蓝光B(维护中)\",\"des\":\"五毒\",\"ps\":\"1\",\"parse\":\"https://jx.yyy4080.com/351755?url=\"},\"miaoparty\":{\"show\":\"蓝光MZ\",\"des\":\"\",\"ps\":\"1\",\"parse\":\"https://jxqd.tkys.tv/dnmdsb2.php?url=\"},\"wuduby\":{\"show\":\"蓝光备用\",\"des\":\"五毒备用\",\"ps\":\"0\",\"parse\":\"https://jx.tiankongyingshi.tv/m3u8.php?url=\"},\"iframe\":{\"show\":\"iframe外链数据\",\"des\":\"iframe外链数据\",\"ps\":\"0\",\"parse\":\"\"},\"link\":{\"show\":\"外链数据\",\"des\":\"外部网站播放链接\",\"ps\":\"0\",\"parse\":\"\"}}";
@Override
public void init(Context context) {
super.init(context);
try {
playerConfig = new JSONObject(playerString);
filterConfig = new JSONObject(filterString);
} catch (JSONException e) {
SpiderDebug.log(e);
}
}
/**
* 爬虫headers
*
* @param refererUrl
* @return
*/
protected HashMap<String, String> getHeaders(String refererUrl) {
HashMap<String, String> headers = new HashMap<>();
headers.put("method", "GET");
if (!TextUtils.isEmpty(refererUrl)) {
headers.put("Referer", refererUrl);
}
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");
return headers;
}
/**
* 获取分类数据 + 首页最近更新视频列表数据
*
* @param filter 是否开启筛选 关联的是 软件设置中 首页数据源里的筛选开关
* @return
*/
@Override
public String homeContent(boolean filter) {
try {
String url = siteUrl + '/';
Document doc = Jsoup.parse(OkHttpUtil.string(url, getHeaders(siteUrl)));
Elements elements = doc.select("ul.nav-menu>li>a[href*='vodtype']");
JSONArray classes = new JSONArray();
for (Element ele : elements) {
String name = ele.text();
String href = ele.attr("href");
Matcher mather = regexCategory.matcher(href);
if (!mather.find())
continue;
// 把分类的id和名称取出来加到列表里
String id = mather.group(1).trim();
JSONObject jsonObject = new JSONObject();
jsonObject.put("type_id", id);
jsonObject.put("type_name", name);
classes.put(jsonObject);
}
JSONObject result = new JSONObject();
if (filter) {
result.put("filters", filterConfig);
}
result.put("class", classes);
try {
// 取首页推荐视频列表
Elements list = doc.select("ul.myui-vodlist > li > div.myui-vodlist__box > a");
JSONArray videos = new JSONArray();
for (int i = 0; i < list.size(); i++) {
Element vod = list.get(i);
String title = vod.attr("title");
String cover = vod.attr("data-original");
String remark = "";
Element remarkEle = vod.selectFirst("span.pic-text");
if (remarkEle != null) {
remark = remarkEle.text();
}
Matcher matcher = regexVoddetail.matcher(vod.attr("href"));
if (!matcher.find())
continue;
String id = matcher.group(1);
JSONObject v = new JSONObject();
v.put("vod_id", id);
v.put("vod_name", title);
v.put("vod_pic", cover);
v.put("vod_remarks", remark);
videos.put(v);
}
result.put("list", videos);
} catch (Exception e) {
SpiderDebug.log(e);
}
return result.toString();
} catch (Exception e) {
SpiderDebug.log(e);
}
return "";
}
/**
* 获取分类信息数据
*
* @param tid 分类id
* @param pg 页数
* @param filter 同homeContent方法中的filter
* @param extend 筛选参数{k:v, k1:v1}
* @return
*/
@Override
public String categoryContent(String tid, String pg, boolean filter, HashMap<String, String> extend) {
try {
int page = 1;
TreeMap<String, String> ext = new TreeMap<>();
if (!TextUtils.isEmpty(pg) && Integer.parseInt(pg.trim()) > 1) {
page = Integer.parseInt(pg.trim());
ext.put("page", page + "");
}
if (extend != null && extend.size() > 0) {
ext.putAll(extend);
}
ext.put("id", tid);
List<String> kv = new ArrayList<>();
for (Map.Entry<String, String> entry : ext.entrySet()) {
if ("".equals(entry.getValue())) {
continue;
}
kv.add(entry.getKey() + "/" + entry.getValue());
}
String params = TextUtils.join("/", kv);
String url = siteUrl + "/vodshow/" + params + ".html";
String html = OkHttpUtil.string(url, getHeaders(siteUrl));
Document doc = Jsoup.parse(html);
JSONObject result = new JSONObject();
int pageCount = 1;
// 取页码相关信息
Elements pageInfo = doc.select("ul.myui-page li.visible-xs > a");
if (pageInfo.size() > 0) {
String text = pageInfo.text();
pageCount = Integer.parseInt(text.split("/")[1]);
}
JSONArray videos = new JSONArray();
// 取当前分类页的视频列表
Elements list = doc.select("ul.myui-vodlist > li > div > a");
for (int i = 0; i < list.size(); i++) {
Element vod = list.get(i);
String title = vod.attr("title");
String cover = vod.attr("data-original");
String remark = "";
Element remarkEle = vod.selectFirst("span.pic-text");
if (remarkEle != null) {
remark = remarkEle.text();
}
Matcher matcher = regexVoddetail.matcher(vod.attr("href"));
if (matcher.find()) {
String vodId = matcher.group(1);
JSONObject v = new JSONObject();
v.put("vod_id", vodId);
v.put("vod_name", title);
v.put("vod_pic", cover);
v.put("vod_remarks", remark);
videos.put(v);
}
}
result.put("page", page);
result.put("pagecount", pageCount);
result.put("limit", 48);
result.put("total", pageCount <= 1 ? videos.length() : pageCount * 48);
result.put("list", videos);
return result.toString();
} catch (Exception e) {
SpiderDebug.log(e);
}
return "";
}
/**
* 视频详情信息
*
* @param ids 视频id
* @return
*/
@Override
public String detailContent(List<String> ids) {
try {
// 视频详情url
String url = siteUrl + "/voddetail/" + ids.get(0) + ".html";
Document doc = Jsoup.parse(OkHttpUtil.string(url, getHeaders(siteUrl)));
JSONObject result = new JSONObject();
JSONObject vodList = new JSONObject();
// 取基本数据
String cover = doc.selectFirst("div.myui-content__thumb > a > img").attr("data-original");
String title = doc.selectFirst("div.myui-content__detail > h1").text();
String desc = doc.selectFirst("#desc span.data").text();
vodList.put("vod_id", ids.get(0));
vodList.put("vod_name", title);
vodList.put("vod_pic", cover);
vodList.put("vod_content", desc);
Map<String, String> vod_play = new LinkedHashMap<>();
// 取播放列表数据
Elements sources = doc.select("a[href*='playlist']");
Elements sourceList = doc.select("div[id*='playlist']");
for (int i = 0; i < sources.size(); i++) {
Element source = sources.get(i);
String sourceName = source.text();
boolean found = false;
for (Iterator<String> it = playerConfig.keys(); it.hasNext(); ) {
String flag = it.next();
if (playerConfig.getJSONObject(flag).getString("show").equals(sourceName)) {
// sourceName = flag;
found = true;
break;
}
}
if (found) {
String playList = "";
Elements playListA = sourceList.get(i).select("a");
List<String> vodItems = new ArrayList<>();
for (int j = 0; j < playListA.size(); j++) {
Element vod = playListA.get(j);
Matcher matcher = regexPlay.matcher(vod.attr("href"));
if (matcher.find()) {
String playURL = matcher.group(1);
String playUrlName = vod.text();
vodItems.add(playUrlName + "$" + playURL);
}
}
if (vodItems.size() > 0) {
playList = TextUtils.join("#", vodItems);
vod_play.put(sourceName, playList);
}
}
}
if (vod_play.size() > 0) {
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 "";
}
/**
* 获取视频播放信息
*
* @param flag 播放源
* @param id 视频id
* @param vipFlags 所有可能需要vip解析的源
* @return
*/
@Override
public String playerContent(String flag, String id, List<String> vipFlags) {
try {
// 播放页 url
String url = siteUrl + "/vodplay/" + id + ".html";
Document doc = Jsoup.parse(OkHttpUtil.string(url, getHeaders(siteUrl)));
Elements allScript = doc.select("script");
JSONObject result = new JSONObject();
Map<String, String> playHeader = new HashMap<>();
playHeader.put("User-Agent", " Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36");
result.put("header", new JSONObject(playHeader).toString());
result.put("parse", "0");
result.put("playUrl", "");
for (int i = 0; i < allScript.size(); i++) {
String scContent = allScript.get(i).html().trim();
if (scContent.startsWith("var player_")) { // 取直链
int start = scContent.indexOf('{');
int end = scContent.lastIndexOf('}') + 1;
String json = scContent.substring(start, end);
JSONObject player = new JSONObject(json);
String videoUrl = player.optString("url");
String from = player.optString("from");
if (from.equals("")) {
from = "tkqp";
}
if (Misc.isVideoFormat(videoUrl)) {
result.put("url", videoUrl);
return result.toString();
}
JSONObject playJxConfig = playerConfig.optJSONObject(from);
String parseUrl = playJxConfig.optString("parse");
Map<String, String> paramsMap = new HashMap<>();
paramsMap.put("url", videoUrl);
String parseHtml = OkHttpUtil.string(parseUrl + videoUrl, getHeaders(siteUrl));
Matcher tokenMatcher = regexBtToken.matcher(parseHtml);
Matcher enurlMatcher = regexEnurl.matcher(parseHtml);
if (tokenMatcher.find() && enurlMatcher.find()) {
String token = tokenMatcher.group(1);
String enurl = enurlMatcher.group(1);
byte[] decode = Base64.decode(enurl, Base64.DEFAULT);
String realurl = AES.decryptOfAesCbcPkcs7(decode, "7692AA70EEF92B42".getBytes(), token.getBytes());
result.put("url", realurl);
return result.toString();
}
break;
}
}
return result.toString();
} catch (Exception e) {
SpiderDebug.log(e);
}
return "";
}
@Override
public String searchContent(String key, boolean quick) {
try {
long currentTime = System.currentTimeMillis();
String url = siteUrl + "/index.php/ajax/suggest?mid=1&wd=" + URLEncoder.encode(key) + "&limit=10&timestamp=" + currentTime;
JSONObject searchResult = new JSONObject(OkHttpUtil.string(url, getHeaders(siteUrl)));
JSONObject result = new JSONObject();
JSONArray videos = new JSONArray();
if (searchResult.getInt("total") > 0) {
JSONArray lists = new JSONArray(searchResult.getString("list"));
for (int i = 0; i < lists.length(); i++) {
JSONObject vod = lists.getJSONObject(i);
String id = vod.getString("id");
String title = vod.getString("name");
String cover = vod.getString("pic");
JSONObject v = new JSONObject();
v.put("vod_id", id);
v.put("vod_name", title);
v.put("vod_pic", cover);
v.put("vod_remarks", "");
videos.put(v);
}
}
result.put("list", videos);
return result.toString();
} catch (Exception e) {
SpiderDebug.log(e);
}
return "";
}
}
@@ -0,0 +1,90 @@
package com.github.catvod.spider;
import android.content.Context;
import com.github.catvod.crawler.Spider;
import com.github.catvod.crawler.SpiderDebug;
import com.github.catvod.utils.okhttp.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.URLEncoder;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Yisou extends Spider {
private static final Pattern aliyun = Pattern.compile("(https://www.aliyundrive.com/s/[^\"]+)");
private PushAgent yisou;
public String detailContent(List<String> list) {
try {
return yisou.detailContent(list);
} catch (Exception e) {
SpiderDebug.log(e);
}
return "";
}
public void init(Context context, String str) {
super.init(context, str);
yisou = new PushAgent();
yisou.init(context,str);
}
public String playerContent(String str, String str2, List<String> list) {
return yisou.playerContent(str, str2, list);
}
private Pattern regexVid = Pattern.compile("(\\S+)");
public String searchContent(String key, boolean quick) {
try {
if (quick)
return "";
String url = "https://yiso.fun/info?searchKey=" + URLEncoder.encode(key)+"&from=ali";
Document doc = Jsoup.parse(OkHttpUtil.string(url, null));
JSONObject result = new JSONObject();
JSONArray videos = new JSONArray();
// Elements list = doc.select("ul.newsList>li>div.li_con");
Elements list = doc.select("div.col-md-8>div.row-cards");
for (int i = 0; i < list.size(); i++) {
Element vod = list.get(i);
String title = "";
Elements titlelist = vod.select("h3.card-title>a>span");
for(int k = 0; k < titlelist.size(); k++){
title+=titlelist.get(k).text()
}
String cover = "";
String remark = vod.selectFirst("div.align-items-center>p.text-muted").text();
Matcher matcher = regexVid.matcher(vod.select("h3.card-title>a").attr("href"));
if (!matcher.find())
continue;
String id = matcher.group(1);
JSONObject v = new JSONObject();
//v.put("vod_id", vod.select("h3.card-title>a").attr("href"));
v.put("vod_id", id);
v.put("vod_name", title);
v.put("vod_pic", "https://inews.gtimg.com/newsapp_bt/0/13263837859/1000");
v.put("vod_remarks", remark);
videos.put(v);
}
result.put("list", videos);
return result.toString();
} catch (Exception e) {
SpiderDebug.log(e);
}
return "";
}
}
+227
View File
@@ -0,0 +1,227 @@
package com.github.catvod.spider;
import android.content.Context;
import com.github.catvod.crawler.Spider;
import com.github.catvod.spider.merge.Ms;
import com.github.catvod.spider.merge.W;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.List;
import org.json.JSONArray;
import org.json.JSONObject;
/* loaded from: classes.dex */
public class KanSJ extends Spider {
private static short[] $ = {648, 660, 660, 656, 730, 719, 719, 651, 641, 654, 660, 662, 718, 666, 659, 665, 666, 643, 665, 718, 643, 654, 2987, 2991, 2977, 2944, 2987, 2983, 3030, 2977, 2981, 2997, 2967, 2977, 2997, 2991, 2948, 3029, 2978, 2999, 2979, 2980, 2983, 2999, 2995, 2983, 2983, 3026, 2977, 2984, 2983, 2978, 2981, 2980, 2959, 2999, 2989, 2980, 2945, 2999, 2978, 2967, 2948, 2999, 3028, 2983, 2985, 3031, 2979, 2958, 2975, 2951, 2966, 3024, 2976, 2955, 2986, 2964, 2957, 2967, 2956, 2958, 2965, 2967, 2966, 2975, 2967, 2985, 2986, 3017, 2987, 3039, 2996, 2962, 2975, 2962, 2996, 2961, 2967, 2996, 2967, 2960, 3017, 3007, 2972, 2947, 2967, 3028, 3031, 2955, 2994, 2953, 2976, 2963, 2988, 3029, 2975, 2979, 3039, 2997, 2991, 2951, 2984, 3031, 2958, 3007, 2958, 2967, 3025, 3004, 2997, 3007, 2952, 2993, 2958, 2958, 2960, 2956, 2961, 2980, 3006, 3006, 2992, 2990, 2953, 3025, 2945, 2997, 2996, 3017, 2983, 2980, 2987, 2981, 2957, 2996, 2997, 2996, 2987, 2986, 2979, 2984, 2984, 2946, 2965, 3027, 2972, 3007, 2983, 3038, 2966, 2992, 2974, 2974, 2998, 2987, 2986, 2993, 2995, 3006, 2965, 2946, 2975, 2953, 2957, 3004, 2954, 2965, 2991, 2996, 2976, 3028, 3006, 2985, 2974, 2972, 3038, 2985, 2954, 3024, 2972, 2961, 2967, 2995, 2996, 2957, 2966, 3039, 2994, 2958, 2988, 2980, 2978, 2963, 3026, 2975, 2955, 3039, 3031, 3004, 3006, 2958, 3026, 2976, 2945, 2954, 2967, 2999, 2997, 3028, 2981, 2961, 2991, 2978, 2983, 2999, 2983, 2980, 2388, 2384, 2384, 2394, 2429, 2430, 2384, 2395, 2392, 2397, 2392, 2391, 2395, 2430, 2418, 2408, 2417, 2418, 2416, 2398, 2336, 2414, 2345, 2395, 2392, 2376, 2396, 2399, 2392, 2392, 2378, 2394, 2392, 2420, 2392, 2414, 2430, 2430, 2387, 2426, 2392, 2430, 2396, 2392, 2392, 2422, 2398, 2395, 2392, 2390, 2409, 2413, 2397, 2368, 2392, 2350, 2380, 2378, 2385, 2387, 2408, 2423, 2422, 2382, 2368, 2412, 2412, 2378, 2408, 2390, 2398, 2400, 2408, 2423, 2386, 2422, 2349, 2415, 2337, 2403, 2344, 2398, 2346, 2386, 2344, 2385, 2394, 2409, 2398, 2408, 2358, 2336, 2419, 2391, 2351, 2411, 2427, 2382, 2371, 2390, 2430, 2382, 2349, 2423, 2431, 2384, 2381, 2344, 2384, 2417, 2422, 2346, 2382, 2399, 2416, 2398, 2411, 2413, 2421, 2387, 2416, 2429, 2424, 2398, 2398, 2354, 2377, 2392, 2399, 2429, 2429, 2380, 2428, 2419, 2412, 2395, 2387, 2385, 2337, 2392, 2396, 2414, 2386, 2379, 2399, 2387, 2396, 2414, 2410, 2376, 2345, 2344, 2347, 2403, 2423, 2391, 2430, 2397, 2400, 2421, 2369, 2385, 2396, 2337, 2414, 2413, 2371, 2379, 2428, 2401, 2346, 2386, 2416, 2379, 2420, 2382, 2414, 2417, 2396, 2369, 2371, 2426, 2350, 2385, 2377, 2414, 2351, 2369, 2411, 2377, 2394, 2409, 2379, 2398, 2378, 2423, 2344, 2390, 2396, 2418, 2396, 2390, 2350, 2419, 2386, 2427, 2346, 2383, 2421, 2428, 2385, 2430, 2382, 2394, 2382, 2409, 2395, 2389, 2368, 2389, 2392, 2430, 2388, 2395, 2392, 2392, 2396, 2394, 2430, 2368, 2395, 2383, 2412, 2412, 2385, 2422, 2399, 2418, 2418, 2351, 2368, 2376, 2381, 2390, 2391, 2400, 2428, 2431, 2346, 2377, 2428, 2381, 2351, 2422, 2385, 2348, 2392, 2409, 2417, 2371, 2398, 2431, 2401, 2394, 2344, 2409, 2344, 2376, 2376, 2417, 2429, 2346, 2424, 2415, 2388, 2337, 2427, 2344, 2427, 2385, 2401, 2418, 2430, 2395, 2385, 2337, 2398, 2416, 2349, 2431, 2350, 2395, 2413, 2424, 2385, 2394, 2371, 2416, 2427, 2399, 2368, 2428, 2371, 2429, 2409, 2387, 2431, 2384, 2429, 2346, 2377, 2399, 2383, 2408, 2416, 2384, 2389, 2379, 2347, 2411, 2428, 2427, 2387, 2348, 2409, 2411, 2387, 2409, 2399, 2400, 2431, 2385, 2421, 2346, 2379, 2383, 2408, 2380, 2371, 2336, 2392, 2403, 2377, 2412, 2420, 2385, 2379, 2379, 2397, 2348, 2387, 2384, 2394, 2351, 2368, 2392, 2350, 2415, 2395, 2394, 2430, 2348, 2350, 2347, 2349, 2381, 2337, 2383, 2428, 2430, 2336, 2394, 2401, 2381, 2429, 2385, 2403, 2400, 2427, 2368, 2389, 2394, 2414, 2369, 2424, 2397, 2368, 2399, 2381, 2421, 2382, 2345, 2358, 2351, 2423, 2423, 2417, 2344, 2430, 2377, 2422, 2376, 2387, 2395, 2392, 2377, 2408, 2427, 2408, 2348, 2430, 2418, 2369, 2394, 2417, 2354, 2422, 2358, 2397, 2411, 2409, 2381, 2350, 2418, 2408, 2416, 2424, 2347, 2426, 2381, 2412, 2423, 2349, 2348, 2369, 2388, 2394, 2420, 2368, 2381, 2416, 2386, 2378, 2417, 2419, 2420, 2388, 2412, 2419, 2384, 2383, 2377, 2394, 2354, 2358, 2390, 2349, 2346, 2424, 2396, 2411, 2379, 2409, 2412, 2389, 2427, 2428, 2416, 2415, 2401, 2384, 2351, 2395, 2336, 2369, 2408, 2392, 2337, 2349, 2344, 2420, 2378, 2377, 2427, 2337, 2412, 2381, 2380, 2409, 2427, 2410, 2394, 2376, 2376, 2397, 2415, 2428, 2396, 2394, 2401, 2421, 2386, 2431, 2409, 2408, 2345, 2344, 2408, 2358, 2358, 2401, 2392, 2369, 2427, 2346, 2421, 2389, 2354, 2428, 2354, 2377, 2350, 2397, 2369, 2344, 2337, 2382, 2337, 2428, 2418, 2354, 2421, 2389, 2413, 2369, 2422, 2380, 2397, 2417, 2400, 2386, 2396, 2395, 2347, 2426, 2351, 2403, 2385, 2390, 2336, 2430, 2351, 2392, 2358, 2351, 2431, 2385, 2430, 2401, 2347, 2397, 2387, 2385, 2344, 2354, 2415, 2423, 2368, 2420, 2419, 2385, 2416, 2416, 2385, 2347, 2376, 2410, 2422, 2377, 2401, 2392, 2418, 2396, 2392, 2420, 2391, 2424, 2379, 2400, 2345, 2389, 2348, 2421, 2371, 2381, 2390, 2409, 2378, 2388, 2395, 2350, 2348, 2351, 2397, 2416, 2414, 2386, 2431, 2430, 2421, 2391, 2336, 2392, 2394, 2398, 2421, 2430, 2428, 2382, 2391, 2349, 2347, 2385, 2384, 2391, 2430, 2389, 2414, 2423, 2420, 2416, 2337, 2397, 2428, 2358, 2412, 2383, 2348, 2403, 2384, 2354, 2424, 2386, 2378, 2427, 2381, 2421, 2411, 2388, 2399, 2398, 2399, 2350, 2336, 2426, 2336, 2409, 2390, 2416, 2371, 2380, 2431, 2348, 2383, 2369, 2347, 2412, 2345, 2354, 2414, 2387, 2392, 2395, 2418, 2351, 2398, 2429, 2424, 2427, 2378, 2423, 2380, 2427, 2381, 2411, 2378, 2390, 2337, 2414, 2415, 2345, 2344, 2394, 2379, 2422, 2415, 2349, 2418, 2381, 2377, 2387, 2368, 2392, 2427, 2379, 2401, 2399, 2348, 2418, 2349, 2384, 2428, 2379, 2395, 2368, 2384, 2401, 2422, 2419, 2418, 2347, 2427, 2423, 2398, 2389, 2378, 2396, 2368, 2382, 2411, 2350, 2388, 2389, 2354, 2416, 2426, 2411, 2347, 2426, 2348, 2382, 2391, 2337, 2371, 2376, 2382, 2418, 2428, 2388, 2403, 2426, 2417, 2395, 2346, 2378, 2388, 2384, 2376, 2387, 2392, 2397, 2398,
2403, 2383, 2351, 2379, 2385, 2415, 2401, 2358, 2351, 2397, 2394, 2403, 2389, 2415, 2378, 2411, 2413, 2385, 2380, 2423, 2400, 2431, 2386, 2400, 2394, 2417, 2344, 2336, 2413, 2394, 2348, 2417, 2401, 2400, 2383, 2400, 2412, 2369, 2388, 2392, 2421, 2386, 2429, 2376, 2384, 2403, 2379, 2378, 2416, 2381, 2384, 2390, 2416, 2379, 2368, 2358, 2348, 2385, 2414, 2415, 2383, 2416, 2337, 2371, 2394, 2383, 2415, 2368, 2420, 2385, 2376, 2350, 2423, 2345, 2369, 2398, 2368, 2399, 2429, 2387, 2346, 2410, 2350, 2376, 2340, 2340, 2346, 2350, 2336, 2305, 2346, 2342, 2391, 2336, 2340, 2356, 2326, 2336, 2356, 2350, 2309, 2388, 2339, 2358, 2338, 2341, 2342, 2358, 2354, 2342, 2342, 2387, 2336, 2345, 2342, 2339, 2340, 2341, 2318, 2358, 2348, 2341, 2304, 2358, 2340, 2325, 2318, 2315, 2323, 2342, 2312, 2348, 2390, 2345, 2319, 2305, 2348, 2385, 2355, 2327, 2317, 2318, 2327, 2388, 2322, 2358, 2304, 2399, 2384, 2341, 2399, 2336, 2313, 2305, 2380, 2314, 2376, 2348, 2305, 2384, 2352, 2333, 2380, 2312, 2359, 2324, 2305, 2355, 2305, 2316, 2327, 2340, 2327, 2327, 2325, 2306, 2358, 2385, 2317, 2390, 2319, 2339, 2307, 2359, 2309, 2342, 2309, 2319, 2399, 2384, 2380, 2318, 2322, 2324, 2333, 2340, 2307, 2304, 2356, 2326, 2309, 2314, 2376, 2335, 2325, 2399, 2387, 2359, 2337, 2350, 2308, 2352, 2323, 2337, 2386, 2313, 2313, 2307, 2356, 2388, 2325, 2335, 2347, 2326, 2312, 2398, 2338, 2346, 2304, 2339, 2325, 2340, 2380, 2334, 2355, 2307, 2306, 2353, 2336, 2340, 2385, 2317, 2316, 2322, 2399, 2315, 2325, 2398, 2337, 2304, 2355, 2359, 2357, 2305, 2380, 2347, 2305, 2346, 2357, 2385, 2386, 2347, 2306, 2324, 2367, 2315, 2317, 2389, 2307, 2319, 2314, 2350, 2398, 2359, 2339, 2376, 2335, 2337, 2312, 2323, 2358, 2338, 2376, 2366, 2327, 2324, 2340, 2346, 2306, 2312, 2321, 2353, 2390, 2333, 2333, 2320, 2350, 2339, 2342, 2358, 2342, 2341, 7332, 7328, 7328, 7338, 7309, 7326, 7328, 7339, 7336, 7341, 7336, 7335, 7339, 7310, 7298, 7320, 7297, 7298, 7296, 7342, 7376, 7326, 7385, 7339, 7336, 7352, 7340, 7343, 7336, 7336, 7354, 7338, 7336, 7300, 7340, 7326, 7310, 7310, 7331, 7309, 7336, 7310, 7340, 7336, 7336, 7302, 7342, 7339, 7336, 7330, 7324, 7330, 7358, 7385, 7338, 7310, 7323, 7356, 7387, 7343, 7377, 7323, 7321, 7334, 7300, 7334, 7330, 7303, 7308, 7388, 7338, 7341, 7315, 7322, 7329, 7326, 7304, 7309, 7366, 7391, 7307, 7377, 7321, 7366, 7325, 7307, 7353, 7391, 7310, 7362, 7313, 7376, 7335, 7362, 7354, 7298, 7330, 7300, 7300, 7325, 7388, 7341, 7320, 7353, 7358, 7340, 7335, 7385, 7376, 7322, 7339, 7324, 7329, 7315, 7327, 7391, 7330, 7391, 7315, 7332, 7331, 7387, 7339, 7330, 7321, 7324, 7307, 7366, 7342, 7327, 7315, 7310, 7377, 7356, 7297, 7313, 7304, 7385, 7345, 7300, 7308, 7309, 7384, 7333, 7308, 7327, 7340, 7324, 7320, 7299, 7385, 7352, 7312, 7336, 7334, 7322, 7333, 7390, 7331, 7335, 7384, 7388, 7356, 7344, 7333, 7320, 7334, 7354, 7390, 7312, 7358, 7327, 7385, 7358, 7339, 7332, 7376, 7343, 7366, 7389, 7325, 7377, 7313, 7329, 7323, 7298, 7325, 7391, 7313, 7308, 7358, 7353, 7347, 7387, 7342, 7344, 7299, 7385, 7377, 7353, 7366, 7340, 7358, 7296, 7384, 7336, 7357, 7376, 7296, 7300, 7326, 7328, 7313, 7391, 7296, 7376, 7345, 7345, 7353, 7353, 7336, 7310, 7332, 7339, 7336, 7336, 7340, 7338, 7310, 7344, 7339, 7389, 7343, 7322, 7327, 7390, 7358, 7302, 7341, 7389, 7303, 7330, 7359, 7302, 7324, 7340, 7384, 7311, 7303, 7384, 7339, 7321, 7326, 7384, 7312, 7299, 7308, 7334, 7332, 7301, 7389, 7311, 7356, 7355, 7343, 7302, 7307, 7300, 7340, 7330, 7333, 7391, 7301, 7340, 7390, 7298, 7312, 7308, 7299, 7329, 7352, 7324, 7384, 7307, 7377, 7304, 7389, 7310, 7312, 7387, 7301, 7357, 7329, 7306, 7357, 7352, 7336, 7341, 7325, 7341, 7331, 7356, 7298, 7333, 7320, 7341, 7309, 7311, 7315, 7389, 7311, 7309, 7332, 7333, 7312, 7389, 7299, 7332, 7301, 7366, 7338, 7327, 7387, 7343, 7331, 7385, 7330, 7386, 7315, 7330, 7345, 7352, 7330, 7359, 7297, 7332, 7321, 7357, 7306, 7303, 7309, 7333, 7333, 7299, 7298, 7309, 7355, 7327, 7344, 7312, 7323, 7309, 7300, 7312, 7335, 7355, 7307, 7358, 7386, 7347, 7310, 7297, 7332, 7326, 7306, 7326, 7335, 7323, 7300, 7298, 7344, 7326, 7352, 7335, 7356, 7315, 7390, 7312, 7386, 7338, 7327, 7311, 7385, 7362, 7321, 7335, 7329, 7297, 7340, 7306, 7298, 7390, 7353, 7347, 7339, 7306, 7386, 7301, 7377, 7324, 7326, 7352, 7331, 7339, 7336, 7335, 7302, 7352, 7386, 7296, 7321, 7376, 7327, 7304, 7377, 7302, 7353, 7298, 7313, 7342, 7391, 7377, 7296, 7354, 7303, 7359, 7315, 7341, 7336, 7354, 7303, 7320, 7334, 7342, 7341, 7309, 7310, 7341, 7341, 7376, 7307, 7328, 7312, 7327, 7304, 7385, 7354, 7390, 7333, 7385, 7326, 7296, 7313, 7385, 7306, 7297, 7306, 7312, 7385, 7385, 7338, 7298, 7300, 7302, 7355, 7390, 7322, 7323, 7296, 7327, 7353, 7355, 7313, 7297, 7332, 7377, 7313, 7339, 7320, 7391, 7296, 7353, 7308, 7358, 7332, 7300, 7302, 7345, 7353, 7313, 7356, 7338, 7352, 7352, 7341, 7331, 7344, 7347, 7328, 7354, 7331, 7376, 7389, 7390, 7385, 7334, 7359, 7323, 7343, 7359, 7302, 7387, 7389, 7324, 7325, 7299, 7362, 7385, 7299, 7324, 7390, 7307, 7311, 7336, 7307, 7343, 7341, 7320, 7307, 7387, 7324, 7343, 7313, 7312, 7332, 7391, 7311, 7345, 7330, 7300, 7358, 7308, 7308, 7335, 7341, 7333, 7331, 7328, 7327, 7354, 7352, 7386, 7308, 7311, 7301, 7391, 7354, 7331, 7328, 7344, 7331, 7310, 7387, 7297, 7362, 7321, 7345, 7353, 7386, 7387, 7354, 7309, 7330, 7331, 7341, 7335, 7297, 7336, 7339, 7357, 7336, 7298, 7339, 7309, 7339, 7311, 7306, 7352, 7329, 7385, 7358, 7322, 7298, 7390, 7301, 7329, 7321, 7323, 7359, 7322, 7310, 7344, 7307, 7347, 7299, 7342, 7331, 7355, 7325, 7339, 7345, 7330, 7384, 7331, 7330, 7307, 7385, 7387, 7366, 7307, 7390, 7366, 7356, 7335, 7310, 7362, 7339, 7310, 7359, 7357, 7342, 7386, 7358, 7356, 7338, 7309, 7384, 7324, 7347, 7352, 7301, 7388, 7345, 7331, 7376, 7344, 7336, 7389, 7343, 7331, 7334, 7327, 7303, 7312, 7325, 7385, 7315, 7389, 7336, 7310, 7355, 7297, 7359, 7331, 7297, 7321, 7332, 7301, 7336, 7298, 7340, 7336, 7303, 7298, 7315, 7388, 7302, 7313, 7345, 7376, 7388, 7324, 7384, 7309, 7362, 7300, 7339, 7335, 7296, 7385, 7300, 7315, 7300, 7308, 7334, 7343, 7352, 7329,
7355, 7357, 7309, 7302, 7321, 7324, 7315, 7334, 7320, 7333, 7341, 7297, 7385, 7322, 7366, 7312, 7355, 7327, 7313, 7329, 7388, 7384, 7324, 7386, 7345, 7344, 7296, 7390, 7376, 7330, 7326, 7308, 7356, 7390, 7341, 7341, 7302, 7355, 7313, 7307, 7353, 7306, 7340, 7347, 7343, 7342, 7313, 7330, 7328, 7321, 7300, 7341, 7354, 7385, 7331, 7312, 7301, 7384, 7296, 7326, 7331, 7339, 7336, 7328, 7334, 7341, 7296, 7391, 7354, 7387, 7353, 7359, 7296, 7302, 7302, 7358, 7304, 7312, 7326, 7376, 7362, 7301, 7353, 7376, 7321, 7327, 7320, 7334, 7333, 7336, 7340, 7326, 7328, 7366, 7315, 7334, 7386, 7388, 7296, 7356, 7312, 7330, 7320, 7334, 7377, 7323, 7296, 7315, 7311, 7386, 7343, 7343, 7329, 7321, 7376, 7344, 7321, 7315, 7335, 7315, 7324, 7310, 7313, 7345, 7312, 7301, 7306, 7333, 7386, 7385, 7310, 7388, 7354, 7315, 7377, 7308, 7359, 7356, 7328, 7320, 7311, 7299, 7304, 7355, 7320, 7306, 7354, 7338, 7310, 7380, 7912, 2474, 2444, 2458, 2445, 2514, 2494, 2456, 2458, 2449, 2443, 1998, 2027, 2022, 2044, 2019, 2017, 1957, 1976, 1956, 1979, 1956, 1978, 1962, 1954, 1990, 2019, 2020, 2047, 2034, 1969, 1962, 2015, 1969, 1962, 1995, 2020, 2030, 2040, 2021, 2019, 2030, 1962, 1979, 1978, 1969, 1962, 2010, 1992, 1999, 1991, 1978, 1978, 1962, 1992, 2047, 2019, 2022, 2030, 1957, 2011, 1985, 2011, 1979, 1956, 1979, 1971, 1978, 1971, 1979, 1970, 1956, 1978, 1978, 1979, 1955, 7368, 7377, 7386, 7393, 7372, 7387, 7379, 7391, 7372, 7381, 7373, 3653, 3676, 3671, 3692, 3651, 3674, 3664, 426, 431, 427, 431, 434, 2808, 2785, 2794, 2769, 2784, 2799, 2787, 2795, 1500, 1485, 1483, 1481, 1461, 1452, 1447, 1436, 1450, 1447, 4758, 4743, 4737, 4739, 4741, 4745, 4755, 4744, 4754, 110, 117, 110, 123, 118, 1261, 1256, 1266, 1269, 5796, 5803, 5798, 5812, 5812, 13384, 13396, 13392, 13379, 13679, 13666, 13675, 13694, 7533, 7550, 7529, 7533, 14304, 14334, 14335, 14327, 14335, 14251, 14250, 14267, 14254, 14246, 14243, 14305, 14271, 14247, 14271, 14304, 14254, 14271, 14271, 14304, 14265, 14246, 14251, 14250, 14240, 14320, 14313, 14267, 14246, 14251, 14322, 3727, 3786, 3781, 3784, 3802, 3802, 3732, 13109, 13170, 13153, 13174, 13170, 13102, 1531, 1444, 1464, 1468, 1455, 1504, 921, 975, 984, 898, -1690, -1665, -1676, -1713, -1696, -1668, -1679, -1687, -1713, -1691, -1694, -1668, -4962, -4985, -4980, -4937, -4968, -4988, -4983, -4975, -4937, -4978, -4966, -4985, -4987, -16281, -16258, -16267, -16306, -16270, -16258, -16257, -16283, -16268, -16257, -16283, -4343, -4336, -4325, -4320, -4325, -4330, -4339, -4326, -4324, -4341, -4336, -4339, -15761, -15754, -15747, -15802, -15752, -15750, -15763, -15754, -15765, -3997, -3974, -3983, -4022, -3993, -3984, -3976, -3980, -3993, -3970, -3994, -2459, -2436, -2441, -2484, -2446, -2463, -2442, -2446, -3375, -3384, -3389, -3336, -3362, -3390, -3386, -3371, -7980, -7987, -7994, -7939, -7982, -7989, -7999, -6424, -6415, -6406, -6463, -6416, -6401, -6413, -6405, -5794, -5817, -5812, -5769, -5823, -5812, -7819, -7824, -7830, -7827, -5561, -5543, -5544, -5552, -5544, -5604, -5602, -5562, -5608, -5632, -5608, -5561, -5608, -5606, -5625, -5602, -5631, -5620, -5619, -5561, -5602, -5625, -5620, -5561, -5545, -5623, -5621, -5547, -5620, -5619, -5604, -5623, -5631, -5628, -5554, -5631, -5620, -5605, -5547, -6431, -6420, -6427, -6416, -6454, -6405, -6412, -6408, -6416, -14907, -14884, -14889, -14868, -14896, -14881, -14894, -14912, -14912, -6217, -6204, -6498, 32013, 32045, 32116, 32034, 32047, 32038, 32051, 32009, 32063, 32050, 32116, 32108, 32116, 32103, 32116, 32122, 32116, 32034, 32047, 32038, 32051, 32009, 32056, 32055, 32059, 32051, 32116, 32108, 32116, 2147, 8743, 32116, 32043, 32122, 32045, 32116, 32034, 32047, 32038, 32051, 32009, 32063, 32050, 32116, 32108, 32116, 32100, 32116, 32122, 32116, 32034, 32047, 32038, 32051, 32009, 32056, 32055, 32059, 32051, 32116, 32108, 32116, 2147, -2928, 12081, 32116, 32043, 32122, 32045, 32116, 32034, 32047, 32038, 32051, 32009, 32063, 32050, 32116, 32108, 32116, 32101, 32102, 32116, 32122, 32116, 32034, 32047, 32038, 32051, 32009, 32056, 32055, 32059, 32051, 32116, 32108, 32116, 6323, -5441, 12081, 32116, 32043, 32122, 32045, 32116, 32034, 32047, 32038, 32051, 32009, 32063, 32050, 32116, 32108, 32116, 32100, 32111, 32116, 32122, 32116, 32034, 32047, 32038, 32051, 32009, 32056, 32055, 32059, 32051, 32116, 32108, 32116, 5745, 728, 12081, 32116, 32043, 32122, 32045, 32116, 32034, 32047, 32038, 32051, 32009, 32063, 32050, 32116, 32108, 32116, 32101, 32101, 32116, 32122, 32116, 32034, 32047, 32038, 32051, 32009, 32056, 32055, 32059, 32051, 32116, 32108, 32116, 4985, 11942, 12081, 32116, 32043, 32122, 32045, 32116, 32034, 32047, 32038, 32051, 32009, 32063, 32050, 32116, 32108, 32116, 32101, 32116, 32122, 32116, 32034, 32047, 32038, 32051, 32009, 32056, 32055, 32059, 32051, 32116, 32108, 32116, 938, -212, 32116, 32043, 32122, 32045, 32116, 32034, 32047, 32038, 32051, 32009, 32063, 32050, 32116, 32108, 32116, 32098, 32116, 32122, 32116, 32034, 32047, 32038, 32051, 32009, 32056, 32055, 32059, 32051, 32116, 32108, 32116, 12286, 4733, 32116, 32043, 32011, 29529, 29526, 29531, 29513, 29513, 26445, 26388, 26375, 26388, 26380, 26477, 26445, 26388, 26461, 26451, 26447, 26388, 26380, 26388, 26434, 26447, 26438, 26451, 26388, 26394, 26388, 26456, 26455, 26459, 26451, 26388, 26380, 26388, 6989, 12477, 26388, 26394, 26388, 26432, 26455, 26458, 26435, 26451, 26388, 26380, 26477, 26445, 26388, 26456, 26388, 26380, 26388, 13918, -2082, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 12970, 13649, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 12970, 13649, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 5383, 2035, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 5383, 2035, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 1894, 1824, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 1894, 1824, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 13726, 10346, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 13726, 10346, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 7911, 14669, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 7911, 14669, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 13649, 2035, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 13649, 2035, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 1326, 10687, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 1326, 10687, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, -5040, 13340, 26388, 26394, 26388, 26432, 26388, 26380, 26388, -5040, 13340, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 5529, 6236, 26388, 26394, 26388, 26432,
26388, 26380, 26388, 5529, 6236, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 13726, 4621, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 13726, 4621, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 15985, 14669, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 15985, 14669, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 3152, 10390, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 3152, 10390, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 13988, -3745, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 13988, -3745, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 156, 1326, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 156, 1326, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 1894, 1824, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 1894, 1824, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 1946, 4775, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 1946, 4775, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 2044, 1964, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 2044, 1964, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 6649, 13902, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 6649, 13902, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, -3996, 275, 26388, 26394, 26388, 26432, 26388, 26380, 26388, -3996, 275, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 689, -6836, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 689, -6836, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 14488, 4611, 14407, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 14488, 4611, 14407, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 13522, -4109, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 13522, -4109, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 13488, 13508, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 13488, 13508, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, -5914, 13726, 26388, 26394, 26388, 26432, 26388, 26380, 26388, -5914, 13726, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 13994, 103, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 13994, 103, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 13833, 7635, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 13833, 7635, 26388, 26443, 26475, 26443, 26394, 26445, 26388, 26461, 26451, 26447, 26388, 26380, 26388, 26455, 26436, 26451, 26455, 26388, 26394, 26388, 26456, 26455, 26459, 26451, 26388, 26380, 26388, 12294, 13324, 26388, 26394, 26388, 26432, 26455, 26458, 26435, 26451, 26388, 26380, 26477, 26445, 26388, 26456, 26388, 26380, 26388, 13918, -2082, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 14003, 12294, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 14003, 12294, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 10523, 12747, 15889, -3728, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 15889, -3728, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 10523, 12747, -337, 2329, 26388, 26394, 26388, 26432, 26388, 26380, 26388, -337, 2329, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 10523, 12747, 13510, 2376, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 13510, 2376, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 6328, 12747, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 6328, 12747, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 3043, 12747, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 3043, 12747, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, -6713, 12747, 26388, 26394, 26388, 26432, 26388, 26380, 26388, -6713, 12747, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 723, 26, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 723, 26, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, -3873, 12747, 26388, 26394, 26388, 26432, 26388, 26380, 26388, -3873, 12747, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 14465, 12747, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 14465, 12747, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 3014, 12747, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 3014, 12747, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 13382, 14736, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 13382, 14736, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 1593, 15889, 13599, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 1593, 15889, 13599, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, -4535, 5339, 5487, 26388, 26394, 26388, 26432, 26388, 26380, 26388, -4535, 5339, 5487, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 13718, 1481, 15889, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 13718, 1481, 15889, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 13888, 10720, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 13888, 10720, 26388, 26443, 26475, 26443, 26394, 26445, 26388, 26461, 26451, 26447, 26388, 26380, 26388, 26447, 26451, 26455, 26436, 26388, 26394, 26388, 26456, 26455, 26459, 26451, 26388, 26380, 26388, 14658, 10699, 26388, 26394, 26388, 26432, 26455, 26458, 26435, 26451, 26388, 26380, 26477, 26445, 26388, 26456, 26388, 26380, 26388, 13918, -2082, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 26372, 26374, 26372, 26372, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 26372, 26374, 26372, 26372, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 26372, 26374, 26372, 26375, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 26372, 26374, 26372, 26375, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 26372, 26374, 26372, 26374, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 26372, 26374, 26372, 26374, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 26372, 26374, 26375, 26383, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 26372, 26374, 26375, 26383, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 26372, 26374, 26375, 26382, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 26372, 26374, 26375, 26382, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 26372, 26374, 26375, 26369, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 26372, 26374, 26375, 26369, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 26372, 26374, 26375, 26368, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 26372, 26374, 26375, 26368, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 26372, 26374, 26375, 26371, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 26372, 26374, 26375, 26371, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 26372, 26374, 26375, 26370, 26388, 26394, 26388, 26432, 26388, 26380,
26388, 26372, 26374, 26375, 26370, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 26372, 26374, 26375, 26373, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 26372, 26374, 26375, 26373, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 26372, 26374, 26375, 26372, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 26372, 26374, 26375, 26372, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 26372, 26374, 26375, 26375, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 26372, 26374, 26375, 26375, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 26372, 26374, 26375, 26374, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 26372, 26374, 26375, 26374, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 26372, 26374, 26374, 26383, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 26372, 26374, 26374, 26383, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 26372, 26374, 26374, 26382, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 26372, 26374, 26374, 26382, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 26372, 26374, 26374, 26369, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 26372, 26374, 26374, 26369, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 26372, 26374, 26374, 26368, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 26372, 26374, 26374, 26368, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 26372, 26374, 26374, 26371, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 26372, 26374, 26374, 26371, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 26372, 26374, 26374, 26370, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 26372, 26374, 26374, 26370, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 26372, 26374, 26374, 26373, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 26372, 26374, 26374, 26373, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 26372, 26374, 26374, 26372, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 26372, 26374, 26374, 26372, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 26372, 26374, 26374, 26375, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 26372, 26374, 26374, 26375, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 26372, 26374, 26374, 26374, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 26372, 26374, 26374, 26374, 26388, 26443, 26475, 26443, 26475, 26394, 26388, 26372, 26388, 26380, 26477, 26445, 26388, 26461, 26451, 26447, 26388, 26380, 26388, 26434, 26447, 26438, 26451, 26388, 26394, 26388, 26456, 26455, 26459, 26451, 26388, 26380, 26388, 6989, 12477, 26388, 26394, 26388, 26432, 26455, 26458, 26435, 26451, 26388, 26380, 26477, 26445, 26388, 26456, 26388, 26380, 26388, 13918, -2082, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 13522, -4109, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 13522, -4109, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 1326, 10687, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 1326, 10687, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, -3996, 275, 14144, 14329, 26388, 26394, 26388, 26432, 26388, 26380, 26388, -3996, 275, 14144, 14329, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 12970, 13649, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 12970, 13649, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 15488, 14747, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 15488, 14747, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 5529, 6236, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 5529, 6236, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 13726, 10346, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 13726, 10346, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 15985, 14669, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 15985, 14669, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 13649, 2035, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 13649, 2035, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 13488, 13508, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 13488, 13508, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 6649, 13902, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 6649, 13902, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 10583, 103, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 10583, 103, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 2035, 345, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 2035, 345, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 12912, 1326, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 12912, 1326, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 6247, 13649, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 6247, 13649, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 13888, 10720, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 13888, 10720, 26388, 26443, 26475, 26443, 26394, 26445, 26388, 26461, 26451, 26447, 26388, 26380, 26388, 26455, 26436, 26451, 26455, 26388, 26394, 26388, 26456, 26455, 26459, 26451, 26388, 26380, 26388, 12294, 13324, 26388, 26394, 26388, 26432, 26455, 26458, 26435, 26451, 26388, 26380, 26477, 26445, 26388, 26456, 26388, 26380, 26388, 13918, -2082, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 14003, 12294, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 14003, 12294, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 10523, 12747, 15889, -3728, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 15889, -3728, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 10523, 12747, 13510, 2376, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 10523, 12747, 13510, 2376, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 10523, 12747, -337, 2329, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 10523, 12747, -337, 2329, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, -3873, 12747, 26388, 26394, 26388, 26432, 26388, 26380, 26388, -3873, 12747, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 723, 26, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 723, 26, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 6328, 12747, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 6328, 12747, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 3014, 12747, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 3014, 12747, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, -6713, 12747, 26388, 26394, 26388, 26432, 26388, 26380, 26388, -6713, 12747, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 646, 13718, 12375, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 646, 13718, 12375, 26388, 26443, 26394, 26445, 26388, 26456, 26388,
26380, 26388, 13888, 10720, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 13888, 10720, 26388, 26443, 26475, 26443, 26394, 26445, 26388, 26461, 26451, 26447, 26388, 26380, 26388, 26447, 26451, 26455, 26436, 26388, 26394, 26388, 26456, 26455, 26459, 26451, 26388, 26380, 26388, 14658, 10699, 26388, 26394, 26388, 26432, 26455, 26458, 26435, 26451, 26388, 26380, 26477, 26445, 26388, 26456, 26388, 26380, 26388, 13918, -2082, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 26372, 26374, 26372, 26372, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 26372, 26374, 26372, 26372, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 26372, 26374, 26372, 26375, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 26372, 26374, 26372, 26375, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 26372, 26374, 26372, 26374, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 26372, 26374, 26372, 26374, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 26372, 26374, 26375, 26383, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 26372, 26374, 26375, 26383, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 26372, 26374, 26375, 26382, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 26372, 26374, 26375, 26382, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 26372, 26374, 26375, 26369, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 26372, 26374, 26375, 26369, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 26372, 26374, 26375, 26368, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 26372, 26374, 26375, 26368, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 26372, 26374, 26375, 26371, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 26372, 26374, 26375, 26371, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 26372, 26374, 26375, 26370, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 26372, 26374, 26375, 26370, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 26372, 26374, 26375, 26373, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 26372, 26374, 26375, 26373, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 26372, 26374, 26375, 26372, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 26372, 26374, 26375, 26372, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 26372, 26374, 26375, 26375, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 26372, 26374, 26375, 26375, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 26372, 26374, 26375, 26374, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 26372, 26374, 26375, 26374, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 26372, 26374, 26374, 26383, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 26372, 26374, 26374, 26383, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 26372, 26374, 26374, 26382, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 26372, 26374, 26374, 26382, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 26372, 26374, 26374, 26369, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 26372, 26374, 26374, 26369, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 26372, 26374, 26374, 26368, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 26372, 26374, 26374, 26368, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 26372, 26374, 26374, 26371, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 26372, 26374, 26374, 26371, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 26372, 26374, 26374, 26370, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 26372, 26374, 26374, 26370, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 26372, 26374, 26374, 26373, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 26372, 26374, 26374, 26373, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 26372, 26374, 26374, 26372, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 26372, 26374, 26374, 26372, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 26372, 26374, 26374, 26375, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 26372, 26374, 26374, 26375, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 26372, 26374, 26374, 26374, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 26372, 26374, 26374, 26374, 26388, 26443, 26475, 26443, 26475, 26394, 26388, 26370, 26388, 26380, 26477, 26445, 26388, 26461, 26451, 26447, 26388, 26380, 26388, 26434, 26447, 26438, 26451, 26388, 26394, 26388, 26456, 26455, 26459, 26451, 26388, 26380, 26388, 6989, 12477, 26388, 26394, 26388, 26432, 26455, 26458, 26435, 26451, 26388, 26380, 26477, 26445, 26388, 26456, 26388, 26380, 26388, 13918, -2082, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 2035, 1577, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 2035, 1577, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 7911, 14669, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 7911, 14669, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 6107, -4234, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 6107, -4234, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 1182, 4912, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 1182, 4912, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 808, 7207, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 808, 7207, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 13988, -3745, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 13988, -3745, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, -7381, -6977, 26388, 26394, 26388, 26432, 26388, 26380, 26388, -7381, -6977, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 3863, 12763, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 3863, 12763, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 13726, 10346, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 13726, 10346, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 12, 1326, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 12, 1326, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, -5914, 13726, 26388, 26394, 26388, 26432, 26388, 26380, 26388, -5914, 13726, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 1326, 10687, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 1326, 10687, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 15143, 14658, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 15143, 14658, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 15143, 15941, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 15143, 15941, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 7688, 10284, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 7688, 10284, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 13481, 13613, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 13481,
13613, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 10628, 15462, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 10628, 15462, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 4604, 332, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 4604, 332, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 13703, 14561, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 13703, 14561, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 13888, 10720, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 13888, 10720, 26388, 26443, 26475, 26443, 26394, 26445, 26388, 26461, 26451, 26447, 26388, 26380, 26388, 26455, 26436, 26451, 26455, 26388, 26394, 26388, 26456, 26455, 26459, 26451, 26388, 26380, 26388, 12294, 13324, 26388, 26394, 26388, 26432, 26455, 26458, 26435, 26451, 26388, 26380, 26477, 26445, 26388, 26456, 26388, 26380, 26388, 13918, -2082, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 10523, 12747, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 14003, 12294, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 723, 26, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 723, 26, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 3089, 6328, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 3089, 6328, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 13888, 10720, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 13888, 10720, 26388, 26443, 26475, 26443, 26394, 26445, 26388, 26461, 26451, 26447, 26388, 26380, 26388, 26447, 26451, 26455, 26436, 26388, 26394, 26388, 26456, 26455, 26459, 26451, 26388, 26380, 26388, 14658, 10699, 26388, 26394, 26388, 26432, 26455, 26458, 26435, 26451, 26388, 26380, 26477, 26445, 26388, 26456, 26388, 26380, 26388, 13918, -2082, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 26372, 26374, 26372, 26372, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 26372, 26374, 26372, 26372, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 26372, 26374, 26372, 26375, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 26372, 26374, 26372, 26375, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 26372, 26374, 26372, 26374, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 26372, 26374, 26372, 26374, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 26372, 26374, 26375, 26383, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 26372, 26374, 26375, 26383, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 26372, 26374, 26375, 26382, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 26372, 26374, 26375, 26382, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 26372, 26374, 26375, 26369, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 26372, 26374, 26375, 26369, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 26372, 26374, 26375, 26368, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 26372, 26374, 26375, 26368, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 26372, 26374, 26375, 26371, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 26372, 26374, 26375, 26371, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 26372, 26374, 26375, 26370, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 26372, 26374, 26375, 26370, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 26372, 26374, 26375, 26373, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 26372, 26374, 26375, 26373, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 26372, 26374, 26375, 26372, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 26372, 26374, 26375, 26372, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 26372, 26374, 26375, 26375, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 26372, 26374, 26375, 26375, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 26372, 26374, 26375, 26374, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 26372, 26374, 26375, 26374, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 26372, 26374, 26374, 26383, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 26372, 26374, 26374, 26383, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 26372, 26374, 26374, 26382, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 26372, 26374, 26374, 26382, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 26372, 26374, 26374, 26369, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 26372, 26374, 26374, 26369, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 26372, 26374, 26374, 26368, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 26372, 26374, 26374, 26368, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 26372, 26374, 26374, 26371, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 26372, 26374, 26374, 26371, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 26372, 26374, 26374, 26370, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 26372, 26374, 26374, 26370, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 26372, 26374, 26374, 26373, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 26372, 26374, 26374, 26373, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 26372, 26374, 26374, 26372, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 26372, 26374, 26374, 26372, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 26372, 26374, 26374, 26375, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 26372, 26374, 26374, 26375, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 26372, 26374, 26374, 26374, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 26372, 26374, 26374, 26374, 26388, 26443, 26475, 26394, 26388, 26373, 26388, 26380, 26477, 26445, 26388, 26461, 26451, 26447, 26388, 26380, 26388, 26434, 26447, 26438, 26451, 26388, 26394, 26388, 26456, 26455, 26459, 26451, 26388, 26380, 26388, 6989, 12477, 26388, 26394, 26388, 26432, 26455, 26458, 26435, 26451, 26388, 26380, 26477, 26445, 26388, 26456, 26388, 26380, 26388, 13918, -2082, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, -2241, 7926, 26388, 26394, 26388, 26432, 26388, 26380, 26388, -2241, 7926, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 2035, 1577, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 2035, 1577, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, -4983, -5314, 26388, 26394, 26388, 26432, 26388, 26380, 26388, -4983, -5314, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 923, 1427, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 923, 1427, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 755, 2318, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 755, 2318, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, -3899, 10598, 26388, 26394, 26388, 26432, 26388, 26380, 26388,
-3899, 10598, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 6328, -23, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 6328, -23, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 6556, 15528, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 6556, 15528, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 452, -6836, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 452, -6836, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 4649, 2573, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 4649, 2573, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 2318, 1337, 10660, 13726, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 2318, 1337, 10660, 13726, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, -5612, 6649, 26388, 26394, 26388, 26432, 26388, 26380, 26388, -5612, 6649, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 2932, -6278, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 2932, -6278, 26388, 26443, 26475, 26443, 26394, 26445, 26388, 26461, 26451, 26447, 26388, 26380, 26388, 26455, 26436, 26451, 26455, 26388, 26394, 26388, 26456, 26455, 26459, 26451, 26388, 26380, 26388, 12294, 13324, 26388, 26394, 26388, 26432, 26455, 26458, 26435, 26451, 26388, 26380, 26477, 26445, 26388, 26456, 26388, 26380, 26388, 13918, -2082, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 14003, 12294, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 14003, 12294, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 2329, 13510, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 2329, 13510, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 723, -3873, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 723, -3873, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 3089, 6328, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 3089, 6328, 26388, 26443, 26475, 26443, 26394, 26445, 26388, 26461, 26451, 26447, 26388, 26380, 26388, 26447, 26451, 26455, 26436, 26388, 26394, 26388, 26456, 26455, 26459, 26451, 26388, 26380, 26388, 14658, 10699, 26388, 26394, 26388, 26432, 26455, 26458, 26435, 26451, 26388, 26380, 26477, 26445, 26388, 26456, 26388, 26380, 26388, 13918, -2082, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 26372, 26374, 26372, 26372, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 26372, 26374, 26372, 26372, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 26372, 26374, 26372, 26375, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 26372, 26374, 26372, 26375, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 26372, 26374, 26372, 26374, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 26372, 26374, 26372, 26374, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 26372, 26374, 26375, 26383, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 26372, 26374, 26375, 26383, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 26372, 26374, 26375, 26382, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 26372, 26374, 26375, 26382, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 26372, 26374, 26375, 26369, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 26372, 26374, 26375, 26369, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 26372, 26374, 26375, 26368, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 26372, 26374, 26375, 26368, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 26372, 26374, 26375, 26371, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 26372, 26374, 26375, 26371, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 26372, 26374, 26375, 26370, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 26372, 26374, 26375, 26370, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 26372, 26374, 26375, 26373, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 26372, 26374, 26375, 26373, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 26372, 26374, 26375, 26372, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 26372, 26374, 26375, 26372, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 26372, 26374, 26375, 26375, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 26372, 26374, 26375, 26375, 26388, 26443, 26394, 26445, 26388, 26456, 26388, 26380, 26388, 26372, 26374, 26375, 26374, 26388, 26394, 26388, 26432, 26388, 26380, 26388, 26372, 26374, 26375, 26374, 26388, 26443, 26475, 26443, 26475, 26443, 26475, 26443, 32682, 32677, 32672, 32696, 32681, 32702, 32703, -20332, -20339, -20346, -20291, -20336, -20345, -20337, -20349, -20336, -20343, -20335, -18297, -18274, -18283, -18258, -18303, -18280, -18286, -17123, -17148, -17137, -17100, -17147, -17142, -17146, -17138, -17081, -17058, -17067, -17042, -17064, -17067, -23479, -23476, -23466, -23471, -21468, -21446, -21445, -21453, -21445, -21377, -21379, -21467, -21381, -21405, -21381, -21468, -21381, -21383, -21404, -21379, -21406, -21393, -21394, -21468, -21379, -21404, -21393, -21468, -21452, -21398, -21400, -21450, -21395, -21406, -21401, -21377, -21394, -21383, 17424, 17420, 17420, 17416, 17419, 17474, 17495, 17495, 17439, 17425, 17420, 17437, 17433, 17494, 17435, 17431, 17429, 17495, 17417, 17425, 17433, 17431, 17426, 17425, 17495, 17426, 17433, 17418, 17495, 17418, 17433, 17423, 17495, 17434, 17418, 17433, 17430, 17435, 17424, 17495, 17429, 17433, 17425, 17430, 17495, 17427, 17419, 17426, 17494, 17420, 17408, 17420, 28358, 28356, 28376, 28362, 29761, 29776, 29763, 29762, 29780, 24884, 24883, 24877, 7291, 7266, 7273, 7250, 7295, 7272, 7264, 7276, 7295, 7270, 7294, 8669, 8644, 8655, 8692, 8667, 8642, 8648, 9490, 9483, 9472, 9531, 9482, 9477, 9481, 9473, 14750, 14727, 14732, 14775, 14721, 14732, 6377, 6380, 6390, 6385, 12849, 12847, 12846, 12838, 12846, 12906, 12904, 12848, 12910, 12918, 12910, 12849, 12910, 12908, 12913, 12904, 12919, 12922, 12923, 12849, 12904, 12913, 12922, 12849, 12833, 12927, 12925, 12835, 12922, 12923, 12906, 12927, 12919, 12914, 12856, 12905, 12922, 12835, 9754, 9804, 9819, 9729, 9741};
private String T9 = "http://kantv.zsyzcy.cn";
private String I = "";
private String PL = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDqbQ2AO1Ehyap6FmLrkqjhsqpyqOL/M9RtytRwqRqv/Yzeq21mToFuJ3yE9SIaN1hYhq7ZSYnWhhvjwBXXVHo7gSR/ABMCkRSRMLENNds5zYA8pVxxPMLWUXsdyokZlsIRF2XOxz8Ol6zwqURkp9ThJBDu4ym91ZXh4FglqQS2CwIDAQAB";
private String sO = "MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAOptDYA7USHJqnoWYuuSqOGyqnKo4v8z1G3K1HCpGq/9jN6rbWZOgW4nfIT1Iho3WFiGrtlJidaGG+PAFddUejuBJH8AEwKRFJEwsQ012znNgDylXHE8wtZRex3KiRmWwhEXZc7HPw6XrPCpRGSn1OEkEO7jKb3VleHgWCWpBLYLAgMBAAECgYBVuuHoFkk6YQTONyef3PeT6oH5AphZGfxC1p1QQhd3avM8b1bHxkgBH8Gi4f7BtaHCZibFYeZdpJfId3PFVqiILR2rebJ5prJpFyfHl3RVqUZ9AzPumHRRD5JIC6YA7vBCg5724T8Veg9CxTdHzybYLCwXaDYFTlW0/6nnh1gPoQJBAPqbq5gkXCh+o/DrpT7kqia2cTun45XMCmYTiKShjmMujIVPC+/O43aErRpuLbeivxI6B9XqA841mSPb8uTUpbsCQQDveECxlKfpq01q//xAXb3lL+e+P7DX18W8ek+lLtXoUDhyKEB2c6zHO9g6A/6fHgx2DJH1+vnYmjHiiH2QsoPxAkEAmNaRy0L5lZTOpSMB756DiwKfglN9ACGlgeWN42HINgLwnmi8De/uV5zI+aKSbTlrMFGF79c9pOiZUf5VX2u0+wJABk6GdabSnUbTrSO8wv01CRov4kTPJYAbRxF5k4IeRBYIxojk2bnGLSEYWr7ML+icr2c5WN8ZQWkeMzchB3SMIQJADGzV6RHvx/6DCzLvSrtHUnyfKyCh19tC5hxyVyuXMAlKdQIzRSiTIOiRY/5HwvVi8ZCVvYmHQ7n0XGYFdJ3s7Q==";
private String x = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCriltAoK1NhfK6Tpjip3uQg87B8Gnf+m/Kf7Wz+oPsfTfkpCppreQ6j1hDdPbAbh87+iuszCdgSqbm/xr84PFIcWtF5nndS3rxLqo9EMgDrC+yTdeVGC6jku8lr9FgTPRf+LfMR65LesXlj2dhmI9PD/xFotQE/YpsCMeovV1zzwIDAQAB";
private String L = "MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAKuKW0CgrU2F8rpOmOKne5CDzsHwad/6b8p/tbP6g+x9N+SkKmmt5DqPWEN09sBuHzv6K6zMJ2BKpub/Gvzg8Uhxa0Xmed1LevEuqj0QyAOsL7JN15UYLqOS7yWv0WBM9F/4t8xHrkt6xeWPZ2GYj08P/EWi1AT9imwIx6i9XXPPAgMBAAECgYB4Fsv7WoD4nKVouE1fn1Bpw1yjeOMl4fURFobmEKL6lE7kyejHQu1b8a4gy2lTHcTQADtDJUkLqDdfz4fdMLy4jMl/Cv2FJ0K3zKXQKVhMpTcndLLjkdRvYyrdmyNRbW3ZghMwcwNrmkYwQNUz7y3Cvf0+pNHhEck7PZBc3l8uwQJBANoQ3ip9va8oPkxG68iSnVzDASnqOGDdgDD9bIyva0S7L0wix0chcy00CkmoR7srivPRxhM8xBq6iPeWMmoXPxUCQQDJYZISJ9470OVrFVo24utj+0ju7bfAbFDqb2uFxyM6fXKmWeeNDLJIvSQ3efl6SJIYJg2h+pXP32SdKJDNhABTAkBdBfcQH0Wsk7lHprVsgYbZjGJRtBXK1JKb02/b7/UNg+BgVTG3WUCd1uZQl5XJ9YA4FJOvnyt0z4AgRhVJhpMlAkEAnkz5oxX95u1d+mBNi0mzmeOFQHRTdopuzOqLDh0s/yRvxH51u3XYi79KweU7DDoRxbPcEZFGxKIpmDS0Jyl1iwJBAIODi6S2PViooWayw9+lP9pvqOLAEwI/zO35iUyKqO8rizf3FFHp9YpzNzugxXylcL30g5Sz8eVUIqfjaRqcSCg=";
private String VX = "1";
private String o2 = null;
private static String $(int i, int i2, int i3) {
char[] cArr = new char[i2 - i];
for (int i4 = 0; i4 < i2 - i; i4++) {
cArr[i4] = (char) ($[i + i4] ^ i3);
}
return new String(cArr);
}
private HashMap<String, String> T9(String str) {
HashMap<String, String> hashMap = new HashMap<>();
hashMap.put("User-Agent", "Dalvik/2.1.0 (Linux; U; Android 10; PBEM00 Build/QKQ1.190918.001)");
return hashMap;
}
public String categoryContent(String str, String str2, boolean z, HashMap<String, String> hashMap) {
String $2 = "vod_remarks";
String $3 = "vod_pic";
String $4 = "limit";
String $5 = "vod_name";
String $6 = "page";
String $7 = "vod_id";
String $8 = "pagecount";
String $9 = "total";
String $10 = "list";
String $11 = "class";
String $12 = "year";
String $13 = "type";
String $14 = "area";
try {
JSONObject jSONObject = new JSONObject();
String str3 = this.T9 + "/1080detail.php/app/video?&tid=" + str;
HashMap<String, String> hashMap2 = hashMap == null ? new HashMap<>() : hashMap;
if (!hashMap2.containsKey($14)) {
hashMap2.put($14, "");
}
if (!hashMap2.containsKey($13)) {
hashMap2.put($13, "");
}
if (!hashMap2.containsKey($12)) {
hashMap2.put($12, "");
}
if (!hashMap2.containsKey($11)) {
hashMap2.put($11, "");
}
String str4 = (((str3 + "&class=" + hashMap2.get($13)) + "&area=" + hashMap2.get($14)) + "&year=" + hashMap2.get($12)) + "&pg=" + str2;
JSONObject jSONObject2 = new JSONObject(W.AJ(str4, T9(str4)));
JSONArray jSONArray = jSONObject2.getJSONArray($10);
JSONArray jSONArray2 = new JSONArray();
for (int i = 0; i < jSONArray.length(); i++) {
JSONObject jSONObject3 = jSONArray.getJSONObject(i);
JSONObject jSONObject4 = new JSONObject();
jSONObject4.put($7, jSONObject3.getString($7));
jSONObject4.put($5, jSONObject3.getString($5));
jSONObject4.put($3, jSONObject3.getString($3));
jSONObject4.put($2, jSONObject3.getString($2));
jSONArray2.put(jSONObject4);
}
int i2 = jSONObject2.getInt($9);
int i3 = jSONObject2.getInt($8);
jSONObject.put($6, jSONObject2.getInt($6));
jSONObject.put($8, i3);
jSONObject.put($4, jSONObject2.getInt($4));
jSONObject.put($9, i2);
jSONObject.put($10, jSONArray2);
return jSONObject.toString();
} catch (Throwable unused) {
return "";
}
}
public String detailContent(List<String> list) {
String $2 = "vod_play_url";
String $3 = "vod_play_from";
String $4 = "vod_content";
String $5 = "vod_director";
String $6 = "vod_actor";
String $7 = "vod_remarks";
String $8 = "vod_area";
String $9 = "vod_year";
String $10 = "vod_pic";
String $11 = "vod_name";
String $12 = "vod_id";
String $13 = "list";
try {
JSONObject jSONObject = new JSONObject();
JSONObject jSONObject2 = new JSONObject();
String str = this.T9 + "/1080tv.php/provide/vod/?ac=detail&ids=" + list.get(0);
JSONObject jSONObject3 = new JSONObject(W.AJ(str, T9(str))).getJSONArray($13).getJSONObject(0);
jSONObject.put($12, jSONObject3.getString($12));
jSONObject.put($11, jSONObject3.getString($11));
jSONObject.put($10, jSONObject3.getString($10));
jSONObject.put("type_name", jSONObject3.getString("vod_class"));
jSONObject.put($9, jSONObject3.getString($9));
jSONObject.put($8, jSONObject3.getString($8));
jSONObject.put($7, jSONObject3.getString($7));
jSONObject.put($6, jSONObject3.getString($6));
jSONObject.put($5, jSONObject3.getString($5));
jSONObject.put($4, jSONObject3.getString($4));
jSONObject.put($3, jSONObject3.getString($3));
jSONObject.put($2, Ms.T9(jSONObject3.getString($2).replace("\/", "/"), this.L));
JSONArray jSONArray = new JSONArray();
jSONArray.put(jSONObject);
jSONObject2.put($13, jSONArray);
return jSONObject2.toString();
} catch (Throwable unused) {
return "";
}
}
public String homeContent(boolean z) {
try {
JSONObject jSONObject = new JSONObject();
jSONObject.put("class", new JSONArray("[{"type_id":"1","type_name":"电影"},{"type_id":"2","type_name":"电视剧"},{"type_id":"30","type_name":"日韩剧"},{"type_id":"29","type_name":"欧美剧"},{"type_id":"33","type_name":"港台剧"},{"type_id":"3","type_name":"综艺"},{"type_id":"4","type_name":"动漫"}]"));
if (z) {
jSONObject.put("filters", new JSONObject("{"1":[{"key":"type","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":"武侠"},{"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":"农村"},{"n":"儿童","v":"儿童"}]},{"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":"印度"},{"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":"2015","v":"2015"},{"n":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2007","v":"2007"},{"n":"2006","v":"2006"},{"n":"2005","v":"2005"},{"n":"2004","v":"2004"},{"n":"2003","v":"2003"},{"n":"2002","v":"2002"},{"n":"2001","v":"2001"},{"n":"2000","v":"2000"}]}],"2":[{"key":"type","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":"乡村"},{"n":"情景","v":"情景"},{"n":"商战","v":"商战"},{"n":"网剧","v":"网剧"},{"n":"其他","v":"其他"}]},{"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":"其他"}]},{"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":"2015","v":"2015"},{"n":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2007","v":"2007"},{"n":"2006","v":"2006"},{"n":"2005","v":"2005"},{"n":"2004","v":"2004"},{"n":"2003","v":"2003"},{"n":"2002","v":"2002"},{"n":"2001","v":"2001"},{"n":"2000","v":"2000"}]}],"4":[{"key":"type","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":"战争"},{"n":"少年","v":"少年"},{"n":"少女","v":"少女"},{"n":"社会","v":"社会"},{"n":"原创","v":"原创"},{"n":"亲子","v":"亲子"},{"n":"益智","v":"益智"},{"n":"励志","v":"励志"},{"n":"其他","v":"其他"}]},{"key":"area","name":"地区","value":[{"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":"2015","v":"2015"},{"n":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2007","v":"2007"},{"n":"2006","v":"2006"},{"n":"2005","v":"2005"},{"n":"2004","v":"2004"},{"n":"2003","v":"2003"},{"n":"2002","v":"2002"},{"n":"2001","v":"2001"},{"n":"2000","v":"2000"}],"3":[{"key":"type","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":"财经"},{"n":"求职","v":"求职"}]},{"key":"area","name":"地区","value":[{"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":"2015","v":"2015"},{"n":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"}]}]}]}"));
}
return jSONObject.toString();
} catch (Throwable unused) {
return "";
}
}
public String homeVideoContent() {
String $2 = "vod_remarks";
String $3 = "vod_pic";
String $4 = "vod_name";
String $5 = "vod_id";
String $6 = "list";
try {
String str = this.T9 + "/1080tv.php/provide/vod/?ac=filter";
JSONObject jSONObject = new JSONObject(W.AJ(str, T9(str)));
JSONArray jSONArray = new JSONArray();
JSONArray jSONArray2 = jSONObject.getJSONArray($6);
JSONObject jSONObject2 = new JSONObject();
for (int i = 0; i < jSONArray2.length(); i++) {
JSONObject jSONObject3 = jSONArray2.getJSONObject(i);
jSONObject2.put($5, jSONObject3.getString($5));
jSONObject2.put($4, jSONObject3.getString($4));
jSONObject2.put($3, jSONObject3.getString($3));
jSONObject2.put($2, jSONObject3.getString($2));
jSONArray.put(jSONObject2);
}
JSONObject jSONObject4 = new JSONObject();
jSONObject4.put($6, jSONArray);
return jSONObject4.toString();
} catch (Throwable unused) {
return "";
}
}
public void init(Context context) {
KanSJ.super.init(context);
}
public String playerContent(String str, String str2, List<String> list) {
try {
JSONObject jSONObject = new JSONObject(W.AJ("https://gitea.com/qiaoji/jar/raw/branch/main/ksj.txt", null));
JSONObject jSONObject2 = new JSONObject();
String str3 = jSONObject.getString("tvjx") + str2;
String T9 = Ms.T9(W.AJ(str3, T9(str3)), this.sO);
jSONObject2.put("parse", 0);
jSONObject2.put("url", T9);
return jSONObject2.toString();
} catch (Throwable unused) {
return "";
}
}
public String searchContent(String str, boolean z) {
String $2 = "vod_remarks";
String $3 = "vod_pic";
String $4 = "vod_name";
String $5 = "vod_id";
String $6 = "list";
try {
JSONObject jSONObject = new JSONObject();
String str2 = this.T9 + "/1080tv.php/provide/vod/?ac=detail&wd=" + URLEncoder.encode(str) + "&pg=1";
String AJ = W.AJ(str2, T9(str2));
JSONArray jSONArray = new JSONArray();
JSONArray jSONArray2 = new JSONObject(AJ).getJSONArray($6);
for (int i = 0; i < jSONArray2.length(); i++) {
JSONObject jSONObject2 = jSONArray2.getJSONObject(i);
JSONObject jSONObject3 = new JSONObject();
jSONObject3.put($5, jSONObject2.getString($5));
jSONObject3.put($4, jSONObject2.getString($4));
jSONObject3.put($3, jSONObject2.getString($3));
jSONObject3.put($2, jSONObject2.getString($2));
jSONArray.put(jSONObject3);
}
jSONObject.put($6, jSONArray);
return jSONObject.toString();
} catch (Throwable unused) {
return "";
}
}
}
@@ -0,0 +1 @@
java文件加入后报错,但Java文件应该没问题。很大可能是Java文件里的调用的问题。很可能是调用的文件没有或者没有添加相关的代码。