server.go 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. package main
  2. import (
  3. "bytes"
  4. "encoding/json"
  5. "fmt"
  6. "io/ioutil"
  7. qu "jygit.jydev.jianyu360.cn/data_processing/common_utils"
  8. "net/http"
  9. "net/url"
  10. "reflect"
  11. be "spider_creator/backend"
  12. "time"
  13. )
  14. //const HREF = "http://127.0.0.1:8091/%s" //线下测试环境
  15. const HREF = "http://visualizeld.spdata.jianyu360.com/%s" //正式库
  16. //const HREF = "http://visualize.spdata.jianyu360.com/%s" //临时库
  17. type Result struct {
  18. Msg string `json:"msg"`
  19. Err int `json:"err"`
  20. Data *Data `json:"data"`
  21. }
  22. type Data struct {
  23. List []map[string]interface{} `json:"list"`
  24. Total int `json:"total"`
  25. }
  26. // ServerActionCodeList 获取爬虫列表
  27. func (a *App) ServerActionCodeList(param map[string]interface{}) *Result {
  28. qu.Debug("param---", param)
  29. r := &Result{}
  30. if User != nil {
  31. getResult(map[string]interface{}{"param": param, "user": User}, r, "getcodes")
  32. } else {
  33. r.Msg = "用户登录异常,请重新登录!"
  34. qu.Debug(r.Msg)
  35. }
  36. return r
  37. }
  38. // ServerActionClaimCodes 爬虫认领
  39. func (a *App) ServerActionClaimCodes() *Result {
  40. r := &Result{}
  41. if User != nil && User.Auth == 1 {
  42. getResult(User, r, "claimcode")
  43. } else {
  44. r.Msg = "认领失败!"
  45. }
  46. return r
  47. }
  48. // ServerActionCopyCode 复制爬虫
  49. func (a *App) ServerActionCopyCode(param map[string]interface{}) *Result {
  50. r := &Result{}
  51. if User != nil && User.Auth == 1 {
  52. getResult(map[string]interface{}{"param": param, "user": User}, r, "copycode")
  53. } else {
  54. r.Msg = "复制爬虫失败!"
  55. }
  56. return r
  57. }
  58. // ServerActionUpdateCode 爬虫更新
  59. func (a *App) ServerActionUpdateCode(param map[string]interface{}) *Result {
  60. qu.Debug("param---", param)
  61. r := &Result{}
  62. if User != nil {
  63. //formatUser(param)
  64. qu.Debug("param---", param)
  65. getResult(map[string]interface{}{"param": param, "user": User}, r, "updatecode")
  66. } else {
  67. r.Msg = "用户登录异常,请重新登录!"
  68. qu.Debug(r.Msg)
  69. }
  70. return r
  71. }
  72. // ServerActionUpdateCode 爬虫状态更新
  73. func (a *App) ServerActionUpdateCodeState(param map[string]interface{}) *Result {
  74. qu.Debug("param---", param)
  75. /*
  76. 1、提交审核
  77. 2、回退
  78. 3、打回
  79. 4、审核通过
  80. 5、上线
  81. */
  82. r := &Result{}
  83. //前期校验
  84. if User != nil {
  85. //提交审核时,验证校验清单
  86. p, _ := param["param"].(map[string]interface{})
  87. if qu.ObjToString(p["stype"]) == "提交" {
  88. code := qu.ObjToString(p["code"])
  89. vr := be.VerifyResults[code]
  90. if vr == nil { //没有检验清单,不允许提交
  91. r.Msg = "未验证,无法提交!"
  92. //} else if !vr.ListItems || !vr.Content || !vr.Title || !vr.PublishTime { //校验检验清单必通过项
  93. } else if !vr.ListItems || !vr.Content || !vr.Title || !vr.PublishTime || !vr.ListTrunPage { //校验检验清单必通过项
  94. r.Msg = "验证清单未通过!"
  95. } else {
  96. p["verify"] = vr
  97. be.VerifyResults[code] = nil //清空验证结果
  98. }
  99. }
  100. } else {
  101. r.Msg = "用户登录异常,请重新登录!"
  102. qu.Debug(r.Msg)
  103. }
  104. if r.Msg == "" {
  105. param["user"] = User
  106. qu.Debug("param---", param)
  107. //formatUser(param)
  108. getResult(param, r, "updatecodestate")
  109. }
  110. return r
  111. }
  112. // 格式化User对象
  113. func formatUser(tmp map[string]interface{}) {
  114. v := reflect.ValueOf(User)
  115. if v.Kind() == reflect.Ptr {
  116. v = v.Elem()
  117. }
  118. t := v.Type()
  119. for i := 0; i < v.NumField(); i++ {
  120. field := t.Field(i).Tag.Get("json")
  121. value := v.Field(i).Interface()
  122. tmp[field] = value
  123. }
  124. }
  125. func getResult(param, result interface{}, route string) {
  126. jsonData, err := json.Marshal(param)
  127. if err != nil {
  128. qu.Debug("Error marshaling request:", err)
  129. return
  130. }
  131. req, err := http.NewRequest("POST", fmt.Sprintf(HREF, route), bytes.NewBuffer(jsonData))
  132. if err != nil {
  133. qu.Debug("Error creating request:", err)
  134. return
  135. }
  136. // 设置请求头
  137. req.Header.Set("Content-Type", "application/json")
  138. // 发送请求
  139. client := &http.Client{
  140. Timeout: 10 * time.Second,
  141. }
  142. resp, err := client.Do(req)
  143. if err != nil {
  144. qu.Debug("Error sending request:", err)
  145. return
  146. }
  147. defer resp.Body.Close()
  148. // 读取响应体
  149. body, err := ioutil.ReadAll(resp.Body)
  150. if err != nil {
  151. qu.Debug("Error reading response body:", err)
  152. return
  153. }
  154. decodedBody, err := url.QueryUnescape(string(body))
  155. if err != nil {
  156. qu.Debug("Decoded Body Error:", err)
  157. return
  158. }
  159. if err := json.Unmarshal([]byte(decodedBody), &result); err != nil {
  160. qu.Debug("Error unmarshaling response:", err)
  161. return
  162. }
  163. qu.Debug(result)
  164. }