|
@@ -2,19 +2,24 @@
|
|
|
package webservice
|
|
|
|
|
|
import (
|
|
|
+ "bytes"
|
|
|
"crypto/tls"
|
|
|
_ "embed"
|
|
|
"encoding/json"
|
|
|
"fmt"
|
|
|
- qu "jygit.jydev.jianyu360.cn/data_processing/common_utils"
|
|
|
+ "io/ioutil"
|
|
|
"log"
|
|
|
"net/http"
|
|
|
be "spider_creator/backend"
|
|
|
bdb "spider_creator/backend/db"
|
|
|
+
|
|
|
+ qu "jygit.jydev.jianyu360.cn/data_processing/common_utils"
|
|
|
)
|
|
|
|
|
|
const (
|
|
|
- LISTEN_ADDR = ":8080"
|
|
|
+ LISTEN_ADDR = ":8080"
|
|
|
+ AI_GEN_LIST_CSS = "http://39.106.73.135:5005/listpage"
|
|
|
+ AI_GEN_DETAIL_CSS = "http://39.106.73.135:5005/detailpage"
|
|
|
)
|
|
|
|
|
|
type (
|
|
@@ -67,6 +72,9 @@ func (ws *WebService) RunHttpServe() {
|
|
|
//这里注册HTTP服务
|
|
|
mux.HandleFunc("/save", ws.SaveSpiderConfig)
|
|
|
mux.HandleFunc("/load", ws.LoadSpiderConfig)
|
|
|
+ mux.HandleFunc("/loadListCss", ws.FindListCssSelector)
|
|
|
+ mux.HandleFunc("/loadDetailCss", ws.FindDetailCssSelector)
|
|
|
+
|
|
|
//
|
|
|
qu.Debug("Starting HTTPS server on ", LISTEN_ADDR)
|
|
|
err = server.ListenAndServeTLS("", "")
|
|
@@ -146,3 +154,173 @@ func SetCurrentTabCssMark(cssMark map[string]interface{}) {
|
|
|
currentTabSpiderConfig = sc
|
|
|
//qu.Debug("当前编辑爬虫链接:", *currentTabSpiderConfig)
|
|
|
}
|
|
|
+
|
|
|
+// FindListCssSelector
|
|
|
+func (ws *WebService) FindListCssSelector(w http.ResponseWriter, r *http.Request) {
|
|
|
+ qu.Debug("AI生成列表页CSS...")
|
|
|
+ w.Header().Set("Access-Control-Allow-Origin", "*")
|
|
|
+ w.Header().Set("Content-Type", "application/json")
|
|
|
+ reqData := struct {
|
|
|
+ Data string `json:"data"`
|
|
|
+ User string `json:"user"`
|
|
|
+ }{}
|
|
|
+ err := json.NewDecoder(r.Body).Decode(&reqData)
|
|
|
+ if err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ //发起远程请求,进行大模型计算
|
|
|
+ reqData.User = "jianyu"
|
|
|
+ jsonData, err := json.Marshal(reqData)
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println("Error marshalling data:", err)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ // 创建HTTP客户端
|
|
|
+ client := &http.Client{}
|
|
|
+ // 创建POST请求
|
|
|
+ req, err := http.NewRequest("POST", AI_GEN_LIST_CSS, bytes.NewBuffer(jsonData))
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println("Error creating request:", err)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ // 设置请求头
|
|
|
+ req.Header.Set("Content-Type", "application/json")
|
|
|
+ // 发送请求
|
|
|
+ resp, err := client.Do(req)
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println("Error sending request:", err)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ defer resp.Body.Close()
|
|
|
+ // 读取响应
|
|
|
+ body, err := ioutil.ReadAll(resp.Body)
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println("Error reading response:", err)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ log.Println("AI返回", string(body))
|
|
|
+ resultCss := struct {
|
|
|
+ Data struct {
|
|
|
+ ListBodyCss string `json:"listBodyCss"`
|
|
|
+ ListItemCss string `json:"listItemCss"`
|
|
|
+ ListLinkCss string `json:"listLinkCss"`
|
|
|
+ ListPublishTimeCss string `json:"listPublishTimeCss"`
|
|
|
+ ListNextPageCss string `json:"listNextPageCss"`
|
|
|
+ listTurnPageJs string `json:"listTurnPageJs"`
|
|
|
+ } `json:"data"`
|
|
|
+ }{}
|
|
|
+ err = json.Unmarshal(body, &resultCss)
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println("Error decodejson response:", err, string(body))
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ //TODO 通知开发工具端,CSS选择器有变动
|
|
|
+ currentTabSpiderConfig.ListBodyCss = resultCss.Data.ListBodyCss
|
|
|
+ currentTabSpiderConfig.ListItemCss = resultCss.Data.ListItemCss
|
|
|
+ currentTabSpiderConfig.ListLinkCss = resultCss.Data.ListLinkCss
|
|
|
+ currentTabSpiderConfig.ListNextPageCss = resultCss.Data.ListNextPageCss
|
|
|
+ currentTabSpiderConfig.ListPubtimeCss = resultCss.Data.ListPublishTimeCss
|
|
|
+ currentTabSpiderConfig.ListTurnPageJSCode = resultCss.Data.listTurnPageJs
|
|
|
+
|
|
|
+ ws.enf.Dispatch("spiderConfigChange", map[string]interface{}{"key": "listBodyCss", "css": resultCss.Data.ListBodyCss})
|
|
|
+ ws.enf.Dispatch("spiderConfigChange", map[string]interface{}{"key": "listItemCss", "css": resultCss.Data.ListItemCss})
|
|
|
+ ws.enf.Dispatch("spiderConfigChange", map[string]interface{}{"key": "listLinkCss", "css": resultCss.Data.ListLinkCss})
|
|
|
+ ws.enf.Dispatch("spiderConfigChange", map[string]interface{}{"key": "listPublishTimeCss", "css": resultCss.Data.ListPublishTimeCss})
|
|
|
+ ws.enf.Dispatch("spiderConfigChange", map[string]interface{}{"key": "listNextPageCss", "css": resultCss.Data.ListNextPageCss})
|
|
|
+ ws.enf.Dispatch("spiderConfigChange", map[string]interface{}{"key": "listTurnPageJs", "css": resultCss.Data.listTurnPageJs})
|
|
|
+
|
|
|
+ err = json.NewEncoder(w).Encode(currentTabSpiderConfig)
|
|
|
+ if err != nil {
|
|
|
+ log.Println("反向序列化失败")
|
|
|
+ http.Error(w, err.Error(), http.StatusBadRequest)
|
|
|
+ return
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+// FindDetailCssSelector
|
|
|
+func (ws *WebService) FindDetailCssSelector(w http.ResponseWriter, r *http.Request) {
|
|
|
+ qu.Debug("AI生成详情页CSS...")
|
|
|
+ w.Header().Set("Access-Control-Allow-Origin", "*")
|
|
|
+ w.Header().Set("Content-Type", "application/json")
|
|
|
+ reqData := struct {
|
|
|
+ Data string `json:"data"`
|
|
|
+ User string `json:"user"`
|
|
|
+ }{}
|
|
|
+ err := json.NewDecoder(r.Body).Decode(&reqData)
|
|
|
+ if err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ //发起远程请求,进行大模型计算
|
|
|
+ reqData.User = "jianyu"
|
|
|
+ jsonData, err := json.Marshal(reqData)
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println("Error marshalling data:", err)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ // 创建HTTP客户端
|
|
|
+ client := &http.Client{}
|
|
|
+ // 创建POST请求
|
|
|
+ req, err := http.NewRequest("POST", AI_GEN_DETAIL_CSS, bytes.NewBuffer(jsonData))
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println("Error creating request:", err)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ // 设置请求头
|
|
|
+ req.Header.Set("Content-Type", "application/json")
|
|
|
+ // 发送请求
|
|
|
+ resp, err := client.Do(req)
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println("Error sending request:", err)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ defer resp.Body.Close()
|
|
|
+ // 读取响应
|
|
|
+ body, err := ioutil.ReadAll(resp.Body)
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println("Error reading response:", err)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ log.Println("AI返回", string(body))
|
|
|
+ resultCss := struct {
|
|
|
+ Data struct {
|
|
|
+ TitleCss string `json:"titleCss"`
|
|
|
+ ContentCss string `json:"contentCss"`
|
|
|
+ PublishTimeCss string `json:"publishTimeCss"`
|
|
|
+ PublishUnitCss string `json:"publishUnitCss"`
|
|
|
+ AttachCss string `json:"attachCss"`
|
|
|
+ } `json:"data"`
|
|
|
+ }{}
|
|
|
+ err = json.Unmarshal(body, &resultCss)
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println("Error decodejson response:", err, string(body))
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ //TODO 通知开发工具端,CSS选择器有变动
|
|
|
+ currentTabSpiderConfig.TitleCss = resultCss.Data.TitleCss
|
|
|
+ currentTabSpiderConfig.PublishTimeCss = resultCss.Data.PublishTimeCss
|
|
|
+ currentTabSpiderConfig.PublishUnitCss = resultCss.Data.PublishUnitCss
|
|
|
+ currentTabSpiderConfig.ContentCss = resultCss.Data.ContentCss
|
|
|
+ currentTabSpiderConfig.AttachCss = resultCss.Data.AttachCss
|
|
|
+
|
|
|
+ ws.enf.Dispatch("spiderConfigChange", map[string]interface{}{"key": "titleCss",
|
|
|
+ "css": resultCss.Data.TitleCss})
|
|
|
+ ws.enf.Dispatch("spiderConfigChange", map[string]interface{}{"key": "contentCss",
|
|
|
+ "css": resultCss.Data.ContentCss})
|
|
|
+ ws.enf.Dispatch("spiderConfigChange", map[string]interface{}{"key": "publishTimeCss",
|
|
|
+ "css": resultCss.Data.PublishTimeCss})
|
|
|
+ ws.enf.Dispatch("spiderConfigChange", map[string]interface{}{"key": "publishUnitCss",
|
|
|
+ "css": resultCss.Data.PublishUnitCss})
|
|
|
+ ws.enf.Dispatch("spiderConfigChange", map[string]interface{}{"key": "attachCss",
|
|
|
+ "css": resultCss.Data.AttachCss})
|
|
|
+
|
|
|
+ err = json.NewEncoder(w).Encode(currentTabSpiderConfig)
|
|
|
+ if err != nil {
|
|
|
+ log.Println("反向序列化失败")
|
|
|
+ http.Error(w, err.Error(), http.StatusBadRequest)
|
|
|
+ return
|
|
|
+ }
|
|
|
+}
|