From 8181e3adeab653db3e53e4b473353b558a1f02b7 Mon Sep 17 00:00:00 2001 From: shaoying Date: Wed, 8 Jan 2020 18:30:47 +0800 Subject: [PATCH] fix story --- base/web/web.go | 19 ++++++- build.sh | 3 +- core/code/auto.vim | 16 +++--- core/code/code.go | 4 +- core/mall/mall.go | 93 ++++++++++++++++----------------- miss/go.mod | 2 +- miss/ice.md | 125 +++++++++++++++++++++++++++++++++++++++++++++ miss/miss.md | 115 ----------------------------------------- type.go | 9 ++-- 9 files changed, 203 insertions(+), 183 deletions(-) create mode 100644 miss/ice.md delete mode 100644 miss/miss.md diff --git a/base/web/web.go b/base/web/web.go index 5388bc26..76731942 100644 --- a/base/web/web.go +++ b/base/web/web.go @@ -471,6 +471,8 @@ var Index = &ice.Context{Name: "web", Help: "网页模块", switch arg[1] { case "raw": cache, arg = arg[1], arg[1:] + case "msg": + cache, arg = arg[1], arg[1:] case "cache": cache, arg = arg[1], arg[1:] } @@ -594,6 +596,18 @@ var Index = &ice.Context{Name: "web", Help: "网页模块", } switch cache { + case "msg": + var data map[string][]string + m.Assert(json.NewDecoder(res.Body).Decode(&data)) + m.Info("res: %s", kit.Formats(data)) + if len(data["append"]) > 0 { + for i := range data[data["append"][0]] { + for _, k := range data["append"] { + m.Push(k, data[k][i]) + } + } + } + case "raw": if b, e := ioutil.ReadAll(res.Body); m.Assert(e) { m.Echo(string(b)) @@ -615,6 +629,7 @@ var Index = &ice.Context{Name: "web", Help: "网页模块", m.Push(key, kit.Format(value)) } }) + m.Info("res: %s", m.Formats("meta")) } }) } @@ -1057,12 +1072,12 @@ var Index = &ice.Context{Name: "web", Help: "网页模块", pull := end var first map[string]interface{} for begin != end { - if m.Cmd(ice.WEB_SPIDE, arg[1], "/story/pull", "begin", begin, "end", end).Table(func(index int, value map[string]string, head []string) { + if m.Cmd(ice.WEB_SPIDE, arg[1], "msg", "/story/pull", "begin", begin, "end", end).Table(func(index int, value map[string]string, head []string) { if m.Richs(ice.WEB_CACHE, nil, value["data"], nil) == nil { // 导入缓存 m.Log(ice.LOG_IMPORT, "%v: %v", value["data"], value["save"]) if node := kit.UnMarshal(value["save"]); kit.Format(kit.Value(node, "file")) != "" { - m.Cmd(ice.WEB_SPIDE, arg[1], "cache", "GET", "/story/download/"+kit.Format(value["data"])) + m.Cmd(ice.WEB_SPIDE, arg[1], "cache", "GET", "/story/download/"+value["data"]) } else { m.Conf(ice.WEB_CACHE, kit.Keys("hash", value["data"]), node) } diff --git a/build.sh b/build.sh index e34ed997..30f8256c 100755 --- a/build.sh +++ b/build.sh @@ -20,8 +20,7 @@ END [ -f Makefile ] || cat >> Makefile <")}) elseif a:target == "exec" - call ShySend({"cmd": a:target, "sub": getcmdline()}) + call ShySend({"cmd": a:target, "arg": getcmdline()}) elseif a:target == "insert" call ShySend({"cmd": a:target, "sub": getreg("."), "row": line("."), "col": col(".")}) else @@ -93,13 +93,13 @@ fun! ShyHelp() endfun call ShyLogin() -autocmd VimLeave * call ShyLogout() -autocmd BufReadPost * call ShySync("bufs") -autocmd BufReadPost * call ShySync("read") -autocmd BufWritePre * call ShySync("write") -autocmd CmdlineLeave * call ShySync("exec") -autocmd QuickFixCmdPost * call ShyCheck("fixs") -autocmd InsertLeave * call ShySync("insert") +autocmd! VimLeave * call ShyLogout() +autocmd! BufReadPost * call ShySync("bufs") +autocmd! BufReadPost * call ShySync("read") +autocmd! BufWritePre * call ShySync("write") +autocmd! CmdlineLeave * call ShySync("exec") +autocmd! QuickFixCmdPost * call ShyCheck("fixs") +autocmd! InsertLeave * call ShySync("insert") nnoremap :call ShyGrep(expand("")) nnoremap :call ShyCheck("cache") nnoremap :call ShyFavor() diff --git a/core/code/code.go b/core/code/code.go index 01631f77..f9ab7e1e 100644 --- a/core/code/code.go +++ b/core/code/code.go @@ -208,7 +208,7 @@ var Index = &ice.Context{Name: "code", Help: "编程模块", // 下发文件 m.Option("you", you) - m.Cmd(ice.WEB_SPACE, msg.Option("you"), ice.WEB_SPACE, "download", msg.Append("type"), msg.Append("name"), "self", msg.Append("data")) + m.Cmd(ice.WEB_SPACE, msg.Option("you"), ice.WEB_STORY, ice.STORY_PULL, "dev", msg.Append("name")) case "download": // 下载文件 @@ -263,7 +263,7 @@ var Index = &ice.Context{Name: "code", Help: "编程模块", case "read", "write", "exec": m.Cmd(ice.WEB_FAVOR, "vim.history", "vimrc", m.Option("cmd"), m.Option("arg"), - "sid", m.Option("sid"), "pwd", m.Option("pwd")) + "sid", m.Option("sid"), "pwd", m.Option("pwd"), "buf", m.Option("buf")) case "tasklet": m.Cmd(ice.APP_MISS, m.Option("arg"), m.Option("sub")) diff --git a/core/mall/mall.go b/core/mall/mall.go index 9bd2ff6f..8d725ff1 100644 --- a/core/mall/mall.go +++ b/core/mall/mall.go @@ -33,28 +33,22 @@ var Index = &ice.Context{Name: "mall", Help: "团队模块", m.Cmd(ice.CTX_CONFIG, "save", "mall.json", "web.mall.railway") }}, - "passcode": &ice.Command{Name: "passcode", Help: "passcode", Meta: kit.Dict( - "display", "mall/image", - ), List: kit.List( - kit.MDB_INPUT, "text", "name", "账号", - kit.MDB_INPUT, "text", "name", "密码", - kit.MDB_INPUT, "button", "name", "登录", "display", "mall/input", - kit.MDB_INPUT, "button", "name", "刷新", "display", "mall/input", - ), Hand: func(m *ice.Message, c *ice.Context, key string, arg ...string) { + "passcode": &ice.Command{Name: "passcode", Help: "passcode", Meta: kit.Dict("active", "mall/input"), Hand: func(m *ice.Message, c *ice.Context, key string, arg ...string) { + prefix := []string{ice.WEB_SPIDE, "12306"} if len(arg) == 0 { - m.Cmd(ice.WEB_SPIDE, "12306", "raw", "/passport/web/auth/uamtk-static", "form", "appid", "otn") - m.Cmd(ice.WEB_SPIDE, "12306", "raw", "GET", "/otn/HttpZF/GetJS") - m.Cmd(ice.WEB_SPIDE, "12306", "raw", "/otn/login/conf") + m.Cmd(prefix, "raw", "/passport/web/auth/uamtk-static", "form", "appid", "otn") + m.Cmd(prefix, "raw", "GET", "/otn/HttpZF/GetJS") + m.Cmd(prefix, "raw", "/otn/login/conf") - m.Cmdy(ice.WEB_SPIDE, "12306", "GET", fmt.Sprintf("/passport/captcha/captcha-image64?login_site=E&module=login&rand=sjrand")) + m.Cmdy(prefix, "GET", fmt.Sprintf("/passport/captcha/captcha-image64?login_site=E&module=login&rand=sjrand")) return } switch arg[0] { case "check": - m.Cmdy(ice.WEB_SPIDE, "12306", "GET", fmt.Sprintf("/passport/captcha/captcha-check?answer=%s&rand=sjrand&login_site=E", arg[1])) + m.Cmdy(prefix, "GET", fmt.Sprintf("/passport/captcha/captcha-check?login_site=E&rand=sjrand&answer=%s", arg[1])) case "login": - m.Cmdy(ice.WEB_SPIDE, "12306", "raw", "/passport/web/login", "form", "username", arg[1], "password", arg[2], "answer", arg[3], "appid", "otn") + m.Cmdy(prefix, "raw", "/passport/web/login", "form", "username", arg[1], "password", arg[2], "answer", arg[3], "appid", "otn") } }}, "railway": &ice.Command{Name: "railway", Help: "12306", List: kit.List( @@ -62,46 +56,45 @@ var Index = &ice.Context{Name: "mall", Help: "团队模块", kit.MDB_INPUT, "text", "name", "from", "value", "北京", kit.MDB_INPUT, "text", "name", "to", "value", "曲阜", kit.MDB_INPUT, "button", "name", "查询", - ), - Hand: func(m *ice.Message, c *ice.Context, key string, arg ...string) { - date := time.Now().Add(time.Hour * 24).Format("2006-01-02") - if len(arg) > 0 { - date, arg = arg[0], arg[1:] - } - from := "北京" - if len(arg) > 0 { - from, arg = arg[0], arg[1:] - } - from_code := m.Conf("railway", kit.Keys("meta.site", from)) - to := "曲阜" - if len(arg) > 0 { - to, arg = arg[0], arg[1:] - } - to_code := m.Conf("railway", kit.Keys("meta.site", to)) + ), Hand: func(m *ice.Message, c *ice.Context, key string, arg ...string) { + date := time.Now().Add(time.Hour * 24).Format("2006-01-02") + if len(arg) > 0 { + date, arg = arg[0], arg[1:] + } + from := "北京" + if len(arg) > 0 { + from, arg = arg[0], arg[1:] + } + from_code := m.Conf("railway", kit.Keys("meta.site", from)) + to := "曲阜" + if len(arg) > 0 { + to, arg = arg[0], arg[1:] + } + to_code := m.Conf("railway", kit.Keys("meta.site", to)) - m.Echo("%s->%s %s\n", from, to, date) + m.Echo("%s->%s %s\n", from, to, date) - if len(arg) > 0 { - m.Cmdy(ice.WEB_SPIDE, "12306", "raw", "GET", fmt.Sprintf("/otn/czxx/queryByTrainNo?train_no=%s&from_station_telecode=%s&to_station_telecode=%s&depart_date=%s", - arg[0], from_code, to_code, date)) - return - } + if len(arg) > 0 { + m.Cmdy(ice.WEB_SPIDE, "12306", "raw", "GET", fmt.Sprintf("/otn/czxx/queryByTrainNo?train_no=%s&from_station_telecode=%s&to_station_telecode=%s&depart_date=%s", + arg[0], from_code, to_code, date)) + return + } - m.Cmd(ice.WEB_SPIDE, "12306", "GET", fmt.Sprintf("/otn/leftTicket/init?linktypeid=dc&fs=%s,%s&ts=%s,%s&date=%s&flag=N,N,Y", - from, from_code, to, to_code, date)) - m.Cmd(ice.WEB_SPIDE, "12306", "GET", fmt.Sprintf("/otn/leftTicket/queryZ?leftTicketDTO.train_date=%s&leftTicketDTO.from_station=%s&leftTicketDTO.to_station=%s&purpose_codes=ADULT", - date, from_code, to_code)).Table(func(index int, value map[string]string, head []string) { - kit.Fetch(kit.Value(kit.UnMarshal(value["data"]), "result"), func(index int, value string) { - fields := strings.Split(value, "|") - m.Push("车次", fields[3]) - m.Push("出发", fields[8]) - m.Push("到站", fields[9]) - m.Push("时长", fields[10]) - m.Push("二等座", fields[30]) - m.Push("一等座", fields[31]) - }) + m.Cmd(ice.WEB_SPIDE, "12306", "GET", fmt.Sprintf("/otn/leftTicket/init?linktypeid=dc&fs=%s,%s&ts=%s,%s&date=%s&flag=N,N,Y", + from, from_code, to, to_code, date)) + m.Cmd(ice.WEB_SPIDE, "12306", "GET", fmt.Sprintf("/otn/leftTicket/queryZ?leftTicketDTO.train_date=%s&leftTicketDTO.from_station=%s&leftTicketDTO.to_station=%s&purpose_codes=ADULT", + date, from_code, to_code)).Table(func(index int, value map[string]string, head []string) { + kit.Fetch(kit.Value(kit.UnMarshal(value["data"]), "result"), func(index int, value string) { + fields := strings.Split(value, "|") + m.Push("车次", fields[3]) + m.Push("出发", fields[8]) + m.Push("到站", fields[9]) + m.Push("时长", fields[10]) + m.Push("二等座", fields[30]) + m.Push("一等座", fields[31]) }) - }}, + }) + }}, }, } diff --git a/miss/go.mod b/miss/go.mod index f0b362e2..f6808bb5 100644 --- a/miss/go.mod +++ b/miss/go.mod @@ -2,7 +2,7 @@ module miss go 1.13 -require github.com/shylinux/icebergs v0.1.0 // indirect +require github.com/shylinux/icebergs v0.1.0 replace ( github.com/shylinux/icebergs => ../ diff --git a/miss/ice.md b/miss/ice.md new file mode 100644 index 00000000..e2603cb3 --- /dev/null +++ b/miss/ice.md @@ -0,0 +1,125 @@ +# {{title "ICEBERGS"}} +icebergs是一个后端框架,通过模块化、集群化实现资源的无限的扩展与自由的组合。 + +{{chain "icebergs" ` +icebergs + type.go + msg.Detail + msg.Option + msg.Append + msg.Result + msg.Travel + msg.Search + msg.Conf + msg.Cmd + msg.Cap + base.go bg blue + Begin + _init + Start bg red + code + wiki + chat + ocean + river + action + storm + steam + team + mall + _exit + Close + conf.go + init + host + boot + node + user + work + auth + data + file +` "" "" 16}} + +一键创建项目 +``` +mkdir miss; cd miss && curl -s https://shylinux.com/publish/build.sh | sh +``` +一键启动项目 +``` +mkdir miss; cd miss && curl -s https://shylinux.com/publish/ice.sh | sh +``` + +## {{chapter "元始模块 base/ctx"}} + +## {{chapter "配置模块 base/cli"}} +cli模块用于与系统进行交互。 + +- 系统信息 ice.CLI_RUNTIME +- 系统命令 ice.CLI_SYSTEM + +## {{chapter "通信模块 base/tcp"}} +tcp模块用于管理网络的读写 + +## {{chapter "存储模块 base/nfs"}} +nfs模块用于管理文件的读写。 + +## {{chapter "终端模块 base/ssh"}} +ssh模块用于与终端交互。 + +## {{chapter "数据模块 base/mdb"}} +mdb模块用于管理数据的读写。 + +## {{chapter "词法模块 base/lex"}} + +## {{chapter "语法模块 base/yac"}} + +## {{chapter "日志模块 base/log"}} +log模块负责输出日志。 + +## {{chapter "事件模块 base/gdb"}} +gdb模块会根据各种触发条件,择机执行各种命令。 + +- 信号器 ice.SIGNAL +- 定时器 ice.TIMER +- 触发器 ice.EVENT + +## {{chapter "认证模块 base/aaa"}} +aaa模块用于各种权限管理与身份认证。 + +- 角色 ice.AAA_ROLE +- 用户 ice.AAA_USER +- 会话 ice.AAA_SESS + +## {{chapter "网络模块 base/web"}} +web模块用于组织网络节点,与生成前端网页, + +### {{section "网络爬虫 ice.WEB_SPIDE"}} +WEB_SPIDE功能,用于发送网络请求获取相关数据。 + +### {{section "网络服务 ice.WEB_SERVE"}} +WEB_SERVE功能,用于启动网络服务器接收网络请求。 + +### {{section "网络节点 ice.WEB_SPACE"}} +WEB_SPACE功能,用于与相连网络节点进行通信。 + +### {{section "网络任务 ice.WEB_DREAM"}} +WEB_DREAM功能,用于启动本地节点,管理各种任务的相关资源。 + +### {{section "网络收藏 ice.WEB_FAVOR"}} +WEB_FAVOR功能,用于收藏各种实时数据,进行分类管理。 + +### {{section "网络缓存 ice.WEB_CACHE"}} +WEB_CACHE功能,用于管理缓存数据,自动存储与传输。 + +### {{section "网络存储 ice.WEB_STORY"}} +WEB_STORY功能,用于记录数据的历史变化,可以查看任意历史版本。 + +### {{section "网络共享 ice.WEB_SHARE"}} +WEB_SHARE功能,用于数据与应用的共享,可以查到所有数据流通记录。 + +### {{section "网络路由 ice.WEB_ROUTE"}} +### {{section "网络代理 ice.WEB_PROXY"}} +### {{section "网络分组 ice.WEB_GROUP"}} +### {{section "网络标签 ice.WEB_LABEL"}} + diff --git a/miss/miss.md b/miss/miss.md deleted file mode 100644 index 80832b52..00000000 --- a/miss/miss.md +++ /dev/null @@ -1,115 +0,0 @@ -# icebergs - -icebergs是一个后端框架,通过模块化、集群化实现资源的无限的扩展与自由的组合。 - -{{chain "icebergs" ` -icebergs - type.go - msg.Detail - msg.Option - msg.Append - msg.Result - msg.Travel - msg.Search - msg.Conf - msg.Cmd - msg.Cap - base.go bg blue - Begin - _init - Start bg red - code - wiki - chat - ocean - river - action - storm - steam - team - mall - _exit - Close - conf.go - init - host - boot - node - user - work - auth - data - file -` "" "" 16}} - -一键创建项目 -``` -mkdir miss; cd miss && curl -s https://shylinux.com/publish/build.sh | sh -``` -一键启动项目 -``` -mkdir miss; cd miss && curl -s https://shylinux.com/publish/ice.sh | sh -``` - -## 命令模块 base/cli - -cli模块用于与系统进行交互。 - -- 系统信息 ice.CLI_RUNTIME -- 系统命令 ice.CLI_SYSTEM - -## 网络模块 base/tcp - -tcp模块用于管理网络的读写 - -## 文件模块 base/nfs - -nfs模块用于管理文件的读写。 - -## 终端模块 base/ssh - -ssh模块用于与终端交互。 - -## 数据模块 base/mdb - -mdb模块用于管理数据的读写。 - -## 日志模块 base/log - -log模块负责输出日志。 - -## 事件模块 base/gdb - -gdb模块会根据各种触发条件,择机执行各种命令。 - -- 信号器 ice.SIGNAL -- 定时器 ice.TIMER -- 触发器 ice.EVENT - -## 认证模块 base/aaa - -aaa模块用于各种权限管理与身份认证。 - -- 角色 ice.AAA_ROLE -- 用户 ice.AAA_USER -- 会话 ice.AAA_SESS - -## 网页模块 base/web - -web模块用于组织网络节点,与生成前端网页, - -- 网络爬虫 ice.WEB_SPIDE -- 网络服务 ice.WEB_SERVE -- 网络节点 ice.WEB_SPACE -- 网络任务 ice.WEB_DREAM - -- 网络收藏 ice.WEB_FAVOR -- 网络缓存 ice.WEB_CACHE -- 网络存储 ice.WEB_STORY -- 网络共享 ice.WEB_SHARE - -- 网络路由 ice.WEB_ROUTE -- 网络代理 ice.WEB_PROXY -- 网络分组 ice.WEB_GROUP -- 网络标签 ice.WEB_LABEL - diff --git a/type.go b/type.go index 93c236f3..837a6c7f 100644 --- a/type.go +++ b/type.go @@ -386,7 +386,10 @@ func (m *Message) Push(key string, value interface{}, arg ...interface{}) *Messa } return m } - return m.Add(MSG_APPEND, key, kit.Format(value)) + for _, v := range kit.Simple(value) { + m.Add(MSG_APPEND, key, v) + } + return m } func (m *Message) Echo(str string, arg ...interface{}) *Message { if len(arg) > 0 { @@ -677,7 +680,7 @@ func (m *Message) Space(arg interface{}) []string { return []string{WEB_SPACE, kit.Format(arg)} } func (m *Message) Right(arg ...interface{}) bool { - return !m.Warn(m.Cmdx(AAA_ROLE, "right", m.Option(MSG_USERROLE), kit.Keys(arg...)) != "ok", "no right") + return m.Option(MSG_USERROLE) == ROLE_ROOT || !m.Warn(m.Cmdx(AAA_ROLE, "right", m.Option(MSG_USERROLE), kit.Keys(arg...)) != "ok", "no right") } func (m *Message) Event(key string, arg ...string) *Message { m.Cmd(GDB_EVENT, "action", key, arg) @@ -996,7 +999,7 @@ func (m *Message) Grow(key string, chain interface{}, data interface{}) int { meta["count"] = id // 保存数据 - if len(list) > kit.Int(kit.Select(m.Conf(WEB_CACHE, Meta("limit")), meta["limit"])) { + if len(list) >= kit.Int(kit.Select(m.Conf(WEB_CACHE, Meta("limit")), meta["limit"])) { least := kit.Int(kit.Select(m.Conf(WEB_CACHE, Meta("least")), meta["least"])) // 创建文件