Java实现友链管理的思路及demo
前言:
之前一直在寻找一款可以自动管理友链的工具,奈何没找到适合halo博客的,于是乎用自己菜鸡的java
写了一个管理友链的demo,都有啥功能咧?
以下皆是针对halo博客的,其他的思路类似
- 自动访问博客中的所有友情链接,查看友链是否可以正常访问。
- 删除超过n次访问不通的友情链接。
- 姑且算全自动,同步友链-检测友链-删除友链全自动化,不再是单发的m416了。
环境
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
截图 -
简单思路
- 得到网站的所有友情链接,halo是存储在links表中。
- 利用
java
提供的方法访问上文得到的友情链接链接。 - 是否访问通网站都做一些标记,在规定的时间内统计无法访问的次数,超过给定数目删除该链接。
- 程序直接删除links表中对应的记录,但在记录友链的另一张表(代码中的link_record)中做逻辑删除。
- 为什么不直接在links表上新增字段?怕破坏halo本身,so--
后续
就是简单的方法调用,感觉没啥可解释的,思路在代码里摸一摸应该是能get了。之后就考虑如何检验对方网站中是否有自己链接的功能
评论区