package com.yeshi.fanli.controller.client.v1;
|
|
import java.io.PrintWriter;
|
import java.util.ArrayList;
|
import java.util.List;
|
import java.util.Map;
|
import java.util.regex.Matcher;
|
import java.util.regex.Pattern;
|
|
import javax.annotation.Resource;
|
|
import org.springframework.stereotype.Controller;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RequestMethod;
|
import org.yeshi.utils.JsonUtil;
|
import org.yeshi.utils.taobao.TbImgUtil;
|
|
import com.yeshi.fanli.entity.accept.AcceptData;
|
import com.yeshi.fanli.entity.taobao.SearchFilter;
|
import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBrief;
|
import com.yeshi.fanli.entity.taobao.TaoBaoSearchResult;
|
import com.yeshi.fanli.entity.taobao.dataoke.DaTaoKeDetail;
|
import com.yeshi.fanli.exception.taobao.TaobaoGoodsDownException;
|
import com.yeshi.fanli.log.LogHelper;
|
import com.yeshi.fanli.service.inter.config.ConfigService;
|
import com.yeshi.fanli.service.inter.hongbao.HongBaoManageService;
|
import com.yeshi.fanli.service.inter.taobao.TaoBaoUnionConfigService;
|
import com.yeshi.fanli.service.inter.taobao.dataoke.DaTaoKeGoodsDetailService;
|
import com.yeshi.fanli.service.inter.user.UserInfoService;
|
import com.yeshi.fanli.util.StringUtil;
|
import com.yeshi.fanli.util.Utils;
|
import com.yeshi.fanli.util.taobao.TaoBaoUtil;
|
import com.yeshi.fanli.util.taobao.TaoKeApiUtil;
|
|
import net.sf.json.JSONObject;
|
|
@Controller
|
@RequestMapping("api/v1/dynamic")
|
public class DynamicRecommendController {
|
|
@Resource
|
private HongBaoManageService hongBaoManageService;
|
|
@Resource
|
private UserInfoService userInfoService;
|
|
@Resource
|
private ConfigService configService;
|
|
@Resource
|
private TaoBaoUnionConfigService taoBaoUnionConfigService;
|
|
@Resource
|
private DaTaoKeGoodsDetailService daTaoKeGoodsDetailService;
|
|
/**
|
* 获取商品信息
|
*
|
* @param acceptData
|
* @param url
|
* 商品链接
|
* @param out
|
*/
|
@RequestMapping(value = "getGoodsInfo", method = RequestMethod.POST)
|
public void getGoodsInfo(AcceptData acceptData, String url, PrintWriter out) {
|
|
TaoBaoGoodsBrief tb = null;
|
String URL_REGEX = "(((http|https)://)|(www\\.))[a-zA-Z0-9\\._-]+\\.[a-zA-Z]{2,6}(:[0-9]{1,4})?(/[a-zA-Z0-9\\&%_\\./-~-]*)?";
|
|
Pattern p = Pattern.compile(URL_REGEX);
|
Matcher matcher = p.matcher(url);
|
if (!matcher.find()) {// 不包含链接
|
out.print(JsonUtil.loadFalseResult("暂不支持该类型!"));
|
return;
|
}
|
url = matcher.group();
|
if (url.contains("ju.taobao.com") || url.contains(".juhuasuan.com")) {// 聚划算
|
int index = url.indexOf("item_id");
|
if (index < 0) {
|
out.println(JsonUtil.loadFalseResult("暂未找到该商品,请稍后再试!"));
|
return;
|
}
|
url = url.substring(index);
|
int last = url.indexOf("&");
|
String id = "";
|
if (last > 0)
|
id = url.substring(url.indexOf("=") + 1, url.indexOf("&"));
|
else {
|
id = url.substring(url.indexOf("=" + 1));
|
}
|
tb = TaoBaoUtil.isAlimama(id);
|
if (tb == null) {
|
tb = TaoBaoUtil.parsePhoneTmAndTb(id);
|
}
|
} else if (url.contains("http://zmnxbc.com")) { // 手机端天猫APP分享
|
tb = TaoBaoUtil.parsePhoneShareUrlByTM(url);
|
} /*
|
* else if(url.contains("c.b1yt.com") || url.contains("m.qtilg.com")
|
* || url.contains("z.icyad.com")){ //手机端淘宝和一淘APP分享
|
* tb=TaoBaoUtil.parsePhoneShareUrlByTB(url); }
|
*/else if (url.contains("h5.m.taobao") || url.contains("detail.m.tmall") || url.contains("item.taobao")
|
|| url.contains("detail.tmall")) { // 手机页面和电脑页面
|
Map<String, String> map = Utils.parseURL(url);
|
String id = "";
|
id = map.get("id").replace("}", "");
|
tb = TaoBaoUtil.isAlimama(id);
|
if (tb == null) {
|
tb = TaoBaoUtil.parsePhoneTmAndTb(id);
|
}
|
} else {
|
tb = TaoBaoUtil.parsePhoneShareUrlByTB(url);
|
}
|
|
if (tb == null) {
|
out.println(JsonUtil.loadFalseResult("暂未找到该商品,请稍后再试!"));
|
return;
|
}
|
JSONObject data = new JSONObject();
|
JSONObject taoBaoGoodsJSON = new JSONObject();
|
taoBaoGoodsJSON.put("title", tb.getTitle());
|
taoBaoGoodsJSON.put("zkPrice", tb.getZkPrice());
|
taoBaoGoodsJSON.put("auctionId", tb.getAuctionId());
|
taoBaoGoodsJSON.put("url", "http://item.taobao.com/item.htm?id=" + tb.getAuctionId());
|
data.put("taoBaoGoodsBrief", taoBaoGoodsJSON);
|
data.put("tbImgs", tb.getImgList());
|
out.print(JsonUtil.loadTrueResult(data));
|
}
|
|
/**
|
* 粘贴板信息推荐
|
*
|
* @param acceptData
|
* @param url
|
* 商品链接
|
* @param out
|
*/
|
@RequestMapping(value = "getNewGoodsInfo", method = RequestMethod.POST)
|
public void getNewGoodsInfo(AcceptData acceptData, String text, PrintWriter out) {
|
if (StringUtil.isNullOrEmpty(text)) {
|
out.print(JsonUtil.loadFalseResult("值为空"));
|
return;
|
}
|
|
if (text.length() > 256) {
|
out.print(JsonUtil.loadFalseResult("值过长"));
|
return;
|
}
|
|
TaoBaoGoodsBrief tb = null;
|
String URL_REGEX = "(((http|https)://)|(www\\.))[a-zA-Z0-9\\._-]+\\.[a-zA-Z]{2,6}(:[0-9]{1,4})?(/[a-zA-Z0-9\\&%_\\./-~-]*)?";
|
|
Pattern p = Pattern.compile(URL_REGEX);
|
Matcher matcher = p.matcher(text);
|
if (!matcher.find()) {// 不包含链接
|
// 解析淘口令
|
if (analysisTaoToken(text, out))
|
return;
|
// 商品详情
|
// 发现
|
// 没有链接,标题过长也不处理
|
if (text.startsWith("【") && text.contains("】")) {
|
int end = text.indexOf("】");
|
if (end > 2)
|
text = text.substring(1, end);
|
}
|
|
LogHelper.test("根据粘贴板推荐:" + text);
|
|
|
|
if (text.length() > 80) {
|
out.print(JsonUtil.loadFalseResult("值过长"));
|
return;
|
}
|
|
SearchFilter sf = new SearchFilter();
|
sf.setKey(text);
|
JSONObject root = new JSONObject();
|
|
TaoBaoSearchResult result = TaoBaoUtil.search(sf);
|
if (result != null && result.getTaoBaoGoodsBriefs() != null && result.getTaoBaoGoodsBriefs().size() > 0)
|
for (TaoBaoGoodsBrief goods : result.getTaoBaoGoodsBriefs()) {
|
// 是属于淘宝联盟商品
|
if (goods.getTitle().equalsIgnoreCase(text)) {
|
root.put("type", 2);
|
JSONObject data = new JSONObject();
|
data.put("title", goods.getTitle());
|
root.put("data", data);
|
out.print(JsonUtil.loadTrueResult(root));
|
return;
|
}
|
}
|
|
// 查询大淘客标题
|
List<DaTaoKeDetail> list = daTaoKeGoodsDetailService.listByDtitle(text);
|
if (list != null && list.size() > 0) {
|
root.put("type", 2);
|
JSONObject data = new JSONObject();
|
data.put("title", list.get(0).getdTitle());
|
root.put("data", data);
|
out.print(JsonUtil.loadTrueResult(root));
|
return;
|
}
|
|
out.print(JsonUtil.loadFalseResult("暂不支持该类型!"));
|
return;
|
}
|
|
text = matcher.group();
|
if (text.contains("ju.taobao.com") || text.contains(".juhuasuan.com")) {// 聚划算
|
int index = text.indexOf("item_id");
|
if (index < 0) {
|
out.println(JsonUtil.loadFalseResult("暂未找到该商品,请稍后再试!"));
|
return;
|
}
|
text = text.substring(index);
|
int last = text.indexOf("&");
|
String id = "";
|
if (last > 0)
|
id = text.substring(text.indexOf("=") + 1, text.indexOf("&"));
|
else {
|
id = text.substring(text.indexOf("=" + 1));
|
}
|
tb = TaoBaoUtil.isAlimama(id);
|
if (tb == null) {
|
tb = TaoBaoUtil.parsePhoneTmAndTb(id);
|
}
|
} else if (text.contains("http://zmnxbc.com")) { // 手机端天猫APP分享
|
tb = TaoBaoUtil.parsePhoneShareUrlByTM(text);
|
} else if (text.contains("h5.m.taobao") || text.contains("detail.m.tmall") || text.contains("item.taobao")
|
|| text.contains("detail.tmall")) { // 手机页面和电脑页面
|
Map<String, String> map = Utils.parseURL(text);
|
String id = "";
|
id = map.get("id").replace("}", "");
|
tb = TaoBaoUtil.isAlimama(id);
|
if (tb == null) {
|
tb = TaoBaoUtil.parsePhoneTmAndTb(id);
|
}
|
} else {
|
tb = TaoBaoUtil.parsePhoneShareUrlByTB(text);
|
}
|
|
if (tb == null) {
|
out.println(JsonUtil.loadFalseResult("暂未找到该商品,请稍后再试!"));
|
return;
|
}
|
JSONObject data = new JSONObject();
|
JSONObject taoBaoGoodsJSON = new JSONObject();
|
taoBaoGoodsJSON.put("title", tb.getTitle());
|
taoBaoGoodsJSON.put("zkPrice", tb.getZkPrice());
|
taoBaoGoodsJSON.put("auctionId", tb.getAuctionId());
|
taoBaoGoodsJSON.put("url", "http://item.taobao.com/item.htm?id=" + tb.getAuctionId());
|
data.put("taoBaoGoodsBrief", taoBaoGoodsJSON);
|
if (!StringUtil.isNullOrEmpty(tb.getPictUrl())) {
|
if (tb.getImgList() == null)
|
tb.setImgList(new ArrayList<>());
|
tb.getImgList().add(0, TbImgUtil.getTBSize220Img(tb.getPictUrl()));
|
}
|
data.put("tbImgs", tb.getImgList());
|
JSONObject root = new JSONObject();
|
root.put("type", 1);
|
root.put("data", data);
|
|
out.print(JsonUtil.loadTrueResult(root));
|
}
|
|
/**
|
* 解析淘口令
|
*
|
* @param text
|
* @param out
|
* @return
|
*/
|
private boolean analysisTaoToken(String text, PrintWriter out) {
|
String token = StringUtil.picUpTaoToken(text);
|
if (!StringUtil.isNullOrEmpty(token)) {
|
Long auctionId = TaoKeApiUtil.tokenConvertAuctionId(token);
|
if (auctionId != null) {
|
TaoBaoGoodsBrief tb = null;
|
try {
|
tb = TaoKeApiUtil.getSimpleGoodsInfo(auctionId);
|
} catch (TaobaoGoodsDownException e) {
|
e.printStackTrace();
|
}
|
|
if (tb != null) {
|
JSONObject data = new JSONObject();
|
JSONObject taoBaoGoodsJSON = new JSONObject();
|
taoBaoGoodsJSON.put("title", tb.getTitle());
|
taoBaoGoodsJSON.put("zkPrice", tb.getZkPrice());
|
taoBaoGoodsJSON.put("auctionId", tb.getAuctionId());
|
taoBaoGoodsJSON.put("url", "http://item.taobao.com/item.htm?id=" + tb.getAuctionId());
|
data.put("taoBaoGoodsBrief", taoBaoGoodsJSON);
|
if (!StringUtil.isNullOrEmpty(tb.getPictUrl())) {
|
if (tb.getImgList() == null)
|
tb.setImgList(new ArrayList<>());
|
tb.getImgList().add(0, TbImgUtil.getTBSize220Img(tb.getPictUrl()));
|
}
|
data.put("tbImgs", tb.getImgList());
|
JSONObject root = new JSONObject();
|
root.put("type", 1);
|
root.put("data", data);
|
out.print(JsonUtil.loadTrueResult(root));
|
return true;
|
}
|
}
|
}
|
return false;
|
}
|
|
}
|