admin
2025-02-25 30d8e227e8d823b6c38c3b9c90ac2df03b63befe
fanli/src/main/java/com/yeshi/fanli/util/taobao/DaTaoKeUtil.java
@@ -1,700 +1,748 @@
package com.yeshi.fanli.util.taobao;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.math.BigDecimal;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Iterator;
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.nodes.Element;
import org.jsoup.select.Elements;
import org.yeshi.utils.HttpUtil;
import com.yeshi.fanli.dto.dataoke.DingDongQiangDTO;
import com.yeshi.fanli.dto.dataoke.DingDongTime;
import com.yeshi.fanli.entity.bus.clazz.GoodsClass;
import com.yeshi.fanli.entity.taobao.TaoBaoCoupon;
import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBrief;
import com.yeshi.fanli.entity.taobao.TaoBaoHead;
import com.yeshi.fanli.entity.taobao.TaoBaoSearchResult;
import com.yeshi.fanli.entity.taobao.dataoke.DaTaoKeDetailV2;
import com.yeshi.fanli.tag.PageEntity;
import com.yeshi.fanli.util.MoneyBigDecimalUtil;
import com.yeshi.fanli.util.StringUtil;
import com.yeshi.fanli.util.TimeUtil;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
/**
 * 大淘客api接口
 *
 * @author Administrator
 *
 */
public class DaTaoKeUtil {
   static final String[] commonEmojis = new String[] { "😀", // 笑嘻嘻
         "😁", // 笑嘻嘻的脸,含笑的眼睛
         "😃", // 开口笑脸
         "😄", // 开口笑脸和微笑的眼睛
         "😆", // 开口笑紧闭的眼睛
         "😉", // 眨眼表情
         "😊", // 面带微笑的眼睛
         "😋", // 品尝美味食物表情
         "😎", // 太阳镜笑脸
         "😍", // 面带心形眼睛
         "😘", // 飞吻表情
         "😗", // 亲吻表情
         "😙", // 含笑亲吻表情
         "😚", // 闭眼亲吻表情
         "☺", // 笑脸
         "😇", // 光环笑脸
         "😐", // 中性面
         "😏", // 傻笑
         "😮", // 张着嘴
         "😛", // 吐舌头
         "😜", // 吐舌头,眨眼眼
         "😝", // 闭眼吐舌头
         "👅", // 舌头
         "👄", // 口
         "👀", // 眼睛
         "❤", // 心
         "💓", // 跳动的心
         "💕", // 两颗心
         "💗", // 成长的心
         "💝", // 扎丝带的心形礼盒
         "💞", // 旋转心
         "💐", // 花束
         "🌸", // 樱花
         "🌹", // 玫瑰
         "🌺", // 槿
         "🌻", // 向日葵
         "🌼", // 开花
         "🌷", // 郁金香
         "🍇", // 葡萄
         "🍈", // 瓜
         "🍉", // 西瓜
         "🍊", // 柑橘
         "🍋", // 柠檬
         "🍌", // 香蕉
         "🍍", // 菠萝
         "🍎", // 红苹果
         "🍏", // 青苹果
         "🍐", // 梨
         "🍑", // 桃子
         "🍒", // 樱桃
         "🍓", // 草莓
         "🌿", // 枝叶
         "🍀", // 四叶草
         "🍁", // 枫叶
         "🍂", // 落叶
         "🍃", // 叶子在风中飘落
         "☘", // 三叶草(酢浆草)
         "☀", // 太阳光芒四射
         "🌞", // 太阳人脸
         "⭐", // 星星,五角星
         "🌟",// 发光的星星
   };
   static final String[] timeEmojis = new String[] { "🕛", // 十二点
         "🕧", // 十二点半
         "🕐", // 一点钟
         "🕜", // 一点半
         "🕑", // 两点
         "🕝", // 两点半
         "🕒", // 三点钟
         "🕞", // 三点半
         "🕓", // 四点钟
         "🕟", // 四点半
         "🕔", // 五时
         "🕠", // 五点半
         "🕕", // 六点
         "🕡", // 六点半
         "🕖", // 七点
         "🕢", // 七点半
         "🕗", // 八点
         "🕣", // 八点半
         "🕘", // 九点钟
         "🕤", // 九点半
         "🕙", // 的十点
         "🕥", // 十点半
         "🕚", // 十一点
         "🕦",// 十一点半
   };
   static final String[] evaluateEmojis = new String[] { "💟", "🌸", "🍸", "🍺", "📢", "❤", "💝", "💋", "👛", "🐾",
         "🌹", "🔥", "🎉", "🎁", "🍥", "🍭", "🌺", "👑", "✨", "💫", "🍻", "🎈", "💥", "💕", "💞", "💰", "💌", "💭",
         "🌼", "🍀" };
   public static List<GoodsClass> goodsClasses;
   static {
      goodsClasses = new ArrayList<>();
      goodsClasses.add(new GoodsClass(4L, "居家日用"));
      goodsClasses.add(new GoodsClass(6L, "美食"));
      goodsClasses.add(new GoodsClass(2L, "母婴"));
      goodsClasses.add(new GoodsClass(3L, "美妆"));
      goodsClasses.add(new GoodsClass(1L, "女装"));
      goodsClasses.add(new GoodsClass(8L, "数码家电"));
      goodsClasses.add(new GoodsClass(7L, "文娱车品"));
      goodsClasses.add(new GoodsClass(10L, "内衣"));
      goodsClasses.add(new GoodsClass(14L, "家装家纺"));
      goodsClasses.add(new GoodsClass(5L, "鞋品"));
      goodsClasses.add(new GoodsClass(9L, "男装"));
      goodsClasses.add(new GoodsClass(12L, "配饰"));
      goodsClasses.add(new GoodsClass(13L, "户外运动"));
      goodsClasses.add(new GoodsClass(11L, "箱包"));
   }
   public static final String HOST = "http://dataoke.yeshitv.com";
   public static void search(String key) {
      String header = "Mozilla/5.0 (Linux; Android 6.0; M5 Note Build/MRA58K; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/53.0.2785.49 Mobile MQQBrowser/6.2 TBS/043024 Safari/537.36 MicroMessenger/6.5.4.1000 NetType/WIFI Language/zh_CN";
      try {
         String searchUrl = String.format("http://dataoke.yeshitv.com/index.php?r=%s&kw=%s",
               URLEncoder.encode("index/search", "UTF-8"));
         Document root = Jsoup.connect(searchUrl).header("User-Agent", header).timeout(60000).get();
         Elements items = root.getElementsByAttributeValue("class", "goods-list").get(0)
               .getElementsByAttributeValue("class", "goods-item");
         if (items.size() > 0) {
            String code = getTKL(HOST + items.get(0).getElementsByTag("a").attr("href"));
            int count = 1;
            while (com.yeshi.fanli.util.StringUtil.isNullOrEmpty(code) && count < items.size() && count < 5) {
               code = getTKL(HOST + items.get(count).getElementsByTag("a").attr("href"));
               count++;
            }
         }
      } catch (UnsupportedEncodingException e) {
         e.printStackTrace();
      } catch (IOException e) {
         e.printStackTrace();
      }
   }
   // 获取淘口�?
   public static String getTKL(String url) {
      String header = "Mozilla/5.0 (Linux; Android 6.0; M5 Note Build/MRA58K; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/53.0.2785.49 Mobile MQQBrowser/6.2 TBS/043024 Safari/537.36 MicroMessenger/6.5.4.1000 NetType/WIFI Language/zh_CN";
      try {
         Document root = Jsoup.connect(url).header("User-Agent", header).timeout(60000).get();
         return root.getElementsByAttributeValue("class", "tuwen-tkl").get(0)
               .getElementsByAttributeValue("class", "tkl").get(0).getElementById("code1_ios").text().trim();
      } catch (Exception e) {
         e.printStackTrace();
      }
      return null;
   }
   public static List<GoodsClass> getGoodsType() {
      List<GoodsClass> list = new ArrayList<>();
      String[] names = new String[] { "女装", "男装", "内衣", "母婴", "化妆品", "居家", "鞋包配饰", "美食", "文体车品", "数码家电" };
      int[] ids = new int[] { 1, 9, 10, 2, 3, 4, 5, 6, 7, 8 };
      for (int i = 0; i < names.length; i++) {
         GoodsClass gc = new GoodsClass();
         gc.setId(Long.parseLong(ids[i] + ""));
         gc.setName(names[i]);
         list.add(gc);
      }
      return list;
   }
   public static TaoBaoSearchResult getGoodsByType(int type) {
      TaoBaoSearchResult result = new TaoBaoSearchResult();
      result.setNavList(null);
      List<TaoBaoGoodsBrief> goodsList = new ArrayList<>();
      JSONArray array = getGoods("http://dataoke.yeshitv.com/index.php?r=index/cat&cid=" + type);
      for (int i = 0; i < array.size(); i++) {
         JSONObject data = array.optJSONObject(i);
         TaoBaoGoodsBrief goods = new TaoBaoGoodsBrief();
         goods.setAuctionId(data.optLong("url"));
         goods.setBiz30day(data.optInt("nums"));
         goods.setPictUrl(data.optString("img").split(".jpg")[0] + ".jpg");
         goods.setCouponAmount(new BigDecimal(data.optString("quan")));
         goods.setZkPrice(new BigDecimal(data.optString("beforPrice")));
         goods.setCouponStartFee(new BigDecimal(0));
         goods.setTitle(data.optString("title"));
         goods.setTkCommFee(new BigDecimal(0));
         goods.setTkRate(new BigDecimal(0));
         goodsList.add(goods);
      }
      PageEntity pe = new PageEntity(1, 20, 1000);
      result.setPageEntity(pe);
      result.setTaoBaoGoodsBriefs(goodsList);
      TaoBaoHead head = new TaoBaoHead();
      head.setDocsfound(1000);
      result.setTaoBaoHead(head);
      return result;
   }
   public static TaoBaoSearchResult searchByKey(String kw) {
      TaoBaoSearchResult result = new TaoBaoSearchResult();
      result.setNavList(null);
      List<TaoBaoGoodsBrief> goodsList = new ArrayList<>();
      JSONArray array = null;
      try {
         array = getGoods("http://dataoke.yeshitv.com/index.php?r=l&kw=" + URLEncoder.encode(kw, "UTF-8"));
      } catch (UnsupportedEncodingException e) {
         e.printStackTrace();
      }
      for (int i = 0; i < array.size(); i++) {
         JSONObject data = array.optJSONObject(i);
         TaoBaoGoodsBrief goods = new TaoBaoGoodsBrief();
         goods.setAuctionId(data.optLong("url"));
         goods.setBiz30day(data.optInt("nums"));
         goods.setPictUrl(data.optString("img").split(".jpg")[0] + ".jpg");
         goods.setCouponAmount(new BigDecimal(data.optString("quan")));
         goods.setZkPrice(new BigDecimal(data.optString("beforPrice")));
         goods.setCouponStartFee(new BigDecimal(0));
         goods.setTitle(data.optString("title"));
         goods.setTkCommFee(new BigDecimal(0));
         goods.setTkRate(new BigDecimal(0));
         goodsList.add(goods);
      }
      PageEntity pe = new PageEntity(1, 20, 1000);
      result.setPageEntity(pe);
      result.setTaoBaoGoodsBriefs(goodsList);
      TaoBaoHead head = new TaoBaoHead();
      head.setDocsfound(1000);
      result.setTaoBaoHead(head);
      return result;
   }
   public static JSONArray getGoods(String pageUrl) {
      if (pageUrl == null)
         return null;
      Document doc = null;
      try {
         doc = Jsoup.connect(pageUrl)
               .userAgent(
                     "Mozilla/5.0 (iPhone; CPU iPhone OS 10_3 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) CriOS/56.0.2924.75 Mobile/14E5239e Safari/602.1")
               .get();
      } catch (IOException e) {
         // TODO Auto-generated catch block
         e.printStackTrace();
      }
      if (null == doc) {
         return null;
      }
      Elements elements = doc.getElementsByClass("goods-item");
      JSONArray jsa = new JSONArray();
      for (int i = 0; i < elements.size(); i++) {
         JSONObject obj = new JSONObject();
         Element element = elements.get(i);
         String img = element.getElementsByAttributeValue("class", "img").get(0).getElementsByTag("img").get(0)
               .attr("data-original");
         if (StringUtil.isNullOrEmpty(img))
            img = element.getElementsByAttributeValue("class", "img").get(0).getElementsByTag("img").get(0)
                  .attr("src");
         if (img.startsWith("//")) {
            img = "http:" + img;
         }
         String title = element.getElementsByAttributeValue("class", "title").get(0)
               .getElementsByAttributeValue("class", "text").get(0).text();
         String price = element.getElementsByAttributeValue("class", "price-wrapper").get(0)
               .getElementsByAttributeValue("class", "price").get(0).text().replace("¥", "");
         String coupon = element.getElementsByClass("img").get(0).getElementsByClass("coupon-wrapper").get(0)
               .getElementsByTag("b").get(0).text().replace("元", "");
         String afterPrice = price + "";
         String beforePrice = Float.parseFloat(price) + Float.parseFloat(coupon) + "";
         String nums = element.getElementsByAttributeValue("class", "sold-num").get(0).text();
         String[] chars = element.getElementsByAttributeValue("class", "img").get(0).attr("href").split("id=");
         String id = chars[1].split("&u=")[0];
         String quanMoney = element.getElementsByClass("coupon-wrapper").get(0).getElementsByTag("b").get(0).text();
         obj.put("img", img);
         obj.put("title", title);
         obj.put("afterPrice", afterPrice);
         obj.put("beforPrice", beforePrice);
         obj.put("nums", nums);
         obj.put("url", id);
         obj.put("quan", quanMoney);
         jsa.add(obj);
      }
      return jsa;
   }
   public static long getAuctionId(long id) {
      Document doc = null;
      try {
         doc = Jsoup.connect("http://dataoke.yeshitv.com/index.php?r=p/dnew&id=" + id + "&type=0&version=2")
               .userAgent(
                     "Mozilla/5.0 (iPhone; CPU iPhone OS 10_3 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) CriOS/56.0.2924.75 Mobile/14E5239e Safari/602.1")
               .get();
      } catch (IOException e) {
         e.printStackTrace();
      }
      String href = "";
      Elements as = doc.getElementsByClass("goods_shop_cart").get(0).getElementsByTag("a");
      if (as != null)
         for (int i = 0; i < as.size(); i++) {
            if (as.get(i).attr("href").contains("uland.taobao.com/coupon/edetail")) {
               href = as.get(i).attr("href");
               break;
            }
         }
      String[] sts = href.split("&");
      for (String st : sts) {
         if (st.contains("itemId="))
            return Long.parseLong(st.replace("itemId=", ""));
      }
      return 0;
   }
   public static List<Long> get9K9List(int page) {
      String url = "";
      Document doc = null;
      // for (String st : sts) {
      // if (st.contains("itemId="))
      // return Long.parseLong(st.replace("itemId=", ""));
      // }
      // return 0;
      return null;
   }
   /**
    * 大淘客叮咚抢数据
    *
    * @return
    */
   public static List<DingDongQiangDTO> getDingDongQiang() {
      List<DingDongQiangDTO> list = new ArrayList<>();
      Document doc = null;
      try {
         doc = Jsoup.connect("http://www.dataoke.com/ddq").userAgent("").get();
      } catch (IOException e1) {
         e1.printStackTrace();
      }
      if (doc == null)
         return new ArrayList<>();
      Elements els = doc.getElementsByTag("script");
      for (int i = 0; i < els.size(); i++) {
         String content = els.get(i).html();
         if (content.indexOf("var dataDef") > -1) {
            ScriptEngineManager manager = new ScriptEngineManager();
            ScriptEngine engine = manager.getEngineByName("javascript");
            try {
               String js = "function getData(){return  JSON.stringify(dataDef);} var test1='--';function test2(res){};"
                     + content.replace("$(window).load", "test2").replace("window.location.search.", "test1.");
               engine.eval(js);
               if (engine instanceof Invocable) {
                  Invocable in = (Invocable) engine;
                  String data = in.invokeFunction("getData").toString();
                  System.out.println(data);
                  JSONObject dataJson = JSONObject.fromObject(data);
                  for (Iterator<String> its = dataJson.keys(); its.hasNext();) {
                     String key = its.next();
                     JSONArray array = dataJson.optJSONArray(key);
                     List<DaTaoKeDetailV2> detailList = new ArrayList<>();
                     for (int n = 0; n < array.size(); n++) {
                        DaTaoKeDetailV2 v2 = new DaTaoKeDetailV2();
                        v2.setId(array.optJSONObject(n).optLong("id"));
                        detailList.add(v2);
                     }
                     list.add(new DingDongQiangDTO(key, detailList));
                  }
               }
            } catch (Exception e) {
               e.printStackTrace();
            }
         }
      }
      return list;
   }
   public static List<TaoBaoCoupon> getRecommendCouple() {
      List<TaoBaoCoupon> couponList = new ArrayList<>();
      TaoBaoSearchResult result = new TaoBaoSearchResult();
      result.setNavList(null);
      JSONArray array = getGoods("http://dataoke.yeshitv.com/index.php?r=index/wap&u=487704");
      for (int i = 0; i < array.size(); i++) {
         JSONObject data = array.optJSONObject(i);
         TaoBaoCoupon coupon = new TaoBaoCoupon();
         coupon.setAuctionId(data.optString("url"));
         coupon.setAuctionUrl("");
         coupon.setCouponAmount(new BigDecimal(data.optString("quan")));
         coupon.setCouponCount(data.optInt("nums"));
         coupon.setCouponinfo("");
         coupon.setHongbao(new BigDecimal(0));
         coupon.setPictUrl(data.optString("img").split(".jpg")[0] + ".jpg");
         coupon.setTitle(data.optString("title"));
         coupon.setZkPrice(new BigDecimal(data.optString("beforPrice")));
         coupon.setCouponStartFee(new BigDecimal(0));
         coupon.setQuanPrice(new BigDecimal(data.optString("afterPrice")));
         couponList.add(coupon);
      }
      return couponList;
   }
   private static List<DaTaoKeDetailV2> parseCurrent(String url) {
      List<DaTaoKeDetailV2> list = new ArrayList<>();
      try {
         Document doc = Jsoup.connect(url)
               .userAgent(
                     "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36")
               .get();
         Elements items = doc.getElementsByClass("goods-list").get(0).getElementsByClass("goods-item");
         for (int i = 0; i < items.size(); i++) {
            Long id = Long.parseLong(items.get(i).attr("id").replace("goods-items_", ""));
            String currentSale = items.get(i).getElementsByClass("goods-item-content").get(0)
                  .getElementsByClass("goods-info").get(0).getElementsByClass("tg-show").get(0)
                  .getElementsByTag("b").get(0).text();
            System.out.println(id + "-" + currentSale);
            DaTaoKeDetailV2 detail = new DaTaoKeDetailV2();
            detail.setId(id);
            detail.setMonthSales(Integer.parseInt(currentSale));
            list.add(detail);
         }
      } catch (IOException e) {
         e.printStackTrace();
      }
      // TODO 需要返回值
      return list;
   }
   // 获取实时榜单
   /**
    * 获取实时销量榜
    *
    * @param cid
    * @return
    */
   public static List<DaTaoKeDetailV2> getCurrentSalesRank(Integer cid) {
      String url = null;
      if (cid == null)
         url = "http://www.dataoke.com/top_sell";
      else
         url = String.format("http://www.dataoke.com/top_sell?cid=%s&type=1", cid);
      return parseCurrent(url);
   }
   /**
    * 全天销量榜
    *
    * @param cid
    * @return
    */
   public static List<DaTaoKeDetailV2> getCurrentDaySalesRank(Integer cid) {
      String url = null;
      if (cid == null)
         url = "http://www.dataoke.com/top_all";
      else
         url = String.format("http://www.dataoke.com/top_all?cid=%s", cid);
      return parseCurrent(url);
   }
   /**
    * 获取热推榜
    *
    * @param cid
    * @return
    */
   public static List<DaTaoKeDetailV2> getCurrentHotSalesRank() {
      String url = "http://www.dataoke.com/top_tui";
      return parseCurrent(url);
   }
   public static String getRandomCommonEmoji() {
      return commonEmojis[(int) (Math.random() * commonEmojis.length)];
   }
   public static String getEvaluateEmojis() {
      return evaluateEmojis[(int) (Math.random() * evaluateEmojis.length)];
   }
   public static String getDesc(DaTaoKeDetailV2 detail) {
      // 标题+券后价+包邮+描述
      String desc = detail.getDtitle();
      desc += "\n";
      desc += String.format("券后价%s【%s元】包邮秒杀 ", Math.random() > 0.5 ? "💰" : "",
            MoneyBigDecimalUtil.getWithNoZera(detail.getActualPrice()).toString())
            + (Math.random() > 0.5 ? getRandomCommonEmoji() : "");
      desc += "\n";
      // desc += detail.getIntroduce();
      String introduce = detail.getDesc().replace(",", ",").replace("。", ",").replace("!", ",").replace(",", ",");
      introduce = introduce.replace(",,,", ",").replace(",,", ",");
      String[] sts = introduce.split(",");
      introduce = "";
      for (int i = 0; i < sts.length; i++) {
         if (i % 2 == 1) {// 需要换行
            introduce += sts[i] + (Math.random() > 0.5 ? getRandomCommonEmoji() : i == sts.length - 1 ? "" : ",")
                  + "\n";
         } else
            introduce += sts[i] + (Math.random() > 0.5 ? getRandomCommonEmoji() : i == sts.length - 1 ? "" : ",");
      }
      desc += introduce;
      return desc;
   }
   public static TaoBaoGoodsBrief filterTaoBaoGoods(TaoBaoGoodsBrief goods, DaTaoKeDetailV2 v2,
         boolean filterCouponInfo) {
      if (v2 != null && goods != null) {
         // 重新设置标题与券价格
         goods.setTitle(v2.getDtitle());
         if (!StringUtil.isNullOrEmpty(v2.getMainPic()))
            goods.setPictUrlWhite(v2.getMainPic());
         // 如果没有券信息,则提供券信息
         if (StringUtil.isNullOrEmpty(goods.getCouponInfo()) && v2 != null
               && !StringUtil.isNullOrEmpty(v2.getCouponLink())) {
            try {
               long time = System.currentTimeMillis();
               // 券在有效期内并且还有剩余券
               if (time >= TimeUtil.convertToTimeTemp(v2.getCouponStartTime(), "yyyy-MM-dd HH:mm:ss")
                     && time <= TimeUtil.convertToTimeTemp(v2.getCouponEndTime(), "yyyy-MM-dd HH:mm:ss")
                     && (v2.getCouponTotalNum() - v2.getCouponReceiveNum()) > 0) {
                  goods.setCouponStartFee(v2.getOriginalPrice());
                  goods.setCouponEffectiveEndTime(TimeUtil.getGernalTime(
                        TimeUtil.convertToTimeTemp(v2.getCouponEndTime(), "yyyy-MM-dd HH:mm:ss"),
                        "yyyy-MM-dd"));
                  goods.setCouponEffectiveStartTime(TimeUtil.getGernalTime(
                        TimeUtil.convertToTimeTemp(v2.getCouponStartTime(), "yyyy-MM-dd HH:mm:ss"),
                        "yyyy-MM-dd"));
                  goods.setCouponAmount(v2.getCouponPrice());
                  goods.setCouponInfo(
                        String.format("满%s元减%s元", v2.getOriginalPrice() + "", v2.getCouponPrice() + ""));
                  goods.setCouponLeftCount(v2.getCouponTotalNum() - v2.getCouponReceiveNum());
                  goods.setCouponLink(v2.getCouponLink());
                  goods.setCouponTotalCount(v2.getCouponTotalNum());
                  goods.setShopCoupon(true);
                  goods.setZkPrice(v2.getOriginalPrice());
               }
            } catch (Exception e) {
            }
         }
      }
      return goods;
   }
   public static TaoBaoGoodsBrief filterTaoBaoGoods(TaoBaoGoodsBrief goods, DaTaoKeDetailV2 v2) {
      return filterTaoBaoGoods(goods, v2, false);
   }
   public static DaTaoKeDetailV2 filterDaTaoKe(TaoBaoGoodsBrief goods, DaTaoKeDetailV2 detail) {
      if (goods != null) {
         BigDecimal price = TaoBaoUtil.getAfterUseCouplePrice(goods);
         detail.setOriginalPrice(goods.getZkPrice());
         detail.setActualPrice(price);
         if (goods.getCouponStartFee() != null)
            detail.setCouponConditions(goods.getCouponStartFee() + "");
         detail.setCouponPrice(goods.getCouponAmount());
         return detail;
      }
      return detail;
   }
   public static List<DingDongTime> getDingDongQiangTime(Calendar nowDate) {
      // 获取当前的小时数
      DingDongTime[] times = new DingDongTime[] { new DingDongTime("0", "00:00"), new DingDongTime("8", "08:00"),
            new DingDongTime("10", "10:00"), new DingDongTime("13", "13:00"), new DingDongTime("15", "15:00"),
            new DingDongTime("17", "17:00"), new DingDongTime("19", "19:00"), new DingDongTime("20", "20:00"),
            new DingDongTime("21", "21:00") };
      Calendar preDate = Calendar.getInstance();
      preDate.setTimeInMillis(nowDate.getTimeInMillis() - 24 * 60 * 60 * 1000L);
      Calendar nextDate = Calendar.getInstance();
      nextDate.setTimeInMillis(nowDate.getTimeInMillis() + 24 * 60 * 60 * 1000L);
      String preDay = (preDate.get(Calendar.DAY_OF_MONTH) + "").length() < 2
            ? "0" + preDate.get(Calendar.DAY_OF_MONTH) : preDate.get(Calendar.DAY_OF_MONTH) + "";
      String nextDay = (nextDate.get(Calendar.DAY_OF_MONTH) + "").length() < 2
            ? "0" + nextDate.get(Calendar.DAY_OF_MONTH) : nextDate.get(Calendar.DAY_OF_MONTH) + "";
      String nowDay = (nowDate.get(Calendar.DAY_OF_MONTH) + "").length() < 2
            ? "0" + nowDate.get(Calendar.DAY_OF_MONTH) : nowDate.get(Calendar.DAY_OF_MONTH) + "";
      int hour = nowDate.get(Calendar.HOUR_OF_DAY);
      int pos = times.length - 1;
      for (int i = 0; i < times.length - 1; i++) {
         if (hour >= Integer.parseInt(times[i].getKey()) && hour < Integer.parseInt(times[i + 1].getKey())) {
            pos = i;
            break;
         }
      }
      List<DingDongTime> list = new ArrayList<>();
      // 获取当前时间之前的5个数据
      for (int i = 5; i >= 0; i--) {
         int p = pos - i < 0 ? (times.length + pos - i) : pos - i;
         DingDongTime itemData = new DingDongTime(times[p].getKey(), times[p].getValue(), -1);
         if (pos - i < 0)
            itemData.setTime(
                  preDay + "" + (itemData.getKey().length() < 2 ? ("0" + itemData.getKey()) : itemData.getKey()));
         else
            itemData.setTime(
                  nowDay + "" + (itemData.getKey().length() < 2 ? ("0" + itemData.getKey()) : itemData.getKey()));
         if (pos == p)
            itemData.setState(0);
         list.add(itemData);
      }
      // 向后添加剩下的
      if (pos + 1 < times.length)
         for (int i = pos + 1; i < times.length; i++) {
            DingDongTime itemData = new DingDongTime(times[i].getKey(), times[i].getValue(), 1);
            itemData.setTime(
                  nowDay + "" + (itemData.getKey().length() < 2 ? ("0" + itemData.getKey()) : itemData.getKey()));
            list.add(itemData);
         }
      if (times.length - (pos + 1) < 2) {
         DingDongTime itemData = new DingDongTime(times[0].getKey(), times[0].getValue(), 1);
         itemData.setTime(
               nextDay + "" + (itemData.getKey().length() < 2 ? ("0" + itemData.getKey()) : itemData.getKey()));
         list.add(itemData);
      }
      return list;
   }
   // 获取推广文案
   public static void getPublishDoc(String id) {
      String url = String.format("http://www.dataoke.com/detailtpl?gid=%s&type=1", id);
      String response = HttpUtil.get(url);
      try {
         JSONObject json = JSONObject.fromObject(new String(response.getBytes("ISO-8859-1"), "UTF-8"));
         JSONObject data = json.optJSONObject("data");
         String tpl2 = data.optString("tpl2");
         tpl2 = tpl2.substring(0, tpl2.indexOf("---------"));
         System.out.println(tpl2.replace("</br>", "\n").trim());
      } catch (Exception e) {
      }
   }
}
package com.yeshi.fanli.util.taobao;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.math.BigDecimal;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Iterator;
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.nodes.Element;
import org.jsoup.select.Elements;
import org.yeshi.utils.HttpUtil;
import com.yeshi.goods.facade.dto.taobao.dataoke.DingDongQiangDTO;
import com.yeshi.goods.facade.dto.taobao.dataoke.DingDongTime;
import com.yeshi.goods.facade.dto.taobao.dataoke.DaTaoKeFilterResult;
import com.yeshi.fanli.entity.bus.clazz.GoodsClass;
import com.yeshi.fanli.entity.taobao.TaoBaoCoupon;
import com.yeshi.goods.facade.entity.taobao.TaoBaoGoodsBrief;
import com.yeshi.goods.facade.entity.taobao.TaoBaoHead;
import com.yeshi.fanli.entity.taobao.TaoBaoSearchResult;
import com.yeshi.goods.facade.entity.taobao.dataoke.DaTaoKeDetailV2;
import com.yeshi.common.entity.PageEntity;
import org.yeshi.utils.MoneyBigDecimalUtil;
import com.yeshi.fanli.util.StringUtil;
import org.yeshi.utils.TimeUtil;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
/**
 * 大淘客api接口
 *
 * @author Administrator
 *
 */
public class DaTaoKeUtil {
   static final String[] commonEmojis = new String[] { "😀", // 笑嘻嘻
         "😁", // 笑嘻嘻的脸,含笑的眼睛
         "😃", // 开口笑脸
         "😄", // 开口笑脸和微笑的眼睛
         "😆", // 开口笑紧闭的眼睛
         "😉", // 眨眼表情
         "😊", // 面带微笑的眼睛
         "😋", // 品尝美味食物表情
         "😎", // 太阳镜笑脸
         "😍", // 面带心形眼睛
         "😘", // 飞吻表情
         "😗", // 亲吻表情
         "😙", // 含笑亲吻表情
         "😚", // 闭眼亲吻表情
         "☺", // 笑脸
         "😇", // 光环笑脸
         "😐", // 中性面
         "😏", // 傻笑
         "😮", // 张着嘴
         "😛", // 吐舌头
         "😜", // 吐舌头,眨眼眼
         "😝", // 闭眼吐舌头
         "👅", // 舌头
         "👄", // 口
         "👀", // 眼睛
         "❤", // 心
         "💓", // 跳动的心
         "💕", // 两颗心
         "💗", // 成长的心
         "💝", // 扎丝带的心形礼盒
         "💞", // 旋转心
         "💐", // 花束
         "🌸", // 樱花
         "🌹", // 玫瑰
         "🌺", // 槿
         "🌻", // 向日葵
         "🌼", // 开花
         "🌷", // 郁金香
         "🍇", // 葡萄
         "🍈", // 瓜
         "🍉", // 西瓜
         "🍊", // 柑橘
         "🍋", // 柠檬
         "🍌", // 香蕉
         "🍍", // 菠萝
         "🍎", // 红苹果
         "🍏", // 青苹果
         "🍐", // 梨
         "🍑", // 桃子
         "🍒", // 樱桃
         "🍓", // 草莓
         "🌿", // 枝叶
         "🍀", // 四叶草
         "🍁", // 枫叶
         "🍂", // 落叶
         "🍃", // 叶子在风中飘落
         "☘", // 三叶草(酢浆草)
         "☀", // 太阳光芒四射
         "🌞", // 太阳人脸
         "⭐", // 星星,五角星
         "🌟",// 发光的星星
   };
   static final String[] timeEmojis = new String[] { "🕛", // 十二点
         "🕧", // 十二点半
         "🕐", // 一点钟
         "🕜", // 一点半
         "🕑", // 两点
         "🕝", // 两点半
         "🕒", // 三点钟
         "🕞", // 三点半
         "🕓", // 四点钟
         "🕟", // 四点半
         "🕔", // 五时
         "🕠", // 五点半
         "🕕", // 六点
         "🕡", // 六点半
         "🕖", // 七点
         "🕢", // 七点半
         "🕗", // 八点
         "🕣", // 八点半
         "🕘", // 九点钟
         "🕤", // 九点半
         "🕙", // 的十点
         "🕥", // 十点半
         "🕚", // 十一点
         "🕦",// 十一点半
   };
   static final String[] evaluateEmojis = new String[] { "💟", "🌸", "🍸", "🍺", "📢", "❤", "💝", "💋", "👛", "🐾",
         "🌹", "🔥", "🎉", "🎁", "🍥", "🍭", "🌺", "👑", "✨", "💫", "🍻", "🎈", "💥", "💕", "💞", "💰", "💌", "💭",
         "🌼", "🍀" };
   public static List<GoodsClass> goodsClasses;
   static {
      goodsClasses = new ArrayList<>();
      goodsClasses.add(new GoodsClass(4L, "居家日用"));
      goodsClasses.add(new GoodsClass(6L, "美食"));
      goodsClasses.add(new GoodsClass(2L, "母婴"));
      goodsClasses.add(new GoodsClass(3L, "美妆"));
      goodsClasses.add(new GoodsClass(1L, "女装"));
      goodsClasses.add(new GoodsClass(8L, "数码家电"));
      goodsClasses.add(new GoodsClass(7L, "文娱车品"));
      goodsClasses.add(new GoodsClass(10L, "内衣"));
      goodsClasses.add(new GoodsClass(14L, "家装家纺"));
      goodsClasses.add(new GoodsClass(5L, "鞋品"));
      goodsClasses.add(new GoodsClass(9L, "男装"));
      goodsClasses.add(new GoodsClass(12L, "配饰"));
      goodsClasses.add(new GoodsClass(13L, "户外运动"));
      goodsClasses.add(new GoodsClass(11L, "箱包"));
   }
   public static final String HOST = "http://dataoke.yeshitv.com";
   public static void search(String key) {
      String header = "Mozilla/5.0 (Linux; Android 6.0; M5 Note Build/MRA58K; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/53.0.2785.49 Mobile MQQBrowser/6.2 TBS/043024 Safari/537.36 MicroMessenger/6.5.4.1000 NetType/WIFI Language/zh_CN";
      try {
         String searchUrl = String.format("http://dataoke.yeshitv.com/index.php?r=%s&kw=%s",
               URLEncoder.encode("index/search", "UTF-8"));
         Document root = Jsoup.connect(searchUrl).header("User-Agent", header).timeout(60000).get();
         Elements items = root.getElementsByAttributeValue("class", "goods-list").get(0)
               .getElementsByAttributeValue("class", "goods-item");
         if (items.size() > 0) {
            String code = getTKL(HOST + items.get(0).getElementsByTag("a").attr("href"));
            int count = 1;
            while (com.yeshi.fanli.util.StringUtil.isNullOrEmpty(code) && count < items.size() && count < 5) {
               code = getTKL(HOST + items.get(count).getElementsByTag("a").attr("href"));
               count++;
            }
         }
      } catch (UnsupportedEncodingException e) {
         e.printStackTrace();
      } catch (IOException e) {
         e.printStackTrace();
      }
   }
   // 获取淘口�?
   public static String getTKL(String url) {
      String header = "Mozilla/5.0 (Linux; Android 6.0; M5 Note Build/MRA58K; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/53.0.2785.49 Mobile MQQBrowser/6.2 TBS/043024 Safari/537.36 MicroMessenger/6.5.4.1000 NetType/WIFI Language/zh_CN";
      try {
         Document root = Jsoup.connect(url).header("User-Agent", header).timeout(60000).get();
         return root.getElementsByAttributeValue("class", "tuwen-tkl").get(0)
               .getElementsByAttributeValue("class", "tkl").get(0).getElementById("code1_ios").text().trim();
      } catch (Exception e) {
         e.printStackTrace();
      }
      return null;
   }
   public static List<GoodsClass> getGoodsType() {
      List<GoodsClass> list = new ArrayList<>();
      String[] names = new String[] { "女装", "男装", "内衣", "母婴", "化妆品", "居家", "鞋包配饰", "美食", "文体车品", "数码家电" };
      int[] ids = new int[] { 1, 9, 10, 2, 3, 4, 5, 6, 7, 8 };
      for (int i = 0; i < names.length; i++) {
         GoodsClass gc = new GoodsClass();
         gc.setId(Long.parseLong(ids[i] + ""));
         gc.setName(names[i]);
         list.add(gc);
      }
      return list;
   }
   public static TaoBaoSearchResult getGoodsByType(int type) {
      TaoBaoSearchResult result = new TaoBaoSearchResult();
      result.setNavList(null);
      List<TaoBaoGoodsBrief> goodsList = new ArrayList<>();
      JSONArray array = getGoods("http://dataoke.yeshitv.com/index.php?r=index/cat&cid=" + type);
      for (int i = 0; i < array.size(); i++) {
         JSONObject data = array.optJSONObject(i);
         TaoBaoGoodsBrief goods = new TaoBaoGoodsBrief();
         goods.setAuctionId(data.optString("url"));
         goods.setBiz30day(data.optInt("nums"));
         goods.setPictUrl(data.optString("img").split(".jpg")[0] + ".jpg");
         goods.setCouponAmount(new BigDecimal(data.optString("quan")));
         goods.setZkPrice(new BigDecimal(data.optString("beforPrice")));
         goods.setCouponStartFee(new BigDecimal(0));
         goods.setTitle(data.optString("title"));
         goods.setTkCommFee(new BigDecimal(0));
         goods.setTkRate(new BigDecimal(0));
         goodsList.add(goods);
      }
      PageEntity pe = new PageEntity(1, 20, 1000);
      result.setPageEntity(pe);
      result.setTaoBaoGoodsBriefs(goodsList);
      TaoBaoHead head = new TaoBaoHead();
      head.setDocsfound(1000);
      result.setTaoBaoHead(head);
      return result;
   }
   public static TaoBaoSearchResult searchByKey(String kw) {
      TaoBaoSearchResult result = new TaoBaoSearchResult();
      result.setNavList(null);
      List<TaoBaoGoodsBrief> goodsList = new ArrayList<>();
      JSONArray array = null;
      try {
         array = getGoods("http://dataoke.yeshitv.com/index.php?r=l&kw=" + URLEncoder.encode(kw, "UTF-8"));
      } catch (UnsupportedEncodingException e) {
         e.printStackTrace();
      }
      for (int i = 0; i < array.size(); i++) {
         JSONObject data = array.optJSONObject(i);
         TaoBaoGoodsBrief goods = new TaoBaoGoodsBrief();
         goods.setAuctionId(data.optString("url"));
         goods.setBiz30day(data.optInt("nums"));
         goods.setPictUrl(data.optString("img").split(".jpg")[0] + ".jpg");
         goods.setCouponAmount(new BigDecimal(data.optString("quan")));
         goods.setZkPrice(new BigDecimal(data.optString("beforPrice")));
         goods.setCouponStartFee(new BigDecimal(0));
         goods.setTitle(data.optString("title"));
         goods.setTkCommFee(new BigDecimal(0));
         goods.setTkRate(new BigDecimal(0));
         goodsList.add(goods);
      }
      PageEntity pe = new PageEntity(1, 20, 1000);
      result.setPageEntity(pe);
      result.setTaoBaoGoodsBriefs(goodsList);
      TaoBaoHead head = new TaoBaoHead();
      head.setDocsfound(1000);
      result.setTaoBaoHead(head);
      return result;
   }
   public static JSONArray getGoods(String pageUrl) {
      if (pageUrl == null)
         return null;
      Document doc = null;
      try {
         doc = Jsoup.connect(pageUrl)
               .userAgent(
                     "Mozilla/5.0 (iPhone; CPU iPhone OS 10_3 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) CriOS/56.0.2924.75 Mobile/14E5239e Safari/602.1")
               .get();
      } catch (IOException e) {
         // TODO Auto-generated catch block
         e.printStackTrace();
      }
      if (null == doc) {
         return null;
      }
      Elements elements = doc.getElementsByClass("goods-item");
      JSONArray jsa = new JSONArray();
      for (int i = 0; i < elements.size(); i++) {
         JSONObject obj = new JSONObject();
         Element element = elements.get(i);
         String img = element.getElementsByAttributeValue("class", "img").get(0).getElementsByTag("img").get(0)
               .attr("data-original");
         if (StringUtil.isNullOrEmpty(img))
            img = element.getElementsByAttributeValue("class", "img").get(0).getElementsByTag("img").get(0)
                  .attr("src");
         if (img.startsWith("//")) {
            img = "http:" + img;
         }
         String title = element.getElementsByAttributeValue("class", "title").get(0)
               .getElementsByAttributeValue("class", "text").get(0).text();
         String price = element.getElementsByAttributeValue("class", "price-wrapper").get(0)
               .getElementsByAttributeValue("class", "price").get(0).text().replace("¥", "");
         String coupon = element.getElementsByClass("img").get(0).getElementsByClass("coupon-wrapper").get(0)
               .getElementsByTag("b").get(0).text().replace("元", "");
         String afterPrice = price + "";
         String beforePrice = Float.parseFloat(price) + Float.parseFloat(coupon) + "";
         String nums = element.getElementsByAttributeValue("class", "sold-num").get(0).text();
         String[] chars = element.getElementsByAttributeValue("class", "img").get(0).attr("href").split("id=");
         String id = chars[1].split("&u=")[0];
         String quanMoney = element.getElementsByClass("coupon-wrapper").get(0).getElementsByTag("b").get(0).text();
         obj.put("img", img);
         obj.put("title", title);
         obj.put("afterPrice", afterPrice);
         obj.put("beforPrice", beforePrice);
         obj.put("nums", nums);
         obj.put("url", id);
         obj.put("quan", quanMoney);
         jsa.add(obj);
      }
      return jsa;
   }
   public static long getAuctionId(long id) {
      Document doc = null;
      try {
         doc = Jsoup.connect("http://dataoke.yeshitv.com/index.php?r=p/dnew&id=" + id + "&type=0&version=2")
               .userAgent(
                     "Mozilla/5.0 (iPhone; CPU iPhone OS 10_3 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) CriOS/56.0.2924.75 Mobile/14E5239e Safari/602.1")
               .get();
      } catch (IOException e) {
         e.printStackTrace();
      }
      String href = "";
      Elements as = doc.getElementsByClass("goods_shop_cart").get(0).getElementsByTag("a");
      if (as != null)
         for (int i = 0; i < as.size(); i++) {
            if (as.get(i).attr("href").contains("uland.taobao.com/coupon/edetail")) {
               href = as.get(i).attr("href");
               break;
            }
         }
      String[] sts = href.split("&");
      for (String st : sts) {
         if (st.contains("itemId="))
            return Long.parseLong(st.replace("itemId=", ""));
      }
      return 0;
   }
   public static List<Long> get9K9List(int page) {
      String url = "";
      Document doc = null;
      // for (String st : sts) {
      // if (st.contains("itemId="))
      // return Long.parseLong(st.replace("itemId=", ""));
      // }
      // return 0;
      return null;
   }
   /**
    * 大淘客叮咚抢数据
    *
    * @return
    */
   public static List<DingDongQiangDTO> getDingDongQiang() {
      List<DingDongQiangDTO> list = new ArrayList<>();
      Document doc = null;
      try {
         doc = Jsoup.connect("http://www.dataoke.com/ddq").userAgent("").get();
      } catch (IOException e1) {
         e1.printStackTrace();
      }
      if (doc == null)
         return new ArrayList<>();
      Elements els = doc.getElementsByTag("script");
      for (int i = 0; i < els.size(); i++) {
         String content = els.get(i).html();
         if (content.indexOf("var dataDef") > -1) {
            ScriptEngineManager manager = new ScriptEngineManager();
            ScriptEngine engine = manager.getEngineByName("javascript");
            try {
               String js = "function getData(){return  JSON.stringify(dataDef);} var test1='--';function test2(res){};"
                     + content.replace("$(window).load", "test2").replace("window.location.search.", "test1.");
               engine.eval(js);
               if (engine instanceof Invocable) {
                  Invocable in = (Invocable) engine;
                  String data = in.invokeFunction("getData").toString();
                  System.out.println(data);
                  JSONObject dataJson = JSONObject.fromObject(data);
                  for (Iterator<String> its = dataJson.keys(); its.hasNext();) {
                     String key = its.next();
                     JSONArray array = dataJson.optJSONArray(key);
                     List<DaTaoKeDetailV2> detailList = new ArrayList<>();
                     for (int n = 0; n < array.size(); n++) {
                        DaTaoKeDetailV2 v2 = new DaTaoKeDetailV2();
                        v2.setId(array.optJSONObject(n).optLong("id"));
                        detailList.add(v2);
                     }
                     list.add(new DingDongQiangDTO(key, detailList));
                  }
               }
            } catch (Exception e) {
               e.printStackTrace();
            }
         }
      }
      return list;
   }
   public static List<TaoBaoCoupon> getRecommendCouple() {
      List<TaoBaoCoupon> couponList = new ArrayList<>();
      TaoBaoSearchResult result = new TaoBaoSearchResult();
      result.setNavList(null);
      JSONArray array = getGoods("http://dataoke.yeshitv.com/index.php?r=index/wap&u=487704");
      for (int i = 0; i < array.size(); i++) {
         JSONObject data = array.optJSONObject(i);
         TaoBaoCoupon coupon = new TaoBaoCoupon();
         coupon.setAuctionId(data.optString("url"));
         coupon.setAuctionUrl("");
         coupon.setCouponAmount(new BigDecimal(data.optString("quan")));
         coupon.setCouponCount(data.optInt("nums"));
         coupon.setCouponinfo("");
         coupon.setHongbao(new BigDecimal(0));
         coupon.setPictUrl(data.optString("img").split(".jpg")[0] + ".jpg");
         coupon.setTitle(data.optString("title"));
         coupon.setZkPrice(new BigDecimal(data.optString("beforPrice")));
         coupon.setCouponStartFee(new BigDecimal(0));
         coupon.setQuanPrice(new BigDecimal(data.optString("afterPrice")));
         couponList.add(coupon);
      }
      return couponList;
   }
   private static List<DaTaoKeDetailV2> parseCurrent(String url) {
      List<DaTaoKeDetailV2> list = new ArrayList<>();
      try {
         Document doc = Jsoup.connect(url)
               .userAgent(
                     "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36")
               .get();
         Elements items = doc.getElementsByClass("goods-list").get(0).getElementsByClass("goods-item");
         for (int i = 0; i < items.size(); i++) {
            Long id = Long.parseLong(items.get(i).attr("id").replace("goods-items_", ""));
            String currentSale = items.get(i).getElementsByClass("goods-item-content").get(0)
                  .getElementsByClass("goods-info").get(0).getElementsByClass("tg-show").get(0)
                  .getElementsByTag("b").get(0).text();
            System.out.println(id + "-" + currentSale);
            DaTaoKeDetailV2 detail = new DaTaoKeDetailV2();
            detail.setId(id);
            detail.setMonthSales(Integer.parseInt(currentSale));
            list.add(detail);
         }
      } catch (IOException e) {
         e.printStackTrace();
      }
      // TODO 需要返回值
      return list;
   }
   // 获取实时榜单
   /**
    * 获取实时销量榜
    *
    * @param cid
    * @return
    */
   public static List<DaTaoKeDetailV2> getCurrentSalesRank(Integer cid) {
      String url = null;
      if (cid == null)
         url = "http://www.dataoke.com/top_sell";
      else
         url = String.format("http://www.dataoke.com/top_sell?cid=%s&type=1", cid);
      return parseCurrent(url);
   }
   /**
    * 全天销量榜
    *
    * @param cid
    * @return
    */
   public static List<DaTaoKeDetailV2> getCurrentDaySalesRank(Integer cid) {
      String url = null;
      if (cid == null)
         url = "http://www.dataoke.com/top_all";
      else
         url = String.format("http://www.dataoke.com/top_all?cid=%s", cid);
      return parseCurrent(url);
   }
   /**
    * 获取热推榜
    *
    * @return
    */
   public static List<DaTaoKeDetailV2> getCurrentHotSalesRank() {
      String url = "http://www.dataoke.com/top_tui";
      return parseCurrent(url);
   }
   public static String getRandomCommonEmoji() {
      return commonEmojis[(int) (Math.random() * commonEmojis.length)];
   }
   public static String getEvaluateEmojis() {
      return evaluateEmojis[(int) (Math.random() * evaluateEmojis.length)];
   }
   public static String getDesc(DaTaoKeDetailV2 detail) {
      // 标题+券后价+包邮+描述
      String desc = detail.getDtitle();
      desc += "\n";
      desc += String.format("券后价%s【%s元】包邮秒杀 ", Math.random() > 0.5 ? "💰" : "",
            MoneyBigDecimalUtil.getWithNoZera(detail.getActualPrice()).toString())
            + (Math.random() > 0.5 ? getRandomCommonEmoji() : "");
      desc += "\n";
      // desc += detail.getIntroduce();
      String introduce = detail.getDesc().replace(",", ",").replace("。", ",").replace("!", ",").replace(",", ",");
      introduce = introduce.replace(",,,", ",").replace(",,", ",");
      String[] sts = introduce.split(",");
      introduce = "";
      for (int i = 0; i < sts.length; i++) {
         if (i % 2 == 1) {// 需要换行
            introduce += sts[i] + (Math.random() > 0.5 ? getRandomCommonEmoji() : i == sts.length - 1 ? "" : ",")
                  + "\n";
         } else
            introduce += sts[i] + (Math.random() > 0.5 ? getRandomCommonEmoji() : i == sts.length - 1 ? "" : ",");
      }
      desc += introduce;
      return desc;
   }
   public static DaTaoKeFilterResult filterTaoBaoGoods(TaoBaoGoodsBrief goods, DaTaoKeDetailV2 v2,
         boolean filterCouponInfo) {
      if (v2 != null && goods != null) {
         // 重新设置标题与券价格
         goods.setTitle(v2.getDtitle());
         if (!StringUtil.isNullOrEmpty(v2.getMainPic()))
            goods.setPictUrlWhite(v2.getMainPic());
         // 设置简介
         goods.setDescription(v2.getDesc());
         // 如果没有券信息,则提供券信息
         if (canFilterCouponInfo(goods, v2)) {
            try {
               long time = System.currentTimeMillis();
               // 券在有效期内并且还有剩余券
               if (time >= TimeUtil.convertToTimeTemp(v2.getCouponStartTime(), "yyyy-MM-dd HH:mm:ss")
                     && time <= TimeUtil.convertToTimeTemp(v2.getCouponEndTime(), "yyyy-MM-dd HH:mm:ss")
                     && (v2.getCouponTotalNum() - v2.getCouponReceiveNum()) > 0) {
                  goods.setCouponStartFee(v2.getOriginalPrice());
                  goods.setCouponEffectiveEndTime(TimeUtil.getGernalTime(
                        TimeUtil.convertToTimeTemp(v2.getCouponEndTime(), "yyyy-MM-dd HH:mm:ss"),
                        "yyyy-MM-dd"));
                  goods.setCouponEffectiveStartTime(TimeUtil.getGernalTime(
                        TimeUtil.convertToTimeTemp(v2.getCouponStartTime(), "yyyy-MM-dd HH:mm:ss"),
                        "yyyy-MM-dd"));
                  goods.setCouponAmount(v2.getCouponPrice());
                  goods.setCouponInfo(
                        String.format("满%s元减%s元", v2.getOriginalPrice() + "", v2.getCouponPrice() + ""));
                  goods.setCouponLeftCount(v2.getCouponTotalNum() - v2.getCouponReceiveNum());
                  goods.setCouponLink(v2.getCouponLink());
                  goods.setCouponTotalCount(v2.getCouponTotalNum());
                  goods.setShopCoupon(false);
                  goods.setZkPrice(v2.getOriginalPrice());
                  return new DaTaoKeFilterResult(goods, DaTaoKeFilterResult.FILTER_TYPE_PRICE_AND_COUPON);
               }
            } catch (Exception e) {
            }
         } else {// 都有券
            long time = System.currentTimeMillis();
            // 券在有效期内并且还有剩余券
            if (time >= TimeUtil.convertToTimeTemp(v2.getCouponStartTime(), "yyyy-MM-dd HH:mm:ss")
                  && time <= TimeUtil.convertToTimeTemp(v2.getCouponEndTime(), "yyyy-MM-dd HH:mm:ss")
                  && (v2.getCouponTotalNum() - v2.getCouponReceiveNum()) > 0) {
               // 如果两个券的面额一样,淘宝原价比大淘客原价高,就以大淘客原价为准
               if (goods.getCouponAmount() != null && v2.getCouponPrice() != null
                     && goods.getCouponAmount().compareTo(v2.getCouponPrice()) == 0) {
                  if (goods.getZkPrice().compareTo(v2.getOriginalPrice()) > 0) {
                     goods.setZkPrice(v2.getOriginalPrice());
                     return new DaTaoKeFilterResult(goods, DaTaoKeFilterResult.FILTER_TYPE_PRICE);
                  }
               }
            }
         }
      }
      return new DaTaoKeFilterResult(goods, DaTaoKeFilterResult.FILTER_TYPE_NONE);
   }
   /**
    * 是否可以过滤掉券信息
    * @Title: filterCouponInfo
    * @Description:
    * @param goods
    * @param v2
    * void 返回类型
    * @throws
    */
   public static boolean canFilterCouponInfo(TaoBaoGoodsBrief goods, DaTaoKeDetailV2 v2) {
      if (StringUtil.isNullOrEmpty(goods.getCouponInfo()) && v2 != null
            && !StringUtil.isNullOrEmpty(v2.getCouponLink())) {
         try {
            long time = System.currentTimeMillis();
            // 券在有效期内并且还有剩余券
            if (time >= TimeUtil.convertToTimeTemp(v2.getCouponStartTime(), "yyyy-MM-dd HH:mm:ss")
                  && time <= TimeUtil.convertToTimeTemp(v2.getCouponEndTime(), "yyyy-MM-dd HH:mm:ss")
                  && (v2.getCouponTotalNum() - v2.getCouponReceiveNum()) > 0) {
               return true;
            }
         } catch (Exception e) {
         }
      }
      return false;
   }
   public static TaoBaoGoodsBrief filterTaoBaoGoods(TaoBaoGoodsBrief goods, DaTaoKeDetailV2 v2) {
      return filterTaoBaoGoods(goods, v2, false).getGoods();
   }
   public static DaTaoKeDetailV2 filterDaTaoKe(TaoBaoGoodsBrief goods, DaTaoKeDetailV2 detail) {
      if (goods != null) {
         BigDecimal price = TaoBaoUtil.getCouponPrice(goods);
         detail.setOriginalPrice(goods.getZkPrice());
         detail.setActualPrice(price);
         if (goods.getCouponStartFee() != null)
            detail.setCouponConditions(goods.getCouponStartFee() + "");
         detail.setCouponPrice(goods.getCouponAmount());
         return detail;
      }
      return detail;
   }
   public static List<DingDongTime> getDingDongQiangTime(Calendar nowDate) {
      // 获取当前的小时数
      DingDongTime[] times = new DingDongTime[] { new DingDongTime("0", "00:00"), new DingDongTime("8", "08:00"),
            new DingDongTime("10", "10:00"), new DingDongTime("13", "13:00"), new DingDongTime("15", "15:00"),
            new DingDongTime("17", "17:00"), new DingDongTime("19", "19:00"), new DingDongTime("20", "20:00"),
            new DingDongTime("21", "21:00") };
      Calendar preDate = Calendar.getInstance();
      preDate.setTimeInMillis(nowDate.getTimeInMillis() - 24 * 60 * 60 * 1000L);
      Calendar nextDate = Calendar.getInstance();
      nextDate.setTimeInMillis(nowDate.getTimeInMillis() + 24 * 60 * 60 * 1000L);
      String preDay = (preDate.get(Calendar.DAY_OF_MONTH) + "").length() < 2
            ? "0" + preDate.get(Calendar.DAY_OF_MONTH) : preDate.get(Calendar.DAY_OF_MONTH) + "";
      String nextDay = (nextDate.get(Calendar.DAY_OF_MONTH) + "").length() < 2
            ? "0" + nextDate.get(Calendar.DAY_OF_MONTH) : nextDate.get(Calendar.DAY_OF_MONTH) + "";
      String nowDay = (nowDate.get(Calendar.DAY_OF_MONTH) + "").length() < 2
            ? "0" + nowDate.get(Calendar.DAY_OF_MONTH) : nowDate.get(Calendar.DAY_OF_MONTH) + "";
      int hour = nowDate.get(Calendar.HOUR_OF_DAY);
      int pos = times.length - 1;
      for (int i = 0; i < times.length - 1; i++) {
         if (hour >= Integer.parseInt(times[i].getKey()) && hour < Integer.parseInt(times[i + 1].getKey())) {
            pos = i;
            break;
         }
      }
      List<DingDongTime> list = new ArrayList<>();
      // 获取当前时间之前的5个数据
      for (int i = 5; i >= 0; i--) {
         int p = pos - i < 0 ? (times.length + pos - i) : pos - i;
         DingDongTime itemData = new DingDongTime(times[p].getKey(), times[p].getValue(), -1);
         if (pos - i < 0)
            itemData.setTime(
                  preDay + "" + (itemData.getKey().length() < 2 ? ("0" + itemData.getKey()) : itemData.getKey()));
         else
            itemData.setTime(
                  nowDay + "" + (itemData.getKey().length() < 2 ? ("0" + itemData.getKey()) : itemData.getKey()));
         if (pos == p)
            itemData.setState(0);
         list.add(itemData);
      }
      // 向后添加剩下的
      if (pos + 1 < times.length)
         for (int i = pos + 1; i < times.length; i++) {
            DingDongTime itemData = new DingDongTime(times[i].getKey(), times[i].getValue(), 1);
            itemData.setTime(
                  nowDay + "" + (itemData.getKey().length() < 2 ? ("0" + itemData.getKey()) : itemData.getKey()));
            list.add(itemData);
         }
      if (times.length - (pos + 1) < 2) {
         DingDongTime itemData = new DingDongTime(times[0].getKey(), times[0].getValue(), 1);
         itemData.setTime(
               nextDay + "" + (itemData.getKey().length() < 2 ? ("0" + itemData.getKey()) : itemData.getKey()));
         list.add(itemData);
      }
      return list;
   }
   // 获取推广文案
   public static void getPublishDoc(String id) {
      String url = String.format("http://www.dataoke.com/detailtpl?gid=%s&type=1", id);
      String response = HttpUtil.get(url);
      try {
         JSONObject json = JSONObject.fromObject(new String(response.getBytes("ISO-8859-1"), "UTF-8"));
         JSONObject data = json.optJSONObject("data");
         String tpl2 = data.optString("tpl2");
         tpl2 = tpl2.substring(0, tpl2.indexOf("---------"));
         System.out.println(tpl2.replace("</br>", "\n").trim());
      } catch (Exception e) {
      }
   }
}