From 5af10f175689549ca44b74e9fc1c7ee0ec92c2d7 Mon Sep 17 00:00:00 2001
From: yujian <yujian@163.com>
Date: 星期二, 21 四月 2020 14:26:38 +0800
Subject: [PATCH] 后台改造
---
fanli/src/main/java/com/yeshi/fanli/util/jd/JDUtil.java | 107 ++++++++++++++++++++++++++++++++++++++++-------------
1 files changed, 80 insertions(+), 27 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 51bdc18..7f7aef1 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,13 +6,17 @@
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;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
import javax.script.Invocable;
import javax.script.ScriptEngine;
@@ -27,9 +31,9 @@
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.douyin.DouYinGoods;
import com.yeshi.fanli.dto.jd.JDCommissionInfo;
import com.yeshi.fanli.dto.jd.JDCouponInfo;
import com.yeshi.fanli.dto.jd.JDPingouInfo;
@@ -37,6 +41,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;
@@ -626,27 +631,27 @@
return null;
}
-
/**
* 閫氳繃閾炬帴id
+ *
* @param url
* @return
*/
public static String getJDGoodsIdByWeiXin(String url) {
- if (StringUtil.isNullOrEmpty(url))
+ if (StringUtil.isNullOrEmpty(url) || url.indexOf("jd.com") < 0)
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) {
@@ -654,16 +659,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++) {
@@ -671,35 +676,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;
}
-
-
-
+
/**
* 鏌ヨ澶╃尗鍟嗗搧鍥剧墖銆佹爣棰�
*
@@ -889,9 +935,16 @@
}
return getShowCouponInfo(goods.getCouponInfoList(), price);
}
-
-
-
-
+
+ public static List<String> getJDShortLinksFromText(String text) {
+ String regex = "(https://u\\.jd\\.com/)[0-9A-Za-z]{1,20}";
+ Pattern pattern = Pattern.compile(regex);
+ Matcher m = pattern.matcher(text);
+ List<String> urlList = new ArrayList<>();
+ while (m.find()) {
+ urlList.add(m.group());
+ }
+ return urlList;
+ }
}
--
Gitblit v1.8.0