fengweiqiang 5 年 前
コミット
6df2c4ff28

+ 0 - 1
src/jy/pretreated/analystep.go

@@ -6,7 +6,6 @@ package pretreated
 import (
 	"encoding/json"
 	"jy/util"
-	//"log"
 	"strings"
 
 	"github.com/PuerkitoBio/goquery"

+ 69 - 0
src/jy/util/script.go

@@ -6,6 +6,8 @@ import (
 	"fmt"
 	"log"
 	qu "qfw/util"
+	"regexp"
+	"strings"
 
 	ljson "github.com/yuin/gopher-json"
 	"github.com/yuin/gopher-lua"
@@ -59,7 +61,73 @@ func (s *LuaScript) RunScript(stype string) map[string]interface{} {
 	data := map[string]interface{}{}
 	qu.Try(func() {
 		s.L = lua.NewState()
+		//s.L.DoFile("lua/comm.lua")
 		s.L.PreloadModule("json", ljson.Loader)
+		s.L.SetGlobal("findOneText", s.L.NewFunction(func(S *lua.LState) int {
+			nodetype := S.ToString(-3)
+			gpath := S.ToString(-2)
+			content := S.ToString(-1)
+			ret := FindOneText(gpath, content, nodetype)
+			S.Push(ret)
+			return 1
+		}))
+		s.L.SetGlobal("findOneHtml", s.L.NewFunction(func(S *lua.LState) int {
+			nodetype := S.ToString(-3)
+			gpath := S.ToString(-2)
+			content := S.ToString(-1)
+			ret := FindOneHtml(gpath, content, nodetype)
+			S.Push(ret)
+			return 1
+		}))
+		s.L.SetGlobal("findListText", s.L.NewFunction(func(S *lua.LState) int {
+			gpath := S.ToString(-2)
+			content := S.ToString(-1)
+			ret := s.L.NewTable()
+			FindListText(gpath, content, ret)
+			S.Push(ret)
+			return 1
+		}))
+		s.L.SetGlobal("findListHtml", s.L.NewFunction(func(S *lua.LState) int {
+			gpath := S.ToString(-2)
+			content := S.ToString(-1)
+			ret := s.L.NewTable()
+			FindListHtml(gpath, content, ret)
+			S.Push(ret)
+			return 1
+		}))
+		s.L.SetGlobal("findMap", s.L.NewFunction(func(S *lua.LState) int {
+			qmap := S.ToTable(-2)
+			content := S.ToString(-1)
+			ret := s.L.NewTable()
+			FindMap(qmap, content, ret)
+			S.Push(ret)
+			return 1
+		}))
+		//支持正则
+		s.L.SetGlobal("regexp", s.L.NewFunction(func(S *lua.LState) int {
+			index := int(S.ToNumber(-1))
+			regstr := S.ToString(-2)
+			text := S.ToString(-3)
+			reg := regexp.MustCompile(regstr)
+			reps := reg.FindAllStringSubmatchIndex(text, -1)
+			ret := s.L.NewTable()
+			number := 0
+			for _, v := range reps {
+				number++
+				ret.Insert(number, lua.LString(text[v[index]:v[index+1]]))
+			}
+			S.Push(ret)
+			return 1
+		}))
+		//支持替换
+		s.L.SetGlobal("replace", s.L.NewFunction(func(S *lua.LState) int {
+			text := S.ToString(-3)
+			old := S.ToString(-2)
+			repl := S.ToString(-1)
+			text = strings.Replace(text, old, repl, -1)
+			S.Push(lua.LString(text))
+			return 1
+		}))
 		defer s.L.Close()
 		if err := s.L.DoString(s.Script); err != nil {
 			data["err"] = err.Error()
@@ -83,6 +151,7 @@ func (s *LuaScript) RunScript(stype string) map[string]interface{} {
 					Protect: true,
 				}, lua.LString(s.Code), tab, lua.LString(block), kvMap); err != nil {
 					data["err"] = err.Error()
+					log.Println(err.Error())
 				}
 			} else if stype == "back" {
 				result := MapToLuaTable2(s.L, s.Result)

+ 1 - 1
src/web/templates/admin/site_rule_logicore.html

@@ -202,7 +202,7 @@ $(function () {
 					_tit="新增规则"
 					if(n=="newlua"){
 						_tit="新增脚本"
-						obj={"s_luascript":"--code脚本代码,doc数据源,block块对象,kvs抽取kv对象,返回kvs对象,kvs结构不可改变\nfunction main(code,doc,block,kvs)\n\t--自定义抽取\n\treturn kvs\nend","vid":"{{.vid}}","pid":"{{.pid}}","sid":"{{.sid}}","s_type":"1"}
+						obj={"s_luascript":"--code脚本代码,doc数据源,block块对象,kvs抽取kv对象,返回kvs对象,kvs结构不可改变\n--doc[\"contenthtml\"]为文章html内容\n--返回map对象,key为英文值,value为抽取内容\nlocal com=require \"lua.comm\"\nfunction main(code,doc,block,kvs)\n\t--自定义抽取\n\treturn kvs\nend","vid":"{{.vid}}","pid":"{{.pid}}","sid":"{{.sid}}","s_type":"1"}
 						tag = com.pushArry(tag,luatag)
 						tag = com.pushArry(tag,hiddentag)
 						islua=true