package com.yeshi.fanli.util.pinduoduo;
|
|
import java.io.IOException;
|
import java.util.ArrayList;
|
import java.util.List;
|
|
import javax.script.Invocable;
|
import javax.script.ScriptEngine;
|
import javax.script.ScriptEngineManager;
|
|
import org.jsoup.Jsoup;
|
import org.jsoup.nodes.Document;
|
import org.jsoup.select.Elements;
|
|
import net.sf.json.JSONArray;
|
import net.sf.json.JSONObject;
|
|
public class PinDuoDuoUtil {
|
|
public static List<String> getDetailImages(Long id) {
|
List<String> imgList = new ArrayList<>();
|
try {
|
Document doc = Jsoup.connect("http://yangkeduo.com/goods.html?goods_id="+id)
|
.userAgent(
|
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36")
|
.get();
|
Elements els = doc.getElementsByTag("script");
|
for (int i = 0; i < els.size(); i++) {
|
if (els.get(i).html().contains("window.rawData")) {
|
String dataJS = els.get(i).html().replace("window.", "var ");
|
dataJS += "function getData(){return JSON.stringify(rawData);}";
|
|
ScriptEngineManager manager = new ScriptEngineManager();
|
ScriptEngine engine = manager.getEngineByName("javascript");
|
try {
|
engine.eval(dataJS);
|
if (engine instanceof Invocable) {
|
Invocable in = (Invocable) engine;
|
String jsonStr = in.invokeFunction("getData").toString();
|
JSONObject json = JSONObject.fromObject(jsonStr);
|
JSONArray array = json.optJSONObject("store").optJSONObject("initDataObj")
|
.optJSONObject("goods").optJSONArray("detailGallery");
|
for (int j = 0; j < array.size(); j++) {
|
imgList.add("http:" + array.optJSONObject(j).optString("url"));
|
}
|
}
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
break;
|
}
|
}
|
} catch (Exception e1) {
|
e1.printStackTrace();
|
}
|
|
return imgList;
|
|
}
|
|
}
|