123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129 |
- // 对外服务
- package webservice
- import (
- "crypto/tls"
- _ "embed"
- "encoding/json"
- "fmt"
- "log"
- "net/http"
- be "spider_creator/backend"
- bdb "spider_creator/backend/db"
- )
- const (
- LISTEN_ADDR = ":8080"
- )
- type (
- SpiderConfigItem struct {
- Key string `json:"key"`
- Css string `json:"css"`
- }
- WebService struct {
- db *bdb.SpiderDb
- enf be.EventNotifyFace
- currentSpiderConfig *be.SpiderConfig
- }
- )
- var (
- //go:embed cert.pem
- certBytes []byte
- //go:embed key.pem
- keyBytes []byte
- )
- // NewWebService
- func NewWebService(db *bdb.SpiderDb, enf be.EventNotifyFace, csf *be.SpiderConfig) *WebService {
- return &WebService{db, enf, csf}
- }
- func (ws *WebService) RunHttpServe() {
- // 设置HTTP服务器
- mux := http.NewServeMux()
- // 解析证书
- cert, err := tls.X509KeyPair(certBytes, keyBytes)
- if err != nil {
- log.Println(err.Error())
- return
- }
- // 创建一个TLS配置
- tlsConfig := &tls.Config{
- // 可以在这里添加其他TLS配置
- Certificates: []tls.Certificate{cert},
- ServerName: "localhost",
- InsecureSkipVerify: true,
- }
- server := &http.Server{
- Addr: LISTEN_ADDR,
- Handler: mux,
- TLSConfig: tlsConfig,
- }
- //这里注册HTTP服务
- mux.HandleFunc("/save", ws.SaveSpiderConfig)
- mux.HandleFunc("/load", ws.LoadSpiderConfig)
- //
- log.Println("Starting HTTPS server on ", LISTEN_ADDR)
- err = server.ListenAndServeTLS("", "")
- if err != nil {
- log.Println("Failed to start server: ", err.Error())
- return
- }
- }
- // LoadCurrentSpiderConfig,json处理
- func (ws *WebService) SaveSpiderConfig(w http.ResponseWriter, r *http.Request) {
- log.Println("保存设置")
- w.Header().Set("Access-Control-Allow-Origin", "*")
- w.Header().Set("Content-Type", "application/json")
- var req = new(SpiderConfigItem)
- err := json.NewDecoder(r.Body).Decode(req)
- if err != nil {
- log.Println("序列化失败")
- http.Error(w, err.Error(), http.StatusBadRequest)
- return
- }
- log.Println("CSS", req.Key, req.Css)
- //TODO 业务操作
- switch req.Key {
- case "listItemCss":
- ws.currentSpiderConfig.ListItemCss = req.Css
- case "listLinkCss":
- ws.currentSpiderConfig.ListLinkCss = req.Css
- case "listPublishTimeCss":
- ws.currentSpiderConfig.ListPubtimeCss = req.Css
- case "listNextPageCss":
- ws.currentSpiderConfig.ListNextPageCss = req.Css
- case "listBodyCss":
- ws.currentSpiderConfig.ListBodyCss = req.Css
- case "titleCss":
- ws.currentSpiderConfig.TitleCss = req.Css
- case "publishUnitCss":
- ws.currentSpiderConfig.PublishUnitCss = req.Css
- case "publishTimeCss":
- ws.currentSpiderConfig.PublishTimeCss = req.Css
- case "contentCss":
- ws.currentSpiderConfig.ContentCss = req.Css
- case "attachCss":
- ws.currentSpiderConfig.AttachCss = req.Css
- }
- fmt.Fprint(w, "{'code':200}")
- ws.db.SaveOrUpdate(ws.currentSpiderConfig)
- //TODO 通知开发工具端,CSS选择器有变动
- ws.enf.Dispatch("spiderConfigChange", map[string]interface{}{"key": req.Key, "sc": ws.currentSpiderConfig})
- }
- // LoadCurrentSpiderConfig,加载,返回当前配置项
- func (ws *WebService) LoadSpiderConfig(w http.ResponseWriter, r *http.Request) {
- log.Println("加载当前配置项")
- w.Header().Set("Access-Control-Allow-Origin", "*")
- w.Header().Set("Content-Type", "application/json")
- err := json.NewEncoder(w).Encode(ws.currentSpiderConfig)
- if err != nil {
- log.Println("反向序列化失败")
- http.Error(w, err.Error(), http.StatusBadRequest)
- return
- }
- }
|