Java实现友链管理的思路及demo
前言:
之前一直在寻找一款可以自动管理友链的工具,奈何没找到适合halo博客的,于是乎用自己菜鸡的java
写了一个管理友链的demo,都有啥功能咧?
以下皆是针对halo博客的,其他的思路类似
- 自动访问博客中的所有友情链接,查看友链是否可以正常访问。
- 删除超过n次访问不通的友情链接。
- 姑且算全自动,同步友链-检测友链-删除友链全自动化,不再是单发的m416了。
环境
mysql
:halo
博客我是用mysql
做数据库的,不是默认的sqlite
,最主要是不会用~~。jdk8
xxl-job
:需要借助大佬的开源定时任务框架(quartz类似)。springboot
:凑数的,不说也知道肯定要用~~
代码部分
直接上代码了,其他代码见尾部代码仓库
代码语言:javascript复制/**
* @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
截图
简单思路
- 得到网站的所有友情链接,halo是存储在links表中。
- 利用
java
提供的方法访问上文得到的友情链接链接。 - 是否访问通网站都做一些标记,在规定的时间内统计无法访问的次数,超过给定数目删除该链接。
- 程序直接删除links表中对应的记录,但在记录友链的另一张表(代码中的link_record)中做逻辑删除。
- 为什么不直接在links表上新增字段?怕破坏halo本身,so--
后续
就是简单的方法调用,感觉没啥可解释的,思路在代码里摸一摸应该是能get了。之后就考虑如何检验对方网站中是否有自己链接的功能