| | |
| | | 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 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 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[] { "🕛", // 十二点
|
| | | "🕧", // 十二点半
|
| | | "🕐", // 一点钟
|
| | | "🕜", // 一点半
|
| | | "🕑", // 两点
|
| | | "🕝", // 两点半
|
| | | "🕒", // 三点钟
|
| | | "🕞", // 三点半
|
| | | "🕓", // 四点钟
|
| | | "🕟", // 四点半
|
| | | "🕔", // 五时
|
| | | "🕠", // 五点半
|
| | | "🕕", // 六点
|
| | | "🕡", // 六点半
|
| | | "🕖", // 七点
|
| | | "🕢", // 七点半
|
| | | "🕗", // 八点
|
| | | "🕣", // 八点半
|
| | | "🕘", // 九点钟
|
| | | "🕤", // 九点半
|
| | | "🕙", // 的十点
|
| | | "🕥", // 十点半
|
| | | "🕚", // 十一点
|
| | | "🕦",// 十一点半
|
| | | };
|
| | |
|
| | | 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);
|
| | | }
|
| | |
|
| | | private static String getRandomCommonEmoji() {
|
| | | return commonEmojis[(int) (Math.random() * commonEmojis.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 detail) {
|
| | | if (detail != null && goods != null) {
|
| | | // 重新设置标题与券价格
|
| | | goods.setTitle(detail.getDtitle());
|
| | | if (!StringUtil.isNullOrEmpty(detail.getMainPic()))
|
| | | goods.setPictUrlWhite(detail.getMainPic());
|
| | | }
|
| | | return goods;
|
| | | }
|
| | |
|
| | | 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;
|
| | | }
|
| | |
|
| | | }
|
| | | 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) { |
| | | |
| | | } |
| | | |
| | | } |
| | | |
| | | } |