|
@@ -0,0 +1,217 @@
|
|
|
|
+package services
|
|
|
|
+
|
|
|
|
+import (
|
|
|
|
+ "context"
|
|
|
|
+ "encoding/json"
|
|
|
|
+ "eta/eta_crawler/models"
|
|
|
|
+ "eta/eta_crawler/utils"
|
|
|
|
+ "fmt"
|
|
|
|
+ "io/ioutil"
|
|
|
|
+ "net/http"
|
|
|
|
+ "strings"
|
|
|
|
+ "time"
|
|
|
|
+)
|
|
|
|
+
|
|
|
|
+func CrawlerIcpi(cont context.Context) (err error) {
|
|
|
|
+ dataIndexUrl := `http://www.bdecon.com/dataIndex`
|
|
|
|
+ resp, err := http.Get(dataIndexUrl)
|
|
|
|
+ fmt.Println(err)
|
|
|
|
+ cookieLen := len(resp.Cookies())
|
|
|
|
+ var cookieStr string
|
|
|
|
+ for i := cookieLen - 1; i >= 0; i-- {
|
|
|
|
+ cookie := resp.Cookies()[i]
|
|
|
|
+ fmt.Println(i, cookie.Name, cookie.Value)
|
|
|
|
+ cookieStr += cookie.Name + "=" + cookie.Value + ";"
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ cookieStr = strings.Trim(cookieStr, ";")
|
|
|
|
+ fmt.Println(cookieStr)
|
|
|
|
+ fmt.Println("end")
|
|
|
|
+ // 创建一个HTTP客户端
|
|
|
|
+ client := &http.Client{}
|
|
|
|
+ // 创建一个GET请求
|
|
|
|
+ data := strings.NewReader("laber=1")
|
|
|
|
+ req, err := http.NewRequest("POST", "http://www.bdecon.com/indexqueryiCPI/", data)
|
|
|
|
+ if err != nil {
|
|
|
|
+ fmt.Println("创建请求失败:", err)
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+ // 设置请求头
|
|
|
|
+ req.Header.Set("Accept", "*/*")
|
|
|
|
+ req.Header.Set("Accept-Encoding", "gzip, deflate")
|
|
|
|
+ req.Header.Set("Accept-Language", "zh-CN,zh;q=0.9,en;q=0.8")
|
|
|
|
+ req.Header.Set("Connection", "keep-alive")
|
|
|
|
+ req.Header.Set("Content-Length", "7")
|
|
|
|
+ req.Header.Set("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8")
|
|
|
|
+ req.Header.Set("Cookie", cookieStr)
|
|
|
|
+ req.Header.Set("Host", "www.bdecon.com")
|
|
|
|
+ req.Header.Set("Origin", "http://www.bdecon.com")
|
|
|
|
+ req.Header.Set("Referer", "http://www.bdecon.com/dataIndex")
|
|
|
|
+ req.Header.Set("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36")
|
|
|
|
+ req.Header.Set("X-Requested-With", "XMLHttpRequest")
|
|
|
|
+ // 发送请求并获取响应
|
|
|
|
+ resp, err = client.Do(req)
|
|
|
|
+ if err != nil {
|
|
|
|
+ fmt.Println("发送请求失败:", err)
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+ defer resp.Body.Close()
|
|
|
|
+ // 读取响应的内容
|
|
|
|
+ body, err := ioutil.ReadAll(resp.Body)
|
|
|
|
+ if err != nil {
|
|
|
|
+ fmt.Println("读取响应失败:", err)
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ utils.FileLog.Info("result:")
|
|
|
|
+ utils.FileLog.Info(string(body))
|
|
|
|
+ // 打印响应内容
|
|
|
|
+ fmt.Println(string(body))
|
|
|
|
+
|
|
|
|
+ list := make([]*IcpiItem, 0)
|
|
|
|
+ err = json.Unmarshal(body, &list)
|
|
|
|
+ if err != nil {
|
|
|
|
+ fmt.Println("CrawlerIcpi json.Unmarshal Err:" + err.Error())
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ icpiIndexObj := new(models.BaseFromIcpiIndex)
|
|
|
|
+
|
|
|
|
+ indexAll, err := icpiIndexObj.GetBaseFromIcpiIndexAll()
|
|
|
|
+ if err != nil {
|
|
|
|
+ fmt.Println("GetBaseFromIcpiIndexAll Err:" + err.Error())
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ indexMap := make(map[string]*models.BaseFromIcpiIndex)
|
|
|
|
+ for _, v := range indexAll {
|
|
|
|
+ indexMap[v.IndexCode] = v
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ limit := 2
|
|
|
|
+ for _, v := range list {
|
|
|
|
+ indexCode := strings.ReplaceAll(v.EnglishName, " ", "_")
|
|
|
|
+
|
|
|
|
+ dataList, err := icpiIndexObj.GetBaseFromIcpiData(indexCode, limit)
|
|
|
|
+ if err != nil {
|
|
|
|
+ fmt.Println("GetBaseFromIcpiIndexAll Err:" + err.Error())
|
|
|
|
+ return err
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ dataMap := make(map[string]string)
|
|
|
|
+ for _, dv := range dataList {
|
|
|
|
+ dataMap[dv.DataTime] = dv.Value
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if indexItem, ok := indexMap[indexCode]; !ok { //新增指标
|
|
|
|
+ icpiIndexObj = new(models.BaseFromIcpiIndex)
|
|
|
|
+ icpiIndexObj.IndexCode = indexCode
|
|
|
|
+ icpiIndexObj.IndexName = v.Name
|
|
|
|
+ icpiIndexObj.Frequency = "日度"
|
|
|
|
+ icpiIndexObj.CreateTime = time.Now()
|
|
|
|
+ icpiIndexObj.ModifyTime = time.Now()
|
|
|
|
+ err = icpiIndexObj.Add()
|
|
|
|
+ if err != nil {
|
|
|
|
+ fmt.Println("icpiIndexObj Add Err:" + err.Error())
|
|
|
|
+ return err
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ //新增指标对应的数据
|
|
|
|
+ dataItem := new(models.BaseFromIcpiData)
|
|
|
|
+ dataItem.IndexCode = indexCode
|
|
|
|
+ dataItem.BaseFromIcpiIndexId = icpiIndexObj.BaseFromIcpiIndexId
|
|
|
|
+ dataItem.DataTime = time.Now().Format(utils.FormatDate)
|
|
|
|
+ dataItem.Value = v.Today
|
|
|
|
+ dataItem.CreateTime = time.Now()
|
|
|
|
+ dataItem.ModifyTime = time.Now()
|
|
|
|
+ err = icpiIndexObj.AddData(dataItem)
|
|
|
|
+ if err != nil {
|
|
|
|
+ fmt.Println("icpiIndexObj AddData Err:" + err.Error())
|
|
|
|
+ return err
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ //新增指标对应的数据
|
|
|
|
+ dataItem = new(models.BaseFromIcpiData)
|
|
|
|
+ dataItem.IndexCode = indexCode
|
|
|
|
+ dataItem.BaseFromIcpiIndexId = icpiIndexObj.BaseFromIcpiIndexId
|
|
|
|
+ dataItem.DataTime = time.Now().AddDate(0, 0, -1).Format(utils.FormatDate)
|
|
|
|
+ dataItem.Value = v.Yesterday
|
|
|
|
+ dataItem.CreateTime = time.Now()
|
|
|
|
+ dataItem.ModifyTime = time.Now()
|
|
|
|
+ err = icpiIndexObj.AddData(dataItem)
|
|
|
|
+ if err != nil {
|
|
|
|
+ fmt.Println("icpiIndexObj AddData Err:" + err.Error())
|
|
|
|
+ return err
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ today := time.Now().Format(utils.FormatDate)
|
|
|
|
+ if dataVal, ok := dataMap[today]; !ok {
|
|
|
|
+ dataItem := new(models.BaseFromIcpiData)
|
|
|
|
+ dataItem.IndexCode = indexCode
|
|
|
|
+ dataItem.BaseFromIcpiIndexId = indexItem.BaseFromIcpiIndexId
|
|
|
|
+ dataItem.DataTime = today
|
|
|
|
+ dataItem.Value = v.Today
|
|
|
|
+ dataItem.CreateTime = time.Now()
|
|
|
|
+ dataItem.ModifyTime = time.Now()
|
|
|
|
+ err = icpiIndexObj.AddData(dataItem)
|
|
|
|
+ if err != nil {
|
|
|
|
+ fmt.Println("icpiIndexObj AddData Err:" + err.Error())
|
|
|
|
+ return err
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ if dataVal != v.Today {
|
|
|
|
+ err = icpiIndexObj.ModifyData(indexCode, today, v.Today)
|
|
|
|
+ if err != nil {
|
|
|
|
+ fmt.Println("icpiIndexObj ModifyData Err:" + err.Error())
|
|
|
|
+ return err
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ yesterday := time.Now().AddDate(0, 0, -1).Format(utils.FormatDate)
|
|
|
|
+ if dataVal, ok := dataMap[yesterday]; !ok {
|
|
|
|
+ dataItem := new(models.BaseFromIcpiData)
|
|
|
|
+ dataItem.IndexCode = indexCode
|
|
|
|
+ dataItem.BaseFromIcpiIndexId = indexItem.BaseFromIcpiIndexId
|
|
|
|
+ dataItem.DataTime = yesterday
|
|
|
|
+ dataItem.Value = v.Yesterday
|
|
|
|
+ dataItem.CreateTime = time.Now()
|
|
|
|
+ dataItem.ModifyTime = time.Now()
|
|
|
|
+ err = icpiIndexObj.AddData(dataItem)
|
|
|
|
+ if err != nil {
|
|
|
|
+ fmt.Println("icpiIndexObj AddData Err:" + err.Error())
|
|
|
|
+ return err
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ if dataVal != v.Today {
|
|
|
|
+ err = icpiIndexObj.ModifyData(indexCode, yesterday, v.Today)
|
|
|
|
+ if err != nil {
|
|
|
|
+ fmt.Println("icpiIndexObj ModifyData Err:" + err.Error())
|
|
|
|
+ return err
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ maxItem, err := icpiIndexObj.GetBaseFromIcpiIndexMaxAndMinInfo(indexCode)
|
|
|
|
+ if err != nil {
|
|
|
|
+ fmt.Println("GetBaseFromIcpiIndexMaxAndMinInfo Err:" + err.Error())
|
|
|
|
+ return err
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ err = icpiIndexObj.ModifyEdbInfoMaxAndMinInfo(indexCode, maxItem)
|
|
|
|
+ if err != nil {
|
|
|
|
+ fmt.Println("ModifyEdbInfoMaxAndMinInfo Err:" + err.Error())
|
|
|
|
+ return err
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+ return err
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+type IcpiItem struct {
|
|
|
|
+ Name string `json:"name"`
|
|
|
|
+ EnglishName string `json:"englishName"`
|
|
|
|
+ Today string `json:"today"`
|
|
|
|
+ Yesterday string `json:"yesterday"`
|
|
|
|
+}
|