之前一直在寻找一款可以自动管理友链的工具,奈何没找到适合halo博客的,于是乎用自己菜鸡的java
写了一个管理友链的demo,都有啥功能咧?
以下皆是针对halo博客的,其他的思路类似
mysql
:halo
博客我是用mysql
做数据库的,不是默认的sqlite
,最主要是不会用~~。jdk8
xxl-job
:需要借助大佬的开源定时任务框架(quartz类似)。springboot
:凑数的,不说也知道肯定要用~~直接上代码了,其他代码见尾部代码仓库
/**
* @author 晓果冻
* @version 1.0
* @date 2021/10/24 13:38
*/
@RefreshScope
@Component
@Slf4j
public class Links {
@Autowired
private LinksDao linksDao;
@Autowired
private LinkRecordDao linkRecordDao;
@XxlJob("CheckLinksHandler")
public ReturnT<String> checkLinks(String param) {
List<LinksModel> list = linkRecordDao.getAllLinks();
StringBuilder sb = new StringBuilder();
list.stream().forEach(e -> {
try {
//检查链接是否正确,暂时不需要验证,因为都是从halo数据库导入的正确数据
//CheckLinks.isValidUrl(e.getUrl());
CheckLinks.UrlWithTime(e.getUrl(), 1000);
e.setIsNormal(1);
} catch (Exception e1) {
e.setIsNormal(0);
e.setTotal(e.getTotal() + 1);
sb.append("<p style=\"color:red\">网站:" + e.getUrl() + "访问异常</p>\n");
}
linkRecordDao.update(e);
});
return new ReturnT<String>(ReturnT.SUCCESS_CODE, sb.toString());
}
/**
* 每月15号检测累计超过30次未能成功访问的友链并删除
*
* @param param
* @return
*/
@XxlJob("DelLinksHandler")
public ReturnT<String> delLinks(String param) {
List<LinksModel> list = linkRecordDao.getAllLinks();
StringBuilder sb = new StringBuilder();
list.stream().forEach(e -> {
//累计超过30次访问不通,则删除友链
if (e.getTotal() > 30) {
linksDao.delLinksById(e.getId());
linkRecordDao.deleteLinkById(e.getId());
sb.append("<p style=\"color:red\">友链:" + e.getUrl() + "已被删除</p>\n");
}
});
return new ReturnT<String>(ReturnT.SUCCESS_CODE, sb.toString());
}
/**
* 每日同步halo友链信息到link_record表
*
* @param param
* @return
*/
@XxlJob("InsertLinksHandler")
public ReturnT<String> insertLinks(String param) {
List<LinksModel> list = linksDao.getAllLinks();
Integer[] total = {0};
list.stream().forEach(e -> {
try {
linkRecordDao.insert(e);
} catch (Exception ee) {
log.error("插入失败");
total[0] = total[0] + 1;
}
});
return new ReturnT<String>(ReturnT.SUCCESS_CODE, "<p style=\"color:green\">同步:" + total[0] + "条友链</p>\n");
}
}
xxl-job
截图
简单思路
java
提供的方法访问上文得到的友情链接链接。就是简单的方法调用,感觉没啥可解释的,思路在代码里摸一摸应该是能get了。之后就考虑如何检验对方网站中是否有自己链接的功能