You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

兼容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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 09:54:04