diff --git a/src/DjangoBlog-master/plugins/reading_time/plugin.py b/src/DjangoBlog-master/plugins/reading_time/plugin.py index 35f9db1..0b4e9d0 100644 --- a/src/DjangoBlog-master/plugins/reading_time/plugin.py +++ b/src/DjangoBlog-master/plugins/reading_time/plugin.py @@ -1,4 +1,4 @@ -import math + import math import re from djangoblog.plugin_manage.base_plugin import BasePlugin from djangoblog.plugin_manage import hooks @@ -6,38 +6,44 @@ from djangoblog.plugin_manage.hook_constants import ARTICLE_CONTENT_HOOK_NAME class ReadingTimePlugin(BasePlugin): - PLUGIN_NAME = '阅读时间预测' - PLUGIN_DESCRIPTION = '估算文章阅读时间并显示在文章开头。' - PLUGIN_VERSION = '0.1.0' - PLUGIN_AUTHOR = 'liangliangyy' + # 插件元信息:定义插件的基础标识与说明 + PLUGIN_NAME = '阅读时间预测' # 插件名称,用于插件管理界面展示 + PLUGIN_DESCRIPTION = '估算文章阅读时间并显示在文章开头。' # 插件功能描述 + PLUGIN_VERSION = '0.1.0' # 插件版本号 + PLUGIN_AUTHOR = 'liangliangyy' # 插件作者 + # 钩子注册:将插件功能绑定到文章内容处理钩子 def register_hooks(self): + # 当系统处理文章内容(触发ARTICLE_CONTENT_HOOK_NAME钩子)时,执行add_reading_time方法 hooks.register(ARTICLE_CONTENT_HOOK_NAME, self.add_reading_time) def add_reading_time(self, content, *args, **kwargs): """ - 计算阅读时间并添加到内容开头。 + 核心功能:计算文章阅读时间,并将结果添加到内容开头 """ - # 移除HTML标签和空白字符,以获得纯文本 - clean_content = re.sub(r'<[^>]*>', '', content) - clean_content = clean_content.strip() + # 1. 清理内容:移除HTML标签(避免标签干扰字数统计),再去除首尾空白字符 + clean_content = re.sub(r'<[^>]*>', '', content) # 匹配所有<...>格式的HTML标签并删除 + clean_content = clean_content.strip() # 去除文本前后的空格、换行等空白字符 - # 中文和英文单词混合计数的一个简单方法 - # 匹配中文字符或连续的非中文字符(视为单词) + # 2. 统计有效字数:支持中英文混合计数 + # 正则匹配规则:匹配单个中文字符([\u4e00-\u9fa5])或连续的非中文字符(视为英文单词,\w+) words = re.findall(r'[\u4e00-\u9fa5]|\w+', clean_content) - word_count = len(words) + word_count = len(words) # 统计匹配到的字符/单词总数 - # 按平均每分钟200字的速度计算 - reading_speed = 200 - reading_minutes = math.ceil(word_count / reading_speed) - - # 如果阅读时间少于1分钟,则显示为1分钟 + # 3. 计算阅读时间:按平均阅读速度估算 + reading_speed = 200 # 设定平均阅读速度:每分钟200字(中英文通用参考值) + reading_minutes = math.ceil(word_count / reading_speed) # 向上取整,避免0分钟的情况 + + # 4. 处理边界值:若计算结果小于1分钟,强制显示为1分钟(符合用户认知) if reading_minutes < 1: reading_minutes = 1 + # 5. 构造阅读时间的HTML片段:设置浅灰色文字,斜体样式,不干扰正文阅读 reading_time_html = f'
预计阅读时间:{reading_minutes} 分钟
' + # 6. 将阅读时间片段添加到文章内容开头,返回处理后的完整内容 return reading_time_html + content -plugin = ReadingTimePlugin() \ No newline at end of file +# 实例化插件:自动触发父类BasePlugin的初始化逻辑,完成钩子注册,使插件在系统中生效 +plugin = ReadingTimePlugin() \ No newline at end of file