admin
2020-01-03 1529cee74fe559806de1dbd616bc86e1e860dac5
转链文本中的淘宝,京东链接
2个文件已修改
1个文件已添加
242 ■■■■■ 已修改文件
fanli/src/main/java/com/yeshi/fanli/service/manger/goods/ConvertLinkManager.java 204 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/jd/JDUtil.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/taobao/TaoBaoUtil.java 25 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/manger/goods/ConvertLinkManager.java
New file
@@ -0,0 +1,204 @@
package com.yeshi.fanli.service.manger.goods;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.annotation.Resource;
import org.springframework.stereotype.Component;
import org.yeshi.utils.StringUtil;
import com.yeshi.fanli.entity.taobao.TaoBaoGoodsBrief;
import com.yeshi.fanli.entity.taobao.TaoKeAppInfo;
import com.yeshi.fanli.service.inter.taobao.TaoBaoBuyRelationMapService;
import com.yeshi.fanli.service.inter.user.tb.UserExtraTaoBaoInfoService;
import com.yeshi.fanli.util.TaoBaoConstant;
import com.yeshi.fanli.util.jd.JDApiUtil;
import com.yeshi.fanli.util.jd.JDUtil;
import com.yeshi.fanli.util.taobao.TaoBaoUtil;
import com.yeshi.fanli.util.taobao.TaoKeApiUtil;
/**
 * 转链组件
 *
 * @author Administrator
 *
 */
@Component
public class ConvertLinkManager {
    @Resource
    private UserExtraTaoBaoInfoService userExtraTaoBaoInfoService;
    @Resource
    private TaoBaoBuyRelationMapService taoBaoBuyRelationMapService;
    /**
     *
     * @Title: convertJDLinkFromText
     * @Description:转链文本中的京东短链
     * @param text
     * @param uid
     * @param share
     * @return
     * @throws Exception
     * String 返回类型
     * @throws
     */
    private String convertJDLinkFromText(String text, Long uid, boolean share) throws Exception {
        StringBuilder builder = new StringBuilder(text);
        String newText = builder.toString();
        // 京东转链
        // 提取京东所有的链接
        List<String> jdShortLink = JDUtil.getJDShortLinksFromText(text);
        Set<String> linkSet = new HashSet<>();
        Map<String, String> linkMap = new HashMap<>();
        if (jdShortLink != null && jdShortLink.size() > 0) {
            linkSet.addAll(jdShortLink);
            for (String shortLink : linkSet) {
                String link = null;
                if (share)
                    link = JDApiUtil.convertLinkWithSubUnionId(shortLink, null, JDApiUtil.POSITION_SHARE + "",
                            uid + "");
                else
                    link = JDApiUtil.convertLinkWithSubUnionId(shortLink, null, JDApiUtil.POSITION_FANLI + "",
                            uid + "");
                if (!StringUtil.isNullOrEmpty(link)) {
                    linkMap.put(shortLink, link);
                }
            }
        }
        for (String link : linkSet) {
            if (linkMap.get(link) == null)
                throw new Exception("京东转链失败");
            newText = newText.replace(link, linkMap.get(link));
        }
        return newText;
    }
    /**
     *
     * @Title: convertTBLinkFromText
     * @Description: 转链文本中的淘口令
     * @param text
     * @param uid
     * @param share
     * @return
     * @throws Exception
     * String 返回类型
     * @throws
     */
    private String convertTBLinkFromText(String text, Long uid, boolean share) throws Exception {
        StringBuilder builder = new StringBuilder(text);
        String newText = builder.toString();
        List<String> tokenList = TaoBaoUtil.getTokenListFromText(newText);
        if (tokenList != null && tokenList.size() > 0) {
            String relationId = null;
            if (share) {
                relationId = userExtraTaoBaoInfoService.getRelationIdByUid(uid);
                if (StringUtil.isNullOrEmpty(relationId))
                    throw new Exception("淘宝未授权");
            }
            Set<String> tokenSet = new HashSet<>();
            tokenSet.addAll(tokenList);
            Map<String, String> tokenMap = new HashMap<>();
            for (String token : tokenSet) {
                Long auctionId = TaoKeApiUtil.tokenConvertAuctionId(token);
                if (auctionId == null)
                    throw new Exception("从淘口令获取商品失败");
                TaoBaoGoodsBrief simpleGoods = TaoKeApiUtil.getSimpleGoodsInfo(auctionId);
                if (simpleGoods == null)
                    throw new Exception("商品信息获取失败");
                String link = null;
                if (share) {
                    TaoBaoGoodsBrief goods = TaoKeApiUtil.specialConvertCoupon(auctionId,
                            new TaoKeAppInfo(TaoBaoConstant.TAOBAO_AUTH_APPKEY, TaoBaoConstant.TAOBAO_AUTH_APPSECRET,
                                    TaoBaoConstant.TAOBAO_RELATION_PID_DEFAULT));
                    if (goods == null)
                        throw new Exception("商品转链失败");
                    link = goods.getCouponLink();
                    if (StringUtil.isNullOrEmpty(link)) {
                        link = goods.getAuctionUrl();
                    }
                    if (StringUtil.isNullOrEmpty(link))
                        throw new Exception("商品转链失败");
                    link += "&relationId=" + relationId;
                } else {
                    if (simpleGoods.getMaterialLibType() != null && simpleGoods.getMaterialLibType() == 1) {
                        TaoBaoGoodsBrief goods = TaoKeApiUtil.specialConvertCoupon(auctionId,
                                new TaoKeAppInfo(TaoBaoConstant.TAOBAO_AUTH_APPKEY,
                                        TaoBaoConstant.TAOBAO_AUTH_APPSECRET,
                                        TaoBaoConstant.TAOBAO_SPECIAL_PID_DEFAULT));
                        if (goods == null)
                            throw new Exception("商品转链失败");
                        link = goods.getCouponLink();
                        if (StringUtil.isNullOrEmpty(link)) {
                            link = goods.getAuctionUrl();
                        }
                    } else {
                        String sRelationId = taoBaoBuyRelationMapService.getRelationId(uid);
                        TaoBaoGoodsBrief goods = TaoKeApiUtil.specialConvertCoupon(auctionId,
                                new TaoKeAppInfo(TaoBaoConstant.TAOBAO_AUTH_APPKEY,
                                        TaoBaoConstant.TAOBAO_AUTH_APPSECRET,
                                        TaoBaoConstant.TAOBAO_RELATION_AS_SPECIAL_PID));
                        if (goods == null)
                            throw new Exception("商品转链失败");
                        link = goods.getCouponLink();
                        if (StringUtil.isNullOrEmpty(link)) {
                            link = goods.getAuctionUrl();
                        }
                        if (StringUtil.isNullOrEmpty(link))
                            throw new Exception("商品转链失败");
                        link += "&relationId=" + sRelationId;
                    }
                }
                if (StringUtil.isNullOrEmpty(link)) {
                    throw new Exception("商品转链失败");
                }
                String newToken = TaoKeApiUtil.getTKToken(simpleGoods.getPictUrl(), simpleGoods.getTitle(), link);
                if (StringUtil.isNullOrEmpty(newToken)) {
                    throw new Exception("口令转链失败");
                }
                tokenMap.put(token, newToken);
            }
            for (String token : tokenSet) {
                if (tokenMap.get(token) == null)
                    throw new Exception("淘宝部分转链失败");
                newText = newText.replace(token, tokenMap.get(token));
            }
        }
        return newText;
    }
    /**
     *
     * @Title: convertLinkFromText
     * @Description: 从文本转链
     * @param text
     * @return
     * String 返回类型
     * @throws
     */
    public String convertLinkFromText(String text, Long uid, boolean share) throws Exception {
        String newText = convertJDLinkFromText(text, uid, share);
        newText = convertTBLinkFromText(newText, uid, share);
        return newText;
    }
}
fanli/src/main/java/com/yeshi/fanli/util/jd/JDUtil.java
@@ -15,6 +15,8 @@
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.script.Invocable;
import javax.script.ScriptEngine;
@@ -934,4 +936,15 @@
        return getShowCouponInfo(goods.getCouponInfoList(), price);
    }
    public static List<String> getJDShortLinksFromText(String text) {
        String regex = "(https://u\\.jd\\.com/)[0-9A-Za-z]{1,20}";
        Pattern pattern = Pattern.compile(regex);
        Matcher m = pattern.matcher(text);
        List<String> urlList = new ArrayList<>();
        while (m.find()) {
            urlList.add(m.group());
        }
        return urlList;
    }
}
fanli/src/main/java/com/yeshi/fanli/util/taobao/TaoBaoUtil.java
@@ -1755,8 +1755,6 @@
        return taoBaoGoods;
    }
    public static TaoBaoGoodsBrief convert(DaTaoKeDetailV2 detail) {
        TaoBaoGoodsBrief taoBaoGoods = new TaoBaoGoodsBrief();
        taoBaoGoods.setAuctionId(detail.getGoodsId());
@@ -1840,8 +1838,7 @@
        String result = null;
        try {
            Connection.Response doc = Jsoup.connect(url).ignoreContentType(true)
                    .timeout(1000*10)
            Connection.Response doc = Jsoup.connect(url).ignoreContentType(true).timeout(1000 * 10)
                    .userAgent(
                            "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.18362")
                    .header("Accept", "text/html, application/xhtml+xml, application/xml; q=0.9, */*; q=0.8")
@@ -2130,4 +2127,24 @@
            return false;
    }
    /**
     * 从文本中提取淘口令
     * @Title: getTokenListFromText
     * @Description:
     * @param str
     * @return
     * List<String> 返回类型
     * @throws
     */
    public static List<String> getTokenListFromText(String str) {
        String pattern = "(₳{1}[A-Za-z0-9]+₳{1})|(¥{1}[A-Za-z0-9]+¥{1})|(¥{1}[A-Za-z0-9]+¥{1})";
        Pattern r = Pattern.compile(pattern);
        Matcher m = r.matcher(str);
        List<String> urlList = new ArrayList<>();
        while (m.find()) {
            urlList.add(m.group());
        }
        return urlList;
    }
}