package cn.ictgu.serv.service;
import cn.ictgu.serv.mapper.FriendLinkMapper;
import cn.ictgu.serv.model.FriendLink;
import cn.ictgu.serv.model.enumclass.YesNoEnum;
import cn.ictgu.serv.service.FriendLinkService;
import cn.ictgu.tools.UrlUtils;
import lombok.extern.log4j.Log4j;
import lombok.extern.log4j.Log4j2;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.io.IOException;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* 友情链接
* Created by Silence on 2017/4/11.
*/
@Service
@Log4j2
public class FriendLinkServiceImpl implements FriendLinkService{
@Value("${app.name}")
private String appName;
@Value("${app.domain}")
private String appDomain;
private static final String FRIEND_LINK_HTML_REG = "<a.*?href=.*?%s.*?>[\\s\\S]*?%s[\\s\\S]*?</a>";
@Autowired
private FriendLinkMapper mapper;
private boolean exist(String domain){
return mapper.countByDomain(domain) > 0;
}
public List<FriendLink> listHome(){
return mapper.selectShowEqYesDesc();
}
public List<FriendLink> listAll(int index, int size){
return mapper.selectAllDesc(index, size);
}
public boolean insert(String name, String domain){
if (exist(domain)){
return false;
}
String url = UrlUtils.adjustUrl(domain);
if (related(url)){
FriendLink friendLink = new FriendLink(name, url, YesNoEnum.NO.name());
return mapper.insert(friendLink) > 0;
}
return false;
}
/* 对方是否已在首页添加您为友链 */
private boolean related(String url){
try {
Document document = Jsoup.connect(url).get();
String reg = String.format(FRIEND_LINK_HTML_REG, appDomain, appName);
String html = document.html();
Matcher matcher = Pattern.compile(reg).matcher(html);
return matcher.find();
} catch (IOException e) {
log.info("Add Friend Link Error, url:" + url);
e.printStackTrace();
}
return false;
}
public String getAppName() {
return appName;
}
public String getAppDomain() {
return appDomain;
}
}