parent
5bce711fa7
commit
59fe1d09da
@ -1,89 +1,67 @@ |
||||
package com.github.catvod.spider; |
||||
|
||||
import android.content.Context; |
||||
import com.github.catvod.crawler.Spider; |
||||
import okhttp3.OkHttpClient; |
||||
import okhttp3.Request; |
||||
import okhttp3.Response; |
||||
|
||||
import com.github.catvod.bean.Result; |
||||
import com.github.catvod.bean.Vod; |
||||
import com.github.catvod.net.OkHttp; |
||||
import com.github.catvod.utils.Utils; |
||||
|
||||
import org.json.JSONArray; |
||||
import org.json.JSONObject; |
||||
import org.jsoup.Jsoup; |
||||
import org.jsoup.nodes.Document; |
||||
|
||||
import java.net.URLEncoder; |
||||
|
||||
import java.util.ArrayList; |
||||
import java.util.HashMap; |
||||
import java.util.List; |
||||
import java.util.Map; |
||||
|
||||
/** |
||||
* @author zhixc |
||||
* |
||||
*/ |
||||
public class PanSearch extends Ali { |
||||
|
||||
private final String URL = "https://www.pansearch.me/"; |
||||
|
||||
private Map<String, String> getHeader() { |
||||
Map<String, String> header = new HashMap<>(); |
||||
header.put("User-Agent", Utils.CHROME); |
||||
return header; |
||||
} |
||||
|
||||
private Map<String, String> getSearchHeader() { |
||||
Map<String, String> header = getHeader(); |
||||
header.put("x-nextjs-data", "1"); |
||||
header.put("referer", URL); |
||||
return header; |
||||
} |
||||
|
||||
@Override |
||||
public void init(Context context, String extend) { |
||||
super.init(context, extend); |
||||
} |
||||
|
||||
@Override |
||||
public String searchContent(String key, boolean quick) { |
||||
try { |
||||
JSONArray videoArray = new JSONArray(); |
||||
|
||||
Request request = new Request.Builder() |
||||
.get() |
||||
.url("https://www.pansearch.me") |
||||
.addHeader("User-Agent", "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36") |
||||
.build(); |
||||
OkHttpClient okHttpClient = new OkHttpClient(); |
||||
Response response = okHttpClient.newCall(request).execute(); |
||||
String homePageStr = response.body().string(); |
||||
response.close(); |
||||
Document document = Jsoup.parse(homePageStr); |
||||
String html = document.select("script[type=application/json]").html(); |
||||
String html2 = document.select("script").get(0).html(); |
||||
String html3 = document.select("script").get(0).data(); |
||||
String html4 = document.select("script[id=__NEXT_DATA__]").get(0).data(); |
||||
String html5 = document.select("script[id=__NEXT_DATA__]").html(); |
||||
System.out.println(html2); |
||||
JSONObject nextData = new JSONObject(html4); |
||||
String buildId = nextData.getString("buildId"); |
||||
|
||||
String searchUrl = "https://www.pansearch.me/_next/data/" + buildId + "/search.json?keyword=" + URLEncoder.encode(key) + "&pan=aliyundrive"; |
||||
Request request2 = new Request.Builder() |
||||
.get() |
||||
.url(searchUrl) |
||||
.addHeader("User-Agent", "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36") |
||||
.addHeader("referer", "https://www.pansearch.me/") |
||||
.addHeader("x-nextjs-data", "1") |
||||
.build(); |
||||
Response response2 = okHttpClient.newCall(request2).execute(); |
||||
String searchResult = response2.body().string(); |
||||
response2.close(); |
||||
JSONArray dataArray = new JSONObject(searchResult) |
||||
.getJSONObject("pageProps") |
||||
.getJSONObject("data") |
||||
.getJSONArray("data"); |
||||
for (int i = 0; i < dataArray.length(); i++) { |
||||
JSONObject item = dataArray.getJSONObject(i); |
||||
String content = item.get("content") + ""; |
||||
String image = item.get("image") + ""; |
||||
String[] split = content.split("\\n"); |
||||
String title = split.length > 0 ? split[0].replaceAll("</?[^>]+>", "") : "无题,李商隐"; |
||||
String url = Jsoup.parse(content).select("a").attr("href"); |
||||
String time = item.get("time") + ""; |
||||
JSONObject v = new JSONObject(); |
||||
v.put("vod_id", url); |
||||
v.put("vod_name", title); |
||||
v.put("vod_pic", image); |
||||
v.put("vod_remarks", time); |
||||
videoArray.put(v); |
||||
} |
||||
|
||||
JSONObject result = new JSONObject(); |
||||
result.put("list", videoArray); |
||||
return result.toString(); |
||||
} catch (Exception e) { |
||||
e.printStackTrace(); |
||||
public String searchContent(String key, boolean quick) throws Exception { |
||||
String html = OkHttp.string(URL, getHeader()); |
||||
String data = Jsoup.parse(html).select("script[id=__NEXT_DATA__]").get(0).data(); |
||||
String buildId = new JSONObject(data).getString("buildId"); |
||||
String url = URL + "_next/data/" + buildId + "/search.json?keyword=" + URLEncoder.encode(key) + "&pan=aliyundrive"; |
||||
String result = OkHttp.string(url, getSearchHeader()); |
||||
JSONArray array = new JSONObject(result).getJSONObject("pageProps").getJSONObject("data").getJSONArray("data"); |
||||
List<Vod> list = new ArrayList<>(); |
||||
for (int i = 0; i < array.length(); i++) { |
||||
JSONObject item = array.getJSONObject(i); |
||||
String content = item.optString("content"); |
||||
String[] split = content.split("\\n"); |
||||
if (split.length == 0) continue; |
||||
String vodId = Jsoup.parse(content).select("a").attr("href"); |
||||
String name = split[0].replaceAll("</?[^>]+>", ""); |
||||
String remark = item.optString("time"); |
||||
String pic = item.optString("image"); |
||||
list.add(new Vod(vodId, name, pic, remark)); |
||||
} |
||||
return ""; |
||||
return Result.string(list); |
||||
} |
||||
} |
||||
|
||||
@ -1,102 +0,0 @@ |
||||
package com.github.catvod.spider; |
||||
|
||||
import android.content.Context; |
||||
|
||||
import com.github.catvod.bean.Class; |
||||
import com.github.catvod.bean.Filter; |
||||
import com.github.catvod.bean.Result; |
||||
import com.github.catvod.bean.Vod; |
||||
import com.github.catvod.bean.paper.Data; |
||||
import com.github.catvod.net.OkHttp; |
||||
import com.github.catvod.utils.Utils; |
||||
|
||||
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.util.ArrayList; |
||||
import java.util.Arrays; |
||||
import java.util.HashMap; |
||||
import java.util.LinkedHashMap; |
||||
import java.util.List; |
||||
import java.util.Map; |
||||
|
||||
/** |
||||
* @author ColaMint & FongMi |
||||
*/ |
||||
public class Paper extends Ali { |
||||
|
||||
private final String url = "https://gitcafe.net/alipaper/"; |
||||
private final String api = "https://gitcafe.net/tool/alipaper/"; |
||||
private List<String> types; |
||||
|
||||
private HashMap<String, String> getHeaders() { |
||||
HashMap<String, String> headers = new HashMap<>(); |
||||
headers.put("User-Agent", Utils.CHROME); |
||||
return headers; |
||||
} |
||||
|
||||
@Override |
||||
public void init(Context context, String extend) { |
||||
super.init(context, extend); |
||||
types = Arrays.asList("hyds", "rhds", "omds", "qtds", "hydy", "rhdy", "omdy", "qtdy", "hydm", "rhdm", "omdm", "jlp", "zyp", "jypx", "qtsp"); |
||||
} |
||||
|
||||
@Override |
||||
public String homeContent(boolean filter) { |
||||
Document doc = Jsoup.parse(OkHttp.string(url, getHeaders())); |
||||
Elements trs = doc.select("table.tableizer-table > tbody > tr"); |
||||
LinkedHashMap<String, List<Filter>> filters = new LinkedHashMap<>(); |
||||
List<Class> classes = new ArrayList<>(); |
||||
for (Element tr : trs) { |
||||
List<Filter.Value> values = new ArrayList<>(); |
||||
for (Element td : tr.select("td")) { |
||||
if (td.hasClass("tableizer-title")) { |
||||
String typeId = td.select("a").attr("href").replace("#", ""); |
||||
if (!types.contains(typeId)) continue; |
||||
classes.add(new Class(typeId, td.text())); |
||||
filters.put(typeId, Arrays.asList(new Filter("type", "類型", values))); |
||||
} else { |
||||
String value = td.select("a").attr("onclick").split("'")[1]; |
||||
values.add(new Filter.Value(td.text(), value)); |
||||
} |
||||
} |
||||
} |
||||
return Result.string(classes, filters); |
||||
} |
||||
|
||||
@Override |
||||
public String homeVideoContent() throws Exception { |
||||
List<Vod> list = new ArrayList<>(); |
||||
JSONObject homeData = new JSONObject(OkHttp.string(url + "home.json", getHeaders())); |
||||
List<Data> items = Data.arrayFrom(homeData.getJSONObject("info").getJSONArray("new").toString()); |
||||
for (Data item : items) if (types.contains(item.getCat())) list.add(item.getVod()); |
||||
return Result.string(list); |
||||
} |
||||
|
||||
@Override |
||||
public String categoryContent(String tid, String pg, boolean filter, HashMap<String, String> extend) { |
||||
String type = extend.containsKey("type") ? extend.get("type") : tid; |
||||
List<Vod> list = new ArrayList<>(); |
||||
Map<String, String> params = new HashMap<>(); |
||||
params.put("action", "viewcat"); |
||||
params.put("cat", type); |
||||
params.put("num", pg); |
||||
String result = OkHttp.post(api, params, getHeaders()); |
||||
for (Data item : Data.arrayFrom(result)) list.add(item.getVod()); |
||||
return Result.string(list); |
||||
} |
||||
|
||||
@Override |
||||
public String searchContent(String key, boolean quick) { |
||||
List<Vod> list = new ArrayList<>(); |
||||
Map<String, String> params = new HashMap<>(); |
||||
params.put("action", "search"); |
||||
params.put("keyword", key); |
||||
String result = OkHttp.post(api, params, getHeaders()); |
||||
for (Data item : Data.arrayFrom(result)) if (types.contains(item.getCat()) && item.getTitle().contains(key)) list.add(item.getVod()); |
||||
return Result.string(list); |
||||
} |
||||
} |
||||
Binary file not shown.
@ -1 +1 @@ |
||||
a50f5026c571ca789721f21e88056bcf |
||||
dadcea0e365a64c6cd3c48b7dd948772 |
||||
|
||||
Loading…
Reference in new issue