|
@@ -0,0 +1,170 @@
|
|
|
+package services
|
|
|
+
|
|
|
+import (
|
|
|
+ "fmt"
|
|
|
+ "github.com/PuerkitoBio/goquery"
|
|
|
+ "hongze/hongze_cygx/models"
|
|
|
+ "hongze/hongze_cygx/utils"
|
|
|
+ "html"
|
|
|
+ "strconv"
|
|
|
+ "strings"
|
|
|
+)
|
|
|
+
|
|
|
+//同步策略文章
|
|
|
+func SyncTacticsList() {
|
|
|
+ var err error
|
|
|
+ defer func() {
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println("同步失败,Err:", err.Error())
|
|
|
+ }
|
|
|
+ }()
|
|
|
+ list, err := models.GetTacticsList()
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println("GetTacticsList Err:", err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ for k, v := range list {
|
|
|
+ fmt.Println(v.ArticleId)
|
|
|
+ if v.ArticleId == 3439 {
|
|
|
+ expertNumStr, expertContentStr, interviewDateStr := BodyAnalysis(v.Body)
|
|
|
+ fmt.Println(k,expertNumStr, expertContentStr, interviewDateStr)
|
|
|
+ }else{
|
|
|
+ continue
|
|
|
+ }
|
|
|
+
|
|
|
+ //判断是否已经存在
|
|
|
+ if v.ArticleId < 0 {
|
|
|
+ fmt.Println("参数错误")
|
|
|
+ return
|
|
|
+ }
|
|
|
+ count, err := models.GetArticleCountById(v.ArticleId)
|
|
|
+ if err != nil && err.Error() != utils.ErrNoRow() {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if count > 0 {
|
|
|
+ fmt.Println("modify")
|
|
|
+ expertNumStr, expertContentStr, interviewDateStr := BodyAnalysis(v.Body)
|
|
|
+ bodyText,_:=GetReportContentTextSub(v.Body)
|
|
|
+ updateParams := make(map[string]interface{})
|
|
|
+ updateParams["Title"] = v.Title
|
|
|
+ updateParams["TitleEn"] = v.TitleEn
|
|
|
+ updateParams["UpdateFrequency"] = v.UpdateFrequency
|
|
|
+ updateParams["CreateDate"] = v.CreateDate
|
|
|
+ updateParams["PublishDate"] = v.PublishDate
|
|
|
+ updateParams["Body"] = html.EscapeString(v.Body)
|
|
|
+ updateParams["BodyText"] = bodyText
|
|
|
+ updateParams["Abstract"] = html.EscapeString(v.Abstract)
|
|
|
+ updateParams["CategoryName"] = v.CategoryName
|
|
|
+ updateParams["SubCategoryName"] = v.SubCategoryName
|
|
|
+ updateParams["CategoryId"] = v.CategoryId
|
|
|
+ updateParams["PublishStatus"] = v.PublishStatus
|
|
|
+ updateParams["ExpertBackground"] = expertContentStr
|
|
|
+ updateParams["ExpertNumber"] = expertNumStr
|
|
|
+ updateParams["InterviewDate"] = interviewDateStr
|
|
|
+ updateParams["Department"] = v.Department
|
|
|
+ whereParam := map[string]interface{}{"article_id": v.ArticleId}
|
|
|
+ go models.UpdateByExpr(models.CygxArticle{}, whereParam, updateParams)
|
|
|
+ } else {
|
|
|
+ item := new(models.CygxArticle)
|
|
|
+ articleIdInt := v.ArticleId
|
|
|
+ //判断文章是否已经存在
|
|
|
+ existItem, err := models.GetArticleDetailById(articleIdInt)
|
|
|
+ if err != nil && err.Error() != utils.ErrNoRow() {
|
|
|
+ fmt.Println("GetArticleDetailById Err:" + err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if existItem != nil && existItem.ArticleId > 0 {
|
|
|
+ fmt.Println("exist", articleIdInt)
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ expertNumStr, expertContentStr, interviewDateStr := BodyAnalysis(v.Body)
|
|
|
+ item.ArticleId = articleIdInt
|
|
|
+ item.Title = v.Title
|
|
|
+ item.TitleEn = v.TitleEn
|
|
|
+ item.UpdateFrequency = v.UpdateFrequency
|
|
|
+ item.CreateDate = v.CreateDate
|
|
|
+ item.PublishDate = v.PublishDate
|
|
|
+ item.Body = html.EscapeString(v.Body)
|
|
|
+ item.Abstract = html.EscapeString(v.Abstract)
|
|
|
+ item.CategoryName = v.CategoryName
|
|
|
+ item.SubCategoryName = v.SubCategoryName
|
|
|
+ item.CategoryId = v.CategoryId
|
|
|
+ item.PublishStatus = v.PublishStatus
|
|
|
+ item.ExpertBackground = expertContentStr
|
|
|
+ item.ExpertNumber = expertNumStr
|
|
|
+ item.InterviewDate = interviewDateStr
|
|
|
+ item.Department = v.Department
|
|
|
+ item.ArticleIdMd5 = utils.MD5(strconv.Itoa(articleIdInt))
|
|
|
+ _, err = models.AddCygxArticle(item)
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println("AddCygxArticle Err:", err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+//body 解析
|
|
|
+func BodyAnalysis(body string) (expertNumStr, expertContentStr, interviewDateStr string) {
|
|
|
+ doc, err := goquery.NewDocumentFromReader(strings.NewReader(body))
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println("create doc err:", err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ var expertNumArr []string
|
|
|
+ var expertContentArr []string
|
|
|
+ var interviewDateArr []string
|
|
|
+
|
|
|
+ doc.Find("p").Each(func(i int, s *goquery.Selection) {
|
|
|
+ fmt.Println("get p")
|
|
|
+ contentTxt := s.Text()
|
|
|
+ if strings.Contains(contentTxt, "#访谈时间:") || strings.Contains(contentTxt, "访谈时间:") {
|
|
|
+ interviewDate := s.Next().Text()
|
|
|
+ interviewDateArr = append(interviewDateArr, interviewDate)
|
|
|
+ }
|
|
|
+ if strings.Contains(contentTxt, "#专家评价") || strings.Contains(contentTxt, "专家评价") {
|
|
|
+ expertContent := s.Next().Text()
|
|
|
+ if expertContent == "" {
|
|
|
+ expertContent = contentTxt
|
|
|
+ }
|
|
|
+ if expertContent != "" {
|
|
|
+ rightIndex := strings.Index(expertContent, ")")
|
|
|
+ if rightIndex == 0 {
|
|
|
+ rightIndex = strings.Index(expertContent, ")")
|
|
|
+ }
|
|
|
+ expertNum := expertContent[:rightIndex]
|
|
|
+ expertNum = strings.Replace(expertNum, "(", "", -1)
|
|
|
+ expertNum = strings.Replace(expertNum, "(", "", -1)
|
|
|
+ expertNum = strings.Replace(expertNum, "专家评价", "", -1)
|
|
|
+ if expertNum != "" {
|
|
|
+ expertNumArr = append(expertNumArr, expertNum)
|
|
|
+ rightIndex = rightIndex
|
|
|
+ expertContentStr := expertContent[rightIndex:]
|
|
|
+ expertContentStr = strings.Replace(expertContentStr, ")", "", -1)
|
|
|
+ expertContentStr = strings.TrimLeft(expertContentStr, ":")
|
|
|
+ expertContentStr = strings.TrimRight(expertContentStr, "(推荐")
|
|
|
+ expertContentArr = append(expertContentArr, expertContentStr)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ })
|
|
|
+
|
|
|
+
|
|
|
+ if len(expertNumArr) > 0 {
|
|
|
+ expertNumStr = expertNumArr[0]
|
|
|
+ if expertNumStr!="" {
|
|
|
+ expertNumStr = strings.Replace(expertNumStr, "#:", "", -1)
|
|
|
+ expertNumStr = strings.Replace(expertNumStr, "# ", "", -1)
|
|
|
+ expertNumStr = strings.Trim(expertNumStr, "")
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if len(expertContentArr) > 0 {
|
|
|
+ expertContentStr = expertContentArr[0]
|
|
|
+ }
|
|
|
+
|
|
|
+ if len(interviewDateArr) > 0 {
|
|
|
+ interviewDateStr = interviewDateArr[0]
|
|
|
+ }
|
|
|
+ return
|
|
|
+}
|