Java实现友链管理的思路及demo

2022-09-08 11:22:16 浏览数 (1)

Java实现友链管理的思路及demo

前言:

之前一直在寻找一款可以自动管理友链的工具,奈何没找到适合halo博客的,于是乎用自己菜鸡的java写了一个管理友链的demo,都有啥功能咧?

以下皆是针对halo博客的,其他的思路类似

  • 自动访问博客中的所有友情链接,查看友链是否可以正常访问。
  • 删除超过n次访问不通的友情链接。
  • 姑且算全自动,同步友链-检测友链-删除友链全自动化,不再是单发的m416了。
环境
  • mysqlhalo博客我是用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截图

简单思路

  1. 得到网站的所有友情链接,halo是存储在links表中。
  2. 利用java提供的方法访问上文得到的友情链接链接。
  3. 是否访问通网站都做一些标记,在规定的时间内统计无法访问的次数,超过给定数目删除该链接。
  4. 程序直接删除links表中对应的记录,但在记录友链的另一张表(代码中的link_record)中做逻辑删除。
  5. 为什么不直接在links表上新增字段?怕破坏halo本身,so--
后续

就是简单的方法调用,感觉没啥可解释的,思路在代码里摸一摸应该是能get了。之后就考虑如何检验对方网站中是否有自己链接的功能

代码仓库地址:https://gitee.com/cgd0526/xxl-job-executor

0 人点赞