Update plugin.py

master
zxc 4 months ago
parent 84127fe0af
commit 94c7dbed19

@ -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'<p style="color: #888;"><em>预计阅读时间:{reading_minutes} 分钟</em></p>'
# 6. 将阅读时间片段添加到文章内容开头,返回处理后的完整内容
return reading_time_html + content
plugin = ReadingTimePlugin()
# 实例化插件自动触发父类BasePlugin的初始化逻辑完成钩子注册使插件在系统中生效
plugin = ReadingTimePlugin()
Loading…
Cancel
Save