动态 Memos 前端查看器(API访问) 

#Artalk 根据邮箱名查询评论数量,同时列出最近一次录入数据库中的用户名以及链接地址。 #mysql

WITH latest_user AS (
    SELECT 
        email,
        name,
        link,
        ROW_NUMBER() OVER (PARTITION BY email ORDER BY id DESC) AS rn
    FROM artalk.users
),
joined AS (
    SELECT 
        a.user_id,   
        u.email,
        lu.name AS latest_name,
        lu.link AS latest_link
    FROM artalk.comments a
    JOIN artalk.users u ON a.user_id = u.id
    JOIN latest_user lu ON u.email = lu.email AND lu.rn = 1
)
SELECT 
    email,
    latest_name,
    latest_link,
    COUNT(*) AS record_count
FROM joined
GROUP BY email, latest_name, latest_link
ORDER BY record_count DESC;

#Artalk 插件进行了功能扩展:

  • 增加导出 Typecho 评论为 Artrans 格式(参考官方过时无效的 ArtransExporter 插件);
  • 在 Artalk 后台导入 Artrans 格式的评论数据后,在此可对 PageKey 字段的数据格式进行转换;
  • 增加 Artalk 评论数据逆迁移到 Typecho 内置数据库,还增加了一个刷新评论数的按钮。

今天,评论切换为了 #Artalk 评论系统,并将原评论数据顺利迁移了过来。

通过 #php 函数来获取 #Artalk 评论数,解决了 js 获取难以适配无限加载的问题,更具备了一定的自定义功能。

/**
 * 获取 Artalk 指定页面的评论数(0 则返回空字符串)
 * @param string $pageKey 页面唯一标识
 * @param string $server Artalk 服务地址
 * @param string $siteName 站点名称
 * @return string 评论数量(0返回空字符串)
 */
function getArtalkCommentCount($pageKey, $server = 'http://localhost:8082', $siteName = 'memos动态') {
    $apiUrl = rtrim($server, '/') . '/api/v2/stats/page_comment';
    $params = http_build_query([
        'page_keys' => $pageKey,
        'site_name' => $siteName
    ]);
    
    $ch = curl_init();
    curl_setopt_array($ch, [
        CURLOPT_URL => $apiUrl . '?' . $params,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_TIMEOUT => 5,
        CURLOPT_SSL_VERIFYPEER => false
    ]);
    
    $response = curl_exec($ch);
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);
    
    if ($httpCode !== 200 || !$response) {
        return '';  // 失败时返回空字符串
    }
    
    $data = json_decode($response, true);
    $count = $data['data'][$pageKey] ?? 0;
    
    // 如果为0则返回空字符串,否则返回数字
    return $count == 0 ? '' : (string)$count;
}