From 59aced4fe04f7e2fdcca81cb9ef279a70522301e Mon Sep 17 00:00:00 2001 From: yujian <yujian@163.com> Date: 星期三, 25 十二月 2019 12:30:44 +0800 Subject: [PATCH] Merge branch 'div' of ssh://193.112.35.168:29418/fanli-server into div --- fanli/src/main/java/com/yeshi/fanli/util/jd/JDUtil.java | 93 +++++++++++++++++++++++++++++++++------------- 1 files changed, 67 insertions(+), 26 deletions(-) diff --git a/fanli/src/main/java/com/yeshi/fanli/util/jd/JDUtil.java b/fanli/src/main/java/com/yeshi/fanli/util/jd/JDUtil.java index 1736ded..fb662c0 100644 --- a/fanli/src/main/java/com/yeshi/fanli/util/jd/JDUtil.java +++ b/fanli/src/main/java/com/yeshi/fanli/util/jd/JDUtil.java @@ -6,11 +6,13 @@ import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import java.math.BigDecimal; +import java.net.URLDecoder; import java.net.URLEncoder; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; +import java.util.Iterator; import java.util.List; import java.util.Map; @@ -27,6 +29,7 @@ import org.jsoup.select.Elements; import org.yeshi.utils.BigDecimalUtil; import org.yeshi.utils.HttpUtil; +import org.yeshi.utils.NumberUtil; import com.yeshi.fanli.dto.GoodsClassDTO; import com.yeshi.fanli.dto.jd.JDCommissionInfo; @@ -36,6 +39,7 @@ import com.yeshi.fanli.dto.jd.JDSearchResult; import com.yeshi.fanli.dto.jd.JDShopInfo; import com.yeshi.fanli.entity.jd.JDGoods; +import com.yeshi.fanli.log.LogHelper; import com.yeshi.fanli.tag.PageEntity; import com.yeshi.fanli.util.MoneyBigDecimalUtil; import com.yeshi.fanli.util.StringUtil; @@ -625,27 +629,27 @@ return null; } - /** * 閫氳繃閾炬帴id + * * @param url * @return */ public static String getJDGoodsIdByWeiXin(String url) { - if (StringUtil.isNullOrEmpty(url)) + if (StringUtil.isNullOrEmpty(url)) return null; - + try { String id = null; int indexOf = url.indexOf("?"); - url = url.substring(indexOf + 1, url.length()-1); + url = url.substring(indexOf + 1, url.length() - 1); String[] temp = url.split("&"); - for (int i =0; i < temp.length; i ++) { - String content = temp[i]; + for (int i = 0; i < temp.length; i++) { + String content = temp[i]; if (content.startsWith("sku")) { - id = content.split("=")[content.split("=").length-1]; + id = content.split("=")[content.split("=").length - 1]; break; - } + } } return id; } catch (Exception e) { @@ -653,16 +657,16 @@ } return null; } - /** * 鏍规嵁 u.jd鐭繛鎺ヨ幏鍙栫湡瀹炵殑鍟嗗搧id + * * @param url * @return */ public static String getJDGoodsIdByUJD(String url) { try { - String body = HttpUtil.get(url); + String body = HttpUtil.get(url); Document doc = Jsoup.parse(body); Elements els = doc.getElementsByTag("script"); for (int i = 0; i < els.size(); i++) { @@ -670,35 +674,76 @@ if (content.indexOf("var hrl") > -1) { ScriptEngineManager manager = new ScriptEngineManager(); ScriptEngine engine = manager.getEngineByName("javascript"); - + int indexOf = content.indexOf("var hrl"); content = content.substring(indexOf, content.length()); - + int indexOf2 = content.indexOf(";"); - content = content.substring(0, indexOf2+1); - + content = content.substring(0, indexOf2 + 1); + String js = "function getData(){return JSON.stringify(hrl);}" + content; - + engine.eval(js); if (engine instanceof Invocable) { Invocable in = (Invocable) engine; String data = in.invokeFunction("getData").toString(); - String link = data.substring(1, data.length()-1); - + String link = data.substring(1, data.length() - 1); + // 灏嗛摼鎺ヤ腑鏈猠ncode鐨勫弬鏁癳ncode + String param = link.split("\\?")[1]; + String host = link.split("\\?")[0]; + String[] params = param.split("&"); + String paramStr = ""; + for (String p : params) { + String value = p.substring(p.indexOf("=") + 1); + String key = p.substring(0, p.indexOf("=")); + if (URLDecoder.decode(value, "UTF-8").equalsIgnoreCase(value)) { + value = URLEncoder.encode(value, "UTF-8"); + } + paramStr += key + "=" + value + "&"; + } + link = host + "?" + paramStr; String realLink = HttpUtil.getLocation(link); - realLink = realLink.substring(realLink.indexOf("sku=") + 4, realLink.length()); - return realLink.substring(0, realLink.indexOf("&")); + Map<String, String> paramsMap = new HashMap<>(); + + param = realLink.split("\\?")[1]; + params = param.split("&"); + for (String p : params) { + String value = p.substring(p.indexOf("=") + 1); + String key = p.substring(0, p.indexOf("=")); + paramsMap.put(key, value); + } + if (!StringUtil.isNullOrEmpty(paramsMap.get("sku"))) { + return paramsMap.get("sku"); + } + + if (!StringUtil.isNullOrEmpty(paramsMap.get("wareId"))) { + return paramsMap.get("wareId"); + } + + // 鍒ゆ柇绾暟瀛楀ぇ浜�4浣嶇殑杩斿洖 + for (Iterator<String> its = paramsMap.keySet().iterator(); its.hasNext();) { + String key = its.next(); + String value = paramsMap.get(key); + if (NumberUtil.isNumeric(value) && value.length() >= 4) { + return value; + } + } + String id = JDUtil.getJDGoodsId(realLink); + if (!StringUtil.isNullOrEmpty(id)) { + return id; + } + LogHelper.error("浜笢鐭帴瑙f瀽澶辫触:" + url); + return null; } } } } catch (Exception e) { e.printStackTrace(); + LogHelper.errorDetailInfo(e, "浜笢鐭摼鑾峰彇鍟嗗搧ID澶辫触:", url); } return null; } - - - + /** * 鏌ヨ澶╃尗鍟嗗搧鍥剧墖銆佹爣棰� * @@ -888,9 +933,5 @@ } return getShowCouponInfo(goods.getCouponInfoList(), price); } - - - - } -- Gitblit v1.8.0