本文是[链接]的一个章节,该系列文章将介绍 [链接] 这款 Java 博客系统是如何从无到有的,希望大家能通过它对 Solo 从设计到实现有个直观地了解、能为想参与贡献的人介绍清楚项目,也希望能为给重复发明重新定义博客系统的人做个参考 ️ 拉取 GitHub 仓库和自动备份 拉取 GitHub 仓库:每 24 小时定时 ..

Solo 拉取 GitHub 仓库和自动备份

本文是《Solo 从设计到实现》的一个章节,该系列文章将介绍 Solo 这款 Java 博客系统是如何从无到有的,希望大家能通过它对 Solo 从设计到实现有个直观地了解、能为想参与贡献的人介绍清楚项目,也希望能为给重复发明重新定义博客系统的人做个参考 ❤️

拉取 GitHub 仓库和自动备份

  1. 拉取 GitHub 仓库:每 24 小时定时拉取用户 GitHub 账号下的公有仓库,然后生成一篇文章并在加入到导航中,实际效果请参看这里
  2. 自动备份:每 24 小时定时导出用户的公开文章到社区账号下(注意仅包含公开文章,不包含其他数据)。

拉取并展示仓库

仓库数据是通过社区接口获取的, GitHubs#getGitHubRepos

public static JSONArray getGitHubRepos(final String githubUserId) {
    try {
        final HttpResponse res = HttpRequest.get("https://hacpai.com/github/repos?id=" + githubUserId).trustAllCerts(true).
                connectionTimeout(3000).timeout(7000).header("User-Agent", Solos.USER_AGENT).send();
        if (HttpServletResponse.SC_OK != res.statusCode()) {
            return null;
        }
        res.charset("UTF-8");
        final JSONObject result = new JSONObject(res.bodyText());
        if (0 != result.optInt(Keys.STATUS_CODE)) {
            return null;
        }
        final JSONObject data = result.optJSONObject(Common.DATA);
        final JSONArray ret = data.optJSONArray("githubrepos");

        return ret;
    } catch (final Exception e) {
        LOGGER.log(Level.ERROR, "Gets GitHub repos failed", e);

        return null;
    }
}

社区会定时调用 GitHub Repos API 获取用户仓库数据,然后持久化到数据库中,Solo 请求数据时查库返回。

自动备份

  1. 登录博客后台,在工具 -> 偏好设定 -> 参数设置中勾选 备份所有文章到社区
  2. 程序启动后会进行第一次同步,后续每 24 小时触发一次
  3. 在社区个人设置 - B3 中可下载备份包

请注意

实现流程:

  1. 博客端定时触发同步请求,将所有公开(非加密)文章导出 md 打 zip 包
  2. 将包发送至社区服务器,由社区服务器再上传云存储完成备份

代码实现

请参考 ExportService#exportHacPai


回到全文目录:《Solo 从设计到实现》

  • Solo

    Solo 是一款小而美的开源博客系统,专为程序员设计。

    Solo 有着非常活跃的社区,可将文章作为帖子推送到社区,来自社区的回帖将作为博客评论进行联动。

    这是一种全新的网络社区体验,让热爱记录和分享的你不再感到孤单!
    具体细节请浏览 B3log 构思

    1005 引用 • 7689 回帖 • 650 关注
  • 设计
    93 引用 • 619 回帖 • 1 关注
  • 文档
    51 引用 • 1115 回帖 • 1 关注
2 操作
88250 在 2019-12-15 11:16:59 更新了该帖
88250 在 2020-01-14 10:36:20 更新了该帖
9 回帖
请输入回帖内容...
  • mmzsblog

    使用 Tomcat 部署的项目,但是没有自动同步到 GitHub 社区?是不是因为我设置了多个管理员的原因呢?

    1 回复
  • 88250

    可以看下日志中是否有报错或者其他信息。

    1 回复
  • mmzsblog

    日志打印了 GitHub repo syncing....这句话;将 GitHub 的公开仓库同步到了博客;但是博客的文章没有同步到 GitHub

    1 回复
  • 88250

    社区服务器上的日志能找到最近一次同步成功的记录是 8 月 5 号,后面就没有同步请求过来了。我估计是因为 Solo 博客端没有发出同步推送请求,你看下是不是如下几个原因导致没有发送同步请求:

    • 设置中是否勾选“允许同步 GitHub 仓库”
    • server host 不能是 localhost 或者 IP
    • runtime mode 必须是生产模式
    1 回复
  • mmzsblog

    谢谢您,解决了;

    原因是 runtime mode 没有修改成生产模式

    1 回复
  • iwang-peng

    runtime mode 这个是在哪修改呢???

    1 回复
  • 88250

    docker 部署的话带参数,war 部署的话改 latke.props。

  • happinesslijian

    自动同步到 GitHub 上的这个功能已经废弃了吗?不用了吗?

    1 回复
  • 88250

    请看这里

请输入回帖内容 ...