From 41aedac31eb4c5b9f7b98bacec18c45b3926d69c Mon Sep 17 00:00:00 2001 From: yujian <yujian@123.com> Date: 星期五, 27 九月 2019 16:57:54 +0800 Subject: [PATCH] 京东商品 券bug --- fanli/src/main/java/com/yeshi/fanli/util/jd/JDUtil.java | 108 +++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 106 insertions(+), 2 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 95750f4..9ec8560 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 @@ -1,6 +1,9 @@ package com.yeshi.fanli.util.jd; +import java.io.BufferedReader; import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import java.math.BigDecimal; import java.net.URLEncoder; @@ -15,6 +18,7 @@ import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.methods.PostMethod; +import org.jsoup.Connection; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; @@ -29,6 +33,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.entity.taobao.TaoBaoGoodsBrief; import com.yeshi.fanli.tag.PageEntity; import com.yeshi.fanli.util.MoneyBigDecimalUtil; import com.yeshi.fanli.util.StringUtil; @@ -37,6 +42,8 @@ import net.sf.json.JSONObject; public class JDUtil { + + public static final String TM_PHONE_URL = "https://item.m.jd.com/product/%s.html"; public void test() { Map<String, String> systemParams = new HashMap<>(); @@ -378,9 +385,9 @@ new BigDecimal("0.01")), MoneyBigDecimalUtil.div(rate, new BigDecimal(100))); } - } - return BigDecimalUtil.getWithNoZera(money); + // 杩斿埄姣斾緥涓哄師鏉ョ殑90% + return BigDecimalUtil.getWithNoZera(MoneyBigDecimalUtil.mul(money, new BigDecimal("0.9"))); } /** @@ -525,4 +532,101 @@ return null; } + public static String getJDGoodsJS() { + InputStream input = JDUtil.class.getClassLoader().getResourceAsStream("jdGoods.js"); + StringBuilder sb = new StringBuilder(); + String line; + BufferedReader br = new BufferedReader(new InputStreamReader(input)); + try { + while ((line = br.readLine()) != null) { + sb.append(line); + } + } catch (IOException e) { + e.printStackTrace(); + } + return sb.toString(); + } + + static String jdGoodsJs = null; + static ScriptEngine engine = null; + static { + if (jdGoodsJs == null) + jdGoodsJs = getJDGoodsJS(); + ScriptEngineManager manager = new ScriptEngineManager(); + engine = manager.getEngineByName("javascript"); + try { + engine.eval(jdGoodsJs); + } catch (Exception e) { + } + } + + public static String getJDGoodsId(String url) { + try { + if (engine instanceof Invocable) { + Invocable in = (Invocable) engine; + Object goodsId = in.invokeFunction("getGoodsId", url); + if (goodsId != null) + return goodsId.toString().trim(); + } + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + /** + * 鏌ヨ澶╃尗鍟嗗搧鍥剧墖銆佹爣棰� + * + * @param auctionId + * @return + */ + public static JDGoods getSimpleGoodsInfo(String goodsId) { + JDGoods jdGoods = null; + try { + Connection connect = Jsoup.connect(String.format(TM_PHONE_URL, goodsId)); + Document document = connect.get(); + Elements elements = document.getElementsByTag("script"); + if (elements.size() >= 0) { + for (int i = 0; i < elements.size(); i++) { + String content = elements.get(i).toString(); + if (content.contains("window._itemOnly")) { + System.out.println("瀛樺湪"); + content = content.replace("<script>", ""); + content = content.replace("</script>", ""); + int indexOf = content.indexOf("window._isLogin"); + content = content.substring(0, indexOf); + + int indexItem = content.indexOf("\"item\":"); + content = content.substring(indexItem, content.length() - 1); + content = content.replace("\"item\":", "var item ="); + content = content.replace("});", "").trim(); + + content += ";function getData() {return item;}"; + ScriptEngineManager manager = new ScriptEngineManager(); + ScriptEngine engine = manager.getEngineByName("javascript"); + engine.eval(content); + + if (engine instanceof Invocable) { + Invocable in = (Invocable) engine; + JSONObject json = JSONObject.fromObject(in.invokeFunction("getData")); + + jdGoods = new JDGoods(); + jdGoods.setSkuName(json.getString("skuName")); + JSONObject jsonImage = json.getJSONObject("image"); + if (jsonImage != null && jsonImage.size() > 0) { + String picUrl = jsonImage.getString("0"); + jdGoods.setPicUrl("http://m.360buyimg.com/mobilecms/s750x750_" + picUrl); + } + } + + break; + } + } + } + } catch (Exception e) { + e.printStackTrace(); + } + return jdGoods; + } + } -- Gitblit v1.8.0