兼容Lua 2.5的soupault静态站点元数据提取插件开发求助
soupault 兼容Lua 2.5的元数据提取插件脚本
-- 提前获取页面head节点,用于插入元标签,可根据需求更换为其他父节点 local head_elem = HTML.select_one(page, "head") -- 读取site-meta-data自定义标签 local meta_elem = HTML.select_one(page, "site-meta-data") -- 仅当标签存在时执行处理逻辑,避免空元素报错 if meta_elem then -- 提取标签内纯文本内容 local meta_text = HTML.inner_text(meta_elem) -- 按换行分割文本为行列表,兼容Lua 2.5语法 local lines = {} local pos = 1 while true do local newline_pos = string.find(meta_text, "\n", pos) if not newline_pos then table.insert(lines, string.sub(meta_text, pos)) break end table.insert(lines, string.sub(meta_text, pos, newline_pos - 1)) pos = newline_pos + 1 end -- 遍历处理每一行内容 local index = 1 while lines[index] do local line = String.trim(lines[index]) -- 跳过空行 if line ~= "" then -- 按第一个冒号分割键和值 local meta_key = string.match(line, "^(.-):") local meta_value = string.match(line, ":(.*)$") if meta_key then -- 清理键:去除前后空格和#+前缀 meta_key = string.gsub(meta_key, "^%s*#%+%s*", "") meta_key = String.trim(meta_key) -- 清理值:去除前后空格,空值兜底 if not meta_value then meta_value = "" end meta_value = String.trim(meta_value) -- 字段分支处理,可自行增删分支、调整插入标签内容 if meta_key == "title" then HTML.append_child(head_elem, HTML.create_string('<meta name="title" content="' .. meta_value .. '">')) elseif meta_key == "subtitle" then HTML.append_child(head_elem, HTML.create_string('<meta name="subtitle" content="' .. meta_value .. '">')) elseif meta_key == "description" then HTML.append_child(head_elem, HTML.create_string('<meta name="description" content="' .. meta_value .. '">')) elseif meta_key == "author" then HTML.append_child(head_elem, HTML.create_string('<meta name="author" content="' .. meta_value .. '">')) elseif meta_key == "date" then HTML.append_child(head_elem, HTML.create_string('<meta name="date" content="' .. meta_value .. '">')) -- 新增其他字段处理直接加elseif分支即可 end end end index = index + 1 end -- 处理完成后删除原site-meta-data标签 HTML.delete(meta_elem) end
关键调整说明
- 新增元素存在性判断,避免页面没有
<site-meta-data>标签时触发脚本报错 - 修正元数据读取逻辑,先获取标签纯文本再按换行分割为行列表,完全兼容Lua 2.5语法,未使用闭包、泛型for等不支持的特性
- 替换非原生正则方法为Lua原生
string.gsub处理键前缀,降低API依赖兼容性问题 - 新增空行、空值兜底逻辑,避免格式不规范的内容导致脚本异常
- 保留了所有可自定义点位,你可以自行增删匹配的字段、修改插入的标签内容,也可以更换元标签的插入父节点
内容的提问来源于stack exchange,提问作者chromonoid
相关产品推荐
相关产品推荐

