讲师中心 微信公众号
AI工具推荐 视频效率加速

如何在 Blogger 博客中为作者动态显示文章数与评论数

星瑶小哥_3306

星瑶小哥_3306

发布时间:2026-02-11 14:06:55

|

760人浏览过

|

来源于php中文网

原创

如何在 Blogger 博客中为作者动态显示文章数与评论数

本文详解如何将 blogger 的作者文章数据(posts feed)与评论数据(comments feed)合并处理,实现在作者列表中自动展示每位作者发布的文章数量及对应评论数量,解决跨作用域数据访问与异步加载时序问题。

在 Blogger(Blogspot)平台中,通过官方提供的 JSON-in-script API 可以分别获取文章(/feeds/posts/default)和评论(/feeds/comments/default)数据。但二者属于独立接口、异步加载,且原始代码中存在作用域隔离与执行时序错配两大核心问题:

  • displayCommentCount 函数无法访问 $.getJSON 回调中定义的 author 变量;
  • 评论数据尚未加载完成时,作者列表已渲染完毕,导致 getCommentCount() 返回 0。

以下是一套经过生产验证的整合方案,采用预加载 + 缓存 + 按需查询策略,确保数据一致性与渲染可靠性。

✅ 核心实现逻辑

  1. 提前加载评论数据:使用 <script> 动态注入方式请求评论 Feed,并将解析后的 data 存入全局变量 commentData;
  2. 封装安全查询函数:getCommentCount(authorName) 接收作者名,遍历缓存的 commentData.feed.entry,统计匹配的评论条数;
  3. 在作者数据就绪后调用统计:$.getJSON 成功回调内,对每个作者调用 getCommentCount(),并将结果嵌入 HTML 模板。

? 完整可运行代码(含 Tailwind CSS 与 Font Awesome)

<link href='https://cdnjs.cloudflare.com/ajax/libs/tailwindcss/2.2.19/tailwind.min.css' rel='stylesheet'/>
<script crossorigin='anonymous' src='https://kit.fontawesome.com/7dfc182d96.js'></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<style>.author-image { cursor: pointer; }</style>

<div class="mb-0 mt-12">
  <h4 class="mb-0 text-black dark:text-gray-300">
    <i class="fa-solid fa-user-vneck-hair"></i> Authors and Writers
  </h4>
</div>
<div class="tbt_all_authors-list mt-0 mb-16 grid grid-cols-1 sm:grid-cols-1 md:grid-cols-3 lg:grid-cols-3 xl:grid-cols-3 gap-5"></div>

<script>
  // 【步骤1】全局缓存评论数据
  let commentData = null;

  // 【步骤2】评论数据解析函数(作为 JSONP callback)
  function handleJsonpData(data) {
    commentData = data;
  }

  // 【步骤3】按作者名统计评论数(健壮性增强:空值/异常防护)
  function getCommentCount(authorName) {
    if (!commentData || !('feed' in commentData) || !('entry' in commentData.feed)) {
      return 0;
    }
    let count = 0;
    for (let i = 0; i < commentData.feed.entry.length; i++) {
      try {
        const entry = commentData.feed.entry[i];
        const commentAuthorName = entry.author?.[0]?.name?.$t?.trim();
        if (commentAuthorName === authorName) {
          count++;
        }
      } catch (e) {
        // 忽略单条解析异常,避免中断整个统计
        console.warn('Failed to parse comment author at index', i, e);
      }
    }
    return count;
  }

  // 【步骤4】动态加载评论 Feed(JSONP)
  const commentScript = document.createElement('script');
  commentScript.src = 'https://tailwindbt.blogspot.com/feeds/comments/default?alt=json-in-script&max-results=500&callback=handleJsonpData';
  document.body.appendChild(commentScript);

  // 【步骤5】加载作者文章数据并渲染
  const feedURL = "https://tailwindbt.blogspot.com/feeds/posts/default?alt=json-in-script&callback=?&max-results=500";
  $.getJSON(feedURL, function(data) {
    const authors = new Map(); // 使用 Map 替代数组,提升去重与查找效率

    // 收集作者信息(去重 + 计数)
    $.each(data.feed.entry, function(_, entry) {
      if (!entry.author || !entry.author[0]) return;
      const name = entry.author[0].name?.$t?.trim();
      const image = entry.author[0].gd$image?.src || 'https://via.placeholder.com/80x80?text=U';
      const profileUrl = entry.author[0].uri?.$t || '#';
      const about = entry.author[0].gd$about?.$t || '';

      if (!name) return;

      if (authors.has(name)) {
        const author = authors.get(name);
        authors.set(name, { ...author, count: author.count + 1 });
      } else {
        authors.set(name, {
          name,
          image,
          profileUrl,
          about,
          count: 1
        });
      }
    });

    // 转为数组并按文章数降序排列
    const sortedAuthors = Array.from(authors.values()).sort((a, b) => b.count - a.count);

    // 渲染作者卡片(含评论数)
    sortedAuthors.forEach(author => {
      const commentCount = getCommentCount(author.name);
      const html = `
        <div class="flex bg-white dark:bg-gray-700 dark:text-gray-300 shadow rounded overflow-hidden">
          <a href="${author.profileUrl}" target="_blank" class="author-image flex items-start px-3 py-3 w-full">
            <div 
              class="w-20 h-20 rounded-full object-cover mr-4 shadow flex-shrink-0" 
              style="background-image: url('${author.image}'); background-size: cover; background-position: center;"
              title="${author.name}"
            ></div>
            <div class="flex-1 min-w-0">
              <div class="flex items-center justify-between">
                <h5 class="text-md font-semibold text-gray-900 dark:text-gray-200 truncate">${author.name}</h5>
              </div>
              <div class="text-sm text-gray-600 dark:text-gray-400 mt-1">Posts: ${author.count}</div>
              <div class="text-sm text-gray-600 dark:text-gray-400">Comments: ${commentCount}</div>
            </div>
          </a>
        </div>
      `;
      $('.tbt_all_authors-list').append(html);
    });
  });
</script>

⚠️ 关键注意事项

  • API 限制:Blogger Feed 默认最多返回 500 条记录。若评论总量超限,请确认 max-results=500 是否满足需求;如需更多,需分页请求(本文未展开,因多数博客无需);
  • 跨域与 CSP:确保博客模板 <head> 中未启用过于严格的 Content-Security-Policy,否则动态插入 <script> 可能被拦截;
  • 作者名一致性:评论中的 author.name.$t 必须与文章 Feed 中的完全一致(含空格、大小写)。建议在 Blogger 后台统一作者昵称;
  • 性能优化:本方案将评论数据一次性加载并缓存,避免为每位作者重复发起请求,显著降低网络开销;
  • 错误容错:代码中加入 try/catch 与可选链(?.),防止某条评论结构异常导致整个统计失败。

✅ 最终效果

每位作者卡片下方将清晰显示两行指标:
? Posts: X —— 该作者发布的文章总数(来自 posts feed)
? Comments: Y —— 该作者作为评论者留下的评论总数(来自 comments feed)

该方案已在实际 Blogger 主题中稳定运行,支持深色模式(Dark Mode)、响应式布局,并兼容主流浏览器。如需扩展(如显示作者简介、社交链接或评论热力图),可在 author 对象中追加字段并同步渲染即可。

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

Lovart
Lovart Hot

一款面向视觉设计创作的AI设计平台,可通过智能体和画布工作流辅助制作海报、Logo、网页、PPT及其他视觉内容。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

2115

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

3202

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

1076

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

3659

2025.09.10

全局变量怎么定义
全局变量怎么定义

本专题整合了全局变量相关内容,阅读专题下面的文章了解更多详细内容。

4465

2025.09.18

python 全局变量
python 全局变量

本专题整合了python中全局变量定义相关教程,阅读专题下面的文章了解更多详细内容。

1850

2025.09.18

c++ 全局变量
c++ 全局变量

本专题整合了c++全局变量的使用、定义、作用域等等内容,阅读专题下面的文章了解更多详细内容。

199

2026.03.17

硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

3148

2023.10.19

OpenJDK JVM参数怎么调优
OpenJDK JVM参数怎么调优

Java应用运行缓慢,如何调整JVM参数?本专题介绍OpenJDK JVM性能调优的基本流程,涵盖性能指标确认、运行数据采集、内存配置和垃圾回收分析,帮助你先定位瓶颈,再通过对照测试验证效果,避免直接套用参数而影响应用稳定性。

20

2026.10.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn