前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java实现友链管理的思路及demo

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

作者头像
晓果冻
发布2022-09-08 11:22:16
3130
发布2022-09-08 11:22:16
举报
文章被收录于专栏:一直在努力的Java菜鸡er

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
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Java实现友链管理的思路及demo
    • 前言:
      • 环境
        • 代码部分
          • 后续
          相关产品与服务
          云数据库 SQL Server
          腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档