123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424 |
- package services
- import (
- "eta/eta_data_analysis/models"
- "eta/eta_data_analysis/utils"
- "fmt"
- "github.com/PuerkitoBio/goquery"
- "strings"
- "time"
- )
- var FuHeFeiListMap = map[string]string {
- "中国磷铵产能利用率周数据统计" : "https://list.oilchem.net/192/6522/",
- "中国钾肥样本港口库存量周数据统计" : "https://list.oilchem.net/192/50857/",
- "中国复合肥进出口月数据分析" : "https://list.oilchem.net/192/5379/",
- }
- func FuHeFeiList(num int) (err error) {
- for k, v := range FuHeFeiListMap {
- for i := 1; i < num; i++ {
- listUrl := v + fmt.Sprintf("%d.html",i)
- fmt.Println("listUrl:",listUrl)
- htm, e := FetchPageHtml(listUrl)
- if e != nil {
- err = e
- utils.FileLog.Error(fmt.Sprintf("FetchPageHtml err:%v",err))
- fmt.Println("FetchPageHtml err",err)
- return
- }
- err = AnalysisOilchemList(htm, k)
- if err != nil {
- utils.FileLog.Error(fmt.Sprintf("AnalysisOilchemList err:%v",err))
- fmt.Println("AnalysisOilchemList err",err)
- return
- }
- time.Sleep(2*time.Second)
- }
- }
- return
- }
- // 中国磷铵产能利用率周数据统计
- func AnalysisOilchemFuHeFei1(htm []byte) (err error) {
- if len(htm) == 0 {
- utils.FileLog.Info("htm empty")
- return
- }
- doc, e := goquery.NewDocumentFromReader(strings.NewReader(string(htm)))
- if e != nil {
- err = fmt.Errorf("NewDocumentFromReader err: %v", e)
- return
- }
- titleList := make([]string, 0)
- unitList := make([]string, 0)
- doc.Find("p").Each(func(i int, selection *goquery.Selection) {
- ptext := selection.Text()
- if strings.Contains(ptext, "单位:") {
- unit := strings.Replace(ptext, "单位:", "", -1)
- //fmt.Println("unit:",unit)
- unitList = append(unitList, unit)
- }
- if strings.Contains(ptext, "中国磷铵装置产能利用率") {
- title := ptext
- //fmt.Println("title:",title)
- titleList = append(titleList, title)
- }
- })
- area := ""
- title := doc.Find("h2").Text()
- fmt.Println("title:",title)
- createTimeStr := doc.Find("h2").Next().Text()
- createTimeStr = strings.TrimLeft(createTimeStr,"发布时间:")
- createTimeStrIndex := strings.Index(createTimeStr,"来源:")
- createTimeStr = createTimeStr[:createTimeStrIndex]
- createTimeStr = strings.TrimSpace(createTimeStr)
- createTime, err := time.Parse(utils.HlbFormatDateTimeNoSecond, createTimeStr)
- if err != nil {
- utils.FileLog.Error(fmt.Sprintf("time.Parse err:%v",err))
- return
- }
- //fmt.Println("createTime:",createTime)
- dataTime := createTime.Format(utils.FormatDate)
- //fmt.Println("dataTime:",dataTime)
- indexList := make([]*models.BaseFromOilchemIndex, 0)
- doc.Find("tbody").Each(func(tableIndex int, table *goquery.Selection) {
- table.Find("tr").First().Each(func(ii int, table2 *goquery.Selection) {
- table.Find("td").Each(func(jj int, table3 *goquery.Selection) {
- text3 := table3.Text()
- text3 = strings.Replace(text3,"\n","",-1)
- text3 = strings.Replace(text3," ","",-1)
- if text3 == "上周" || text3 == "环比" || text3 == "地区" {
- return
- }
- //fmt.Println("table3:",text3)
- //utils.FileLog.Info(fmt.Sprintf("table3:%s",text3))
- //fmt.Println("ii:",ii)
- //utils.FileLog.Info(fmt.Sprintf("ii:%d",ii))
- //fmt.Println("jj:",jj)
- //utils.FileLog.Info(fmt.Sprintf("jj:%d",jj))
- //fmt.Println("tableIndex:",tableIndex)
- //utils.FileLog.Info(fmt.Sprintf("tableIndex:%d",tableIndex))
- if utils.ContainsChinese(text3) && text3 != "本周" {
- area = text3
- return
- }
- if area == "" {
- return
- }
- value := text3
- value = strings.TrimRight(value, "%")
- //valueF, e := strconv.ParseFloat(value, 64)
- //if e != nil {
- // err = e
- // utils.FileLog.Error(fmt.Sprintf("strconv.ParseFloat err:%v",e))
- // return
- //}
- indexName := "中国磷铵产能利用率"+ "(" +area+")"
- fmt.Println("indexName:",indexName)
- fmt.Println("valueF:",value)
- unit := ""
- if strings.Contains(area,"产量") {
- unit = "万吨"
- } else {
- unit = "%"
- }
- item := &models.BaseFromOilchemIndex{
- IndexName: indexName,
- ClassifyId: 3,
- Unit: unit,
- Frequency: "周度",
- Describe: "",
- DataTime: dataTime,
- Value: value,
- Sort: 0,
- CreateTime: time.Now(),
- ModifyTime: time.Now(),
- IndexNameStr: "中国磷铵产能利用率",
- MarketName: area,
- }
- indexList = append(indexList,item)
- area = ""
- })
- })
- })
- // 写入数据库
- err = PostHandleOilchem(indexList)
- if err != nil {
- utils.FileLog.Error(fmt.Sprintf("PostHandleOilchem err:%v",err))
- fmt.Println("PostHandleOilchem err",err)
- return
- }
- return
- }
- // 中国钾肥样本港口库存量周数据统计
- func AnalysisOilchemFuHeFei2(htm []byte) (err error) {
- if len(htm) == 0 {
- utils.FileLog.Info("htm empty")
- return
- }
- doc, e := goquery.NewDocumentFromReader(strings.NewReader(string(htm)))
- if e != nil {
- err = fmt.Errorf("NewDocumentFromReader err: %v", e)
- return
- }
- //titleList := make([]string, 0)
- unitList := make([]string, 0)
- doc.Find("p").Each(func(i int, selection *goquery.Selection) {
- ptext := selection.Text()
- if strings.Contains(ptext, "单位:") {
- unit := strings.Replace(ptext, "单位:", "", -1)
- //fmt.Println("unit:",unit)
- unitList = append(unitList, unit)
- }
- //if strings.Contains(ptext, "中国磷铵装置产能利用率") {
- // title := ptext
- // //fmt.Println("title:",title)
- // titleList = append(titleList, title)
- //}
- })
- area := ""
- title := doc.Find("h2").Text()
- fmt.Println("title:",title)
- createTimeStr := doc.Find("h2").Next().Text()
- createTimeStr = strings.TrimLeft(createTimeStr,"发布时间:")
- createTimeStrIndex := strings.Index(createTimeStr,"来源:")
- createTimeStr = createTimeStr[:createTimeStrIndex]
- createTimeStr = strings.TrimSpace(createTimeStr)
- createTime, err := time.Parse(utils.HlbFormatDateTimeNoSecond, createTimeStr)
- if err != nil {
- utils.FileLog.Error(fmt.Sprintf("time.Parse err:%v",err))
- return
- }
- //fmt.Println("createTime:",createTime)
- dataTime := createTime.Format(utils.FormatDate)
- //fmt.Println("dataTime:",dataTime)
- indexList := make([]*models.BaseFromOilchemIndex, 0)
- doc.Find("tbody").Each(func(tableIndex int, table *goquery.Selection) {
- table.Find("tr").First().Each(func(ii int, table2 *goquery.Selection) {
- table.Find("td").Each(func(jj int, table3 *goquery.Selection) {
- text3 := table3.Text()
- text3 = strings.Replace(text3,"\n","",-1)
- text3 = strings.Replace(text3," ","",-1)
- if text3 == "上周" || text3 == "环比" || text3 == "地区" {
- return
- }
- //fmt.Println("table3:",text3)
- //utils.FileLog.Info(fmt.Sprintf("table3:%s",text3))
- //fmt.Println("ii:",ii)
- //utils.FileLog.Info(fmt.Sprintf("ii:%d",ii))
- //fmt.Println("jj:",jj)
- //utils.FileLog.Info(fmt.Sprintf("jj:%d",jj))
- //fmt.Println("tableIndex:",tableIndex)
- //utils.FileLog.Info(fmt.Sprintf("tableIndex:%d",tableIndex))
- if utils.ContainsChinese(text3) && text3 != "本周" {
- area = text3
- return
- }
- if area == "" {
- return
- }
- value := text3
- value = strings.TrimRight(value, "%")
- //valueF, e := strconv.ParseFloat(value, 64)
- //if e != nil {
- // err = e
- // utils.FileLog.Error(fmt.Sprintf("strconv.ParseFloat err:%v",e))
- // return
- //}
- indexName := "中国进口氯化钾港口库存"+ "(" +area+")"
- fmt.Println("indexName:",indexName)
- fmt.Println("valueF:",value)
- //unit := ""
- //if strings.Contains(area,"产量") {
- // unit = "万吨"
- //} else {
- // unit = "%"
- //}
- item := &models.BaseFromOilchemIndex{
- IndexName: indexName,
- ClassifyId: 3,
- Unit: "万吨",
- Frequency: "周度",
- Describe: "",
- DataTime: dataTime,
- Value: value,
- Sort: 0,
- CreateTime: time.Now(),
- ModifyTime: time.Now(),
- IndexNameStr: "中国进口氯化钾港口库存",
- MarketName: area,
- }
- indexList = append(indexList,item)
- area = ""
- })
- })
- })
- // 写入数据库
- err = PostHandleOilchem(indexList)
- if err != nil {
- utils.FileLog.Error(fmt.Sprintf("PostHandleOilchem err:%v",err))
- fmt.Println("PostHandleOilchem err",err)
- return
- }
- return
- }
- // 中国复合肥进出口月数据分析
- func AnalysisOilchemFuHeFei3(htm []byte) (err error) {
- if len(htm) == 0 {
- utils.FileLog.Info("htm empty")
- return
- }
- doc, e := goquery.NewDocumentFromReader(strings.NewReader(string(htm)))
- if e != nil {
- err = fmt.Errorf("NewDocumentFromReader err: %v", e)
- return
- }
- titleList := make([]string, 0)
- unitList := make([]string, 0)
- doc.Find("p[style*='text-align: center;']").Each(func(i int, selection *goquery.Selection) {
- ptext := selection.Text()
- if strings.Contains(ptext, "单位:") {
- unit := strings.Replace(ptext, "单位:", "", -1)
- //fmt.Println("unit:",unit)
- unitList = append(unitList, unit)
- }
- if strings.Contains(ptext, "统计") {
- title := ptext
- //fmt.Println("title:",title)
- titleList = append(titleList, title)
- }
- })
- area := ""
- title := doc.Find("h2").Text()
- fmt.Println("title:",title)
- createTimeStr := doc.Find("h2").Next().Text()
- createTimeStr = strings.TrimLeft(createTimeStr,"发布时间:")
- createTimeStrIndex := strings.Index(createTimeStr,"来源:")
- createTimeStr = createTimeStr[:createTimeStrIndex]
- createTimeStr = strings.TrimSpace(createTimeStr)
- createTime, err := time.Parse(utils.HlbFormatDateTimeNoSecond, createTimeStr)
- if err != nil {
- utils.FileLog.Error(fmt.Sprintf("time.Parse err:%v",err))
- return
- }
- //fmt.Println("createTime:",createTime)
- dataTime := createTime.Format(utils.FormatDate)
- //fmt.Println("dataTime:",dataTime)
- indexList := make([]*models.BaseFromOilchemIndex, 0)
- doc.Find("tbody").Each(func(tableIndex int, table *goquery.Selection) {
- table.Find("tr").First().Each(func(ii int, table2 *goquery.Selection) {
- table.Find("td").Each(func(jj int, table3 *goquery.Selection) {
- text3 := table3.Text()
- text3 = strings.Replace(text3,"\n","",-1)
- text3 = strings.Replace(text3," ","",-1)
- if text3 == "上周" || text3 == "环比" || text3 == "地区" {
- return
- }
- //fmt.Println("table3:",text3)
- //utils.FileLog.Info(fmt.Sprintf("table3:%s",text3))
- //fmt.Println("ii:",ii)
- //utils.FileLog.Info(fmt.Sprintf("ii:%d",ii))
- //fmt.Println("jj:",jj)
- //utils.FileLog.Info(fmt.Sprintf("jj:%d",jj))
- //fmt.Println("tableIndex:",tableIndex)
- //utils.FileLog.Info(fmt.Sprintf("tableIndex:%d",tableIndex))
- if utils.ContainsChinese(text3) && text3 != "本周" {
- area = text3
- return
- }
- if area == "" {
- return
- }
- value := text3
- value = strings.TrimRight(value, "%")
- //valueF, e := strconv.ParseFloat(value, 64)
- //if e != nil {
- // err = e
- // utils.FileLog.Error(fmt.Sprintf("strconv.ParseFloat err:%v",e))
- // return
- //}
- title := titleList[tableIndex]
- //fmt.Println("tbody title:",title)
- if strings.Contains(title,"中国氮磷钾复合肥按产销国进口量月数据统计") {
- title = "中国氮磷钾复合肥产销国进口量"
- } else if strings.Contains(title,"中国氮磷钾复合肥按贸易方式进口量月数据统计") {
- title = "中国氮磷钾复合肥贸易方式进口量"
- } else if strings.Contains(title,"中国氮磷钾三元肥产销国出口量月数据统计") {
- title = "中国氮磷钾复合肥产销国出口量"
- } else if strings.Contains(title,"中国氮磷钾三元肥贸易方式出口量月数据统计") {
- title = "中国氮磷钾复合肥贸易方式出口量"
- } else {
- return
- }
- indexName := title + "(" +area+")"
- fmt.Println("indexName:",indexName)
- fmt.Println("valueF:",value)
- //unit := ""
- //if strings.Contains(area,"产量") {
- // unit = "万吨"
- //} else {
- // unit = "%"
- //}
- item := &models.BaseFromOilchemIndex{
- IndexName: indexName,
- ClassifyId: 3,
- Unit: "吨",
- Frequency: "月度",
- Describe: "",
- DataTime: dataTime,
- Value: value,
- Sort: 0,
- CreateTime: time.Now(),
- ModifyTime: time.Now(),
- IndexNameStr: title,
- MarketName: area,
- }
- indexList = append(indexList,item)
- area = ""
- })
- })
- })
- //写入数据库
- err = PostHandleOilchem(indexList)
- if err != nil {
- utils.FileLog.Error(fmt.Sprintf("PostHandleOilchem err:%v",err))
- fmt.Println("PostHandleOilchem err",err)
- return
- }
- return
- }
|