package services import ( "errors" "fmt" "github.com/PuerkitoBio/goquery" "hongze/hongze_clpt/models" "hongze/hongze_clpt/utils" "html" "strconv" "strings" "unicode/utf8" ) func FixArticleImgUrl(body string) (contentSub string, err error) { r := strings.NewReader(string(body)) doc, err := goquery.NewDocumentFromReader(r) if err != nil { fmt.Println(err) } doc.Find("img").Each(func(i int, s *goquery.Selection) { src, _ := s.Attr("src") if i == 0 && src != "" { contentSub = src } }) return } //GetReportContentTextSubByarticle 解析文章内容 func GetReportContentTextSubByarticle(content, abstract string, articleId int) (contentSub string, err error) { var lenabstract int //如果不是研选就这么展示 if articleId < utils.SummaryArticleId { abstract = html.UnescapeString(abstract) doc, errdoc := goquery.NewDocumentFromReader(strings.NewReader(abstract)) if errdoc != nil { err = errdoc return } docabstract := doc.Text() lenabstract = utf8.RuneCountInString(docabstract) if lenabstract >= 20 { contentSub = docabstract return } else { contentSub, err = GetReportContentTextSub(content) } } else { contentSub, err = GetReportContentTextSub(content) } return } func GetReportContentTextSub(content string) (contentSub string, err error) { content = html.UnescapeString(content) doc, errdoc := goquery.NewDocumentFromReader(strings.NewReader(content)) if errdoc != nil { err = errdoc return } docText := doc.Text() bodyRune := []rune(docText) bodyRuneLen := len(bodyRune) body := string(bodyRune[:bodyRuneLen]) contentSub = body contentSub = strings.Replace(body, "Powered by Froala Editor", "", -1) contentSub = strings.Replace(body, "PoweredbyFroalaEditor", "", -1) contentSub = strings.Replace(body, " ", "", -1) return } func GetReportContentTextArticleBody(content string) (contentSub string) { contentSub = html.UnescapeString(content) contentSub = strings.Replace(contentSub, "

Powered by Froala Editor

", "", -1) contentSub = strings.Replace(contentSub, "pre", "div", -1) return } //HandleArticleCategoryImg 预处理文章的封面图片 func HandleArticleCategoryImg(list []*models.ArticleListResp) (items []*models.ArticleListResp, err error) { //研选的五张图片 detailResearch, e := models.GetConfigByCode("category_research_img_url") if e != nil { err = errors.New("获取研选的五张图片失败" + e.Error()) return } researchList := strings.Split(detailResearch.ConfigValue, "{|}") //对应分类的所图片 detailCategoryUrl, err := models.GetConfigByCode("category_map_img_url") if err != nil { err = errors.New("获取对应分类的所图片失败" + err.Error()) return } categoryUrlList := strings.Split(detailCategoryUrl.ConfigValue, "{|}") mapCategoryUrl := make(map[string]string) var categoryId string var imgUrlChart string for _, v := range categoryUrlList { vslice := strings.Split(v, "_") categoryId = vslice[0] imgUrlChart = vslice[len(vslice)-1] mapCategoryUrl[categoryId] = imgUrlChart } for k, v := range list { item := list[k] //如果文章一开始的内容是图片,优先展示第一张图片 newBody, _ := GetReportContentTextSubByarticle(item.Body, item.Annotation, item.ArticleId) list[k].Annotation = newBody list[k].Body = "" list[k].PublishDate = utils.StrTimeToTime(item.PublishDate).Format(utils.FormatDate) //时间字符串格式转时间格式 if item.Pv > 999 { list[k].Pv = 999 } //如果是研选系列的任意取五张图片的中的一张 if v.CategoryId == "0" || v.ArticleId > utils.SummaryArticleId { knum := v.ArticleId % 5 list[k].ImgUrlPc = researchList[knum] } else { list[k].ImgUrlPc = mapCategoryUrl[v.CategoryId] } if list[k].ArticleId < utils.SummaryArticleId { list[k].HttpUrl = utils.StrategyPlatform + strconv.Itoa(v.ArticleId) list[k].IsNeedJump = true } list[k].Source = 1 //添加行业默认图片 if v.ImgUrlPc == "" { if v.ChartPermissionName == utils.YI_YAO_NAME { list[k].ImgUrlPc = utils.YI_YAO_OTHER_IMG } else if v.ChartPermissionName == utils.XIAO_FEI_NAME { list[k].ImgUrlPc = utils.XIAO_FEI_OTHER_IMG } else if v.ChartPermissionName == utils.KE_JI_NAME { list[k].ImgUrlPc = utils.KE_JI_OTHER_IMG } else if v.ChartPermissionName == utils.ZHI_ZAO_NAME { list[k].ImgUrlPc = utils.ZHI_ZAO_OTHER_IMG } } } if len(list) == 0 { list = make([]*models.ArticleListResp, 0) } items = list return } //HandleArticleStock 处理报告关联的个股标签 func HandleArticleStock(stock string) (items []*models.ComapnyNameResp) { sliceSubjects := strings.Split(stock, "/") if len(sliceSubjects) > 0 { for _, vSubject := range sliceSubjects { sliceKuohao := strings.Split(vSubject, "(") //过滤括号 sliceXiahuaxian := strings.Split(sliceKuohao[0], "-") //过滤下划线 subject := sliceXiahuaxian[0] items = append(items, &models.ComapnyNameResp{ComapnyName: subject}) } } return }