| | |
| | | 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 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.DaTaoKeDetail;
|
| | | import com.yeshi.fanli.entity.taobao.dataoke.DaTaoKeDetailV2;
|
| | | import com.yeshi.fanli.tag.PageEntity;
|
| | | import com.yeshi.fanli.util.MoneyBigDecimalUtil;
|
| | |
| | | *
|
| | | * @return
|
| | | */
|
| | | public static List<DaTaoKeDetail> getDingDongQiang() {
|
| | | List<DaTaoKeDetail> goodsList = new ArrayList<>();
|
| | | public static List<DingDongQiangDTO> getDingDongQiang() {
|
| | | List<DingDongQiangDTO> list = new ArrayList<>();
|
| | | Document doc = null;
|
| | | try {
|
| | | Document doc = Jsoup.connect("http://www.dataoke.com/ddq")
|
| | | .userAgent(
|
| | | "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.92 Mobile Safari/537.36")
|
| | | .get();
|
| | | Elements items = doc.getElementsByClass("main").get(0).getElementsByClass("clearfix").get(0)
|
| | | .getElementsByTag("li");
|
| | | for (int i = 0; i < items.size(); i++) {
|
| | | DaTaoKeDetail detail = new DaTaoKeDetail();
|
| | | String id = items.get(i).getElementsByTag("a").get(0).attr("href").split("\\?")[1].replace("id=", "");
|
| | | detail.setId(Long.parseLong(id));
|
| | | goodsList.add(detail);
|
| | | }
|
| | | } catch (Exception e) {
|
| | |
|
| | | doc = Jsoup.connect("http://www.dataoke.com/ddq").userAgent("").get();
|
| | | } catch (IOException e1) {
|
| | | e1.printStackTrace();
|
| | | }
|
| | | return goodsList;
|
| | | 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<>();
|
| | |
| | | return couponList;
|
| | | }
|
| | |
|
| | | private static List<DaTaoKeDetail> parseCurrent(String url) {
|
| | | private static List<DaTaoKeDetailV2> parseCurrent(String url) {
|
| | |
|
| | | List<DaTaoKeDetail> list = new ArrayList<>();
|
| | | List<DaTaoKeDetailV2> list = new ArrayList<>();
|
| | | try {
|
| | | Document doc = Jsoup.connect(url)
|
| | | .userAgent(
|
| | |
| | | .getElementsByTag("b").get(0).text();
|
| | |
|
| | | System.out.println(id + "-" + currentSale);
|
| | | DaTaoKeDetail detail = new DaTaoKeDetail();
|
| | | DaTaoKeDetailV2 detail = new DaTaoKeDetailV2();
|
| | | detail.setId(id);
|
| | | detail.setSalesNum(Integer.parseInt(currentSale));
|
| | | detail.setMonthSales(Integer.parseInt(currentSale));
|
| | | list.add(detail);
|
| | |
|
| | | }
|
| | |
| | | * @param cid
|
| | | * @return
|
| | | */
|
| | | public static List<DaTaoKeDetail> getCurrentSalesRank(Integer cid) {
|
| | | public static List<DaTaoKeDetailV2> getCurrentSalesRank(Integer cid) {
|
| | | String url = null;
|
| | | if (cid == null)
|
| | | url = "http://www.dataoke.com/top_sell";
|
| | |
| | | * @param cid
|
| | | * @return
|
| | | */
|
| | | public static List<DaTaoKeDetail> getCurrentDaySalesRank(Integer cid) {
|
| | | public static List<DaTaoKeDetailV2> getCurrentDaySalesRank(Integer cid) {
|
| | | String url = null;
|
| | | if (cid == null)
|
| | | url = "http://www.dataoke.com/top_all";
|
| | |
| | | * @param cid
|
| | | * @return
|
| | | */
|
| | | public static List<DaTaoKeDetail> getCurrentHotSalesRank() {
|
| | | public static List<DaTaoKeDetailV2> getCurrentHotSalesRank() {
|
| | | String url = "http://www.dataoke.com/top_tui";
|
| | | return parseCurrent(url);
|
| | | }
|
| | |
| | | return commonEmojis[(int) (Math.random() * commonEmojis.length)];
|
| | | }
|
| | |
|
| | | public static String getDesc(DaTaoKeDetail detail) {
|
| | | public static String getDesc(DaTaoKeDetailV2 detail) {
|
| | |
|
| | | // 标题+券后价+包邮+描述
|
| | | String desc = detail.getdTitle();
|
| | | String desc = detail.getDtitle();
|
| | | desc += "\n";
|
| | | desc += String.format("券后价%s【%s元】包邮秒杀 ", Math.random() > 0.5 ? "💰" : "",
|
| | | MoneyBigDecimalUtil.getWithNoZera(detail.getPrice()).toString())
|
| | | MoneyBigDecimalUtil.getWithNoZera(detail.getActualPrice() ).toString())
|
| | | + (Math.random() > 0.5 ? getRandomCommonEmoji() : "");
|
| | | desc += "\n";
|
| | | // desc += detail.getIntroduce();
|
| | | String introduce = detail.getIntroduce().replace(",", ",").replace("。", ",").replace("!", ",").replace(",",
|
| | | String introduce = detail.getDesc().replace(",", ",").replace("。", ",").replace("!", ",").replace(",",
|
| | | ",");
|
| | | introduce = introduce.replace(",,,", ",").replace(",,", ",");
|
| | |
|
| | |
| | | return desc;
|
| | | }
|
| | |
|
| | | public static TaoBaoGoodsBrief filterTaoBaoGoods(TaoBaoGoodsBrief goods, DaTaoKeDetail detail) {
|
| | | if (detail != null) {
|
| | |
|
| | | public static TaoBaoGoodsBrief filterTaoBaoGoods(TaoBaoGoodsBrief goods, DaTaoKeDetailV2 detail) {
|
| | | if (detail != null && goods != null) {
|
| | | // 重新设置标题与券价格
|
| | | goods.setTitle(detail.getdTitle());
|
| | | goods.setCouponAmount(detail.getQuanPrice());
|
| | | goods.setZkPrice(detail.getOrgPrice());
|
| | | if (new BigDecimal(detail.getQuanCondition()).compareTo(new BigDecimal(0)) > 0)
|
| | | goods.setCouponInfo(String.format("满%s元减%s元", detail.getQuanCondition(),
|
| | | MoneyBigDecimalUtil.getWithNoZera(detail.getQuanPrice()).toString()));
|
| | | else
|
| | | goods.setCouponInfo(String.format("%s元无条件券", detail.getQuanPrice()));
|
| | | goods.setTitle(detail.getDtitle());
|
| | | if (!StringUtil.isNullOrEmpty(detail.getMainPic()))
|
| | | goods.setPictUrlWhite(detail.getMainPic());
|
| | | }
|
| | | return goods;
|
| | | }
|
| | |
|
| | | public static TaoBaoGoodsBrief filterTaoBaoGoods(TaoBaoGoodsBrief goods, DaTaoKeDetailV2 detail) {
|
| | | if (detail != null) {
|
| | | // 重新设置标题与券价格
|
| | | goods.setTitle(detail.getDtitle());
|
| | | goods.setCouponAmount(detail.getCouponPrice());
|
| | | goods.setZkPrice(detail.getOriginalPrice());
|
| | | if (new BigDecimal(detail.getCouponConditions()).compareTo(new BigDecimal(0)) > 0)
|
| | | goods.setCouponInfo(String.format("满%s元减%s元", detail.getCouponConditions(),
|
| | | MoneyBigDecimalUtil.getWithNoZera(detail.getCouponPrice()).toString()));
|
| | | else
|
| | | goods.setCouponInfo(String.format("%s元无条件券", detail.getCouponPrice()));
|
| | | 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 goods;
|
| | |
|
| | | 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;
|
| | | }
|
| | |
|
| | | }
|