iOS使用Bark获取博客评论消息

最近在冲浪的过程中,发现了这么一个软件:
Bark - 给你的手机发推送
简而言之,就是一个iOS的消息推送软件,正好最近在做typecho主题,瞬间我就不困了:是不是可以用这个软件来作为我自己的博客评论消息推送软件?心动不如行动,我便鼓捣出来了,顺便写个教程方便后来者。

服务端部署(可选)

首先是服务端的部署(当然如果怕麻烦也可以跳过这一步,进入下个步骤),具体可参考Bark服务端部署。因为我是用的宝塔,就写一下宝塔的教程。首先根据平台下载可执行文件:https://github.com/Finb/bark-server/releases或自己编译https://github.com/Finb/bark-server,然后进入宝塔/网站/其他项目中,添加通用项目,如下图所示:

按图上进行配置即可。执行命令为:

./bark-server_linux_amd64 -addr 0.0.0.0:8080 -data ./bark-data

配置完成后,去对应的DNS服务商那里进行域名的配置,服务端配置就大功告成了!

客户端设置

服务端配置完成后,使用App Store查询下载Bark即可。下载完成后,打开APP即可进行服务地址与Key的获取了。
若你进行了第一步的服务端部署,点击右上角的+号,进行私有服务器的配置即可。

随后是服务器地址与Key的获取,点击右上角的☁️号,即可查看当前服务器的列表,可以看到,即使你不进行服务器的配置,软件作者提供了一个免费的服务器,我们也可以直接使用。点击对应的服务器,即可获取服务器地址与Key。

主题修改

主题修改这部分稍微有点麻烦,需要找到自己主题关于评论处理的代码,添加消息通知的逻辑,具体代码如下:

// Bark评论消息通知
$barkUrl = \Utils\Helper::options()->barkUrl;
if ($barkUrl) {
    // 获取文章信息
    $article = $db->fetchRow($db->select()->from('table.contents')->where('cid = ?', $cid));
    if (!$article) {
        // 处理文章未找到的情况
        return;
    }
    $articleName = $article['title'];
    $articleSlug = $article['slug'];
    $articleTime = $article['created'];
    $articleType = $article['type'];
    $articleYear = date('Y', $articleTime);
    $articleMonth = date('m', $articleTime);
    $articleDay = date('d', $articleTime);
    // 获取文章分类
    $category = $db->fetchRow(
        $db->select()->from('table.metas')
            ->join('table.relationships', 'table.metas.mid = table.relationships.mid', Typecho_Db::LEFT_JOIN)
            ->where('table.relationships.cid = ?', $cid)
            ->where('table.metas.type = ?', 'category')
    );

    $articleCategorySlug = $category ? $category['slug'] : '';
    // 获取文章链接模板
    $routingTable = \Utils\Helper::options()->routingTable;
    $index = \Utils\Helper::options()->index;
    $permalinkTemplate = '';
    if ($articleType === 'post') {
        $permalinkTemplate = $routingTable['post']['url'];
    } elseif ($articleType === 'page') {
        $permalinkTemplate = $routingTable['page']['url'];
    }
    if ($permalinkTemplate) {
        $permalink = url($permalinkTemplate, $index);
        [$scheme, $permalink] = explode(':', $permalink, 2);
        $permalink = ltrim($permalink, '/');
        $permalink = preg_replace("/\[([_a-z0-9-]+)[^\]]*\]/i", "{\\1}", $permalink);
        $permalink = str_replace(
            ['{cid}', '{category}', '{year}', '{month}', '{day}'],
            [$cid, $articleCategorySlug, $articleYear, $articleMonth, $articleDay],
            $permalink
        );
        $permalink = $scheme . '://' . $permalink;
        $message = '您的博文《' . $articleName . '》有新的评论/' . $author . ':' . $text . '?url=' . $permalink;
        @file_get_contents($barkUrl . $message);
    }
}

一切完成以后,就可以看看效果啦!