|
@@ -1,6 +1,7 @@
|
|
|
package services
|
|
|
|
|
|
import (
|
|
|
+ "bytes"
|
|
|
"eta/eta_api/cache"
|
|
|
"eta/eta_api/models"
|
|
|
"eta/eta_api/models/rag"
|
|
@@ -8,6 +9,7 @@ import (
|
|
|
"eta/eta_api/utils"
|
|
|
"eta/eta_api/utils/llm/eta_llm/eta_llm_http"
|
|
|
"fmt"
|
|
|
+ html2 "golang.org/x/net/html"
|
|
|
"html"
|
|
|
"os"
|
|
|
"path"
|
|
@@ -132,6 +134,13 @@ func AddWechatArticle(item *rag.WechatPlatform, articleLink string, articleDetai
|
|
|
publishAt = time.Unix(int64(articleMenu.UpdateTime), 1000)
|
|
|
}
|
|
|
|
|
|
+ content := articleDetail.HtmlContent
|
|
|
+
|
|
|
+ tmpContent, err := ReplaceHtmlImg(content)
|
|
|
+ if tmpContent != `` {
|
|
|
+ content = tmpContent
|
|
|
+ }
|
|
|
+
|
|
|
obj = &rag.WechatArticle{
|
|
|
WechatArticleId: 0,
|
|
|
WechatPlatformId: item.WechatPlatformId,
|
|
@@ -140,7 +149,7 @@ func AddWechatArticle(item *rag.WechatPlatform, articleLink string, articleDetai
|
|
|
Link: articleLink,
|
|
|
CoverUrl: articleDetail.CoverUrl,
|
|
|
Description: articleDetail.Desc,
|
|
|
- Content: html.EscapeString(articleDetail.HtmlContent),
|
|
|
+ Content: html.EscapeString(content),
|
|
|
TextContent: articleDetail.TextContent,
|
|
|
Country: articleDetail.CountryName,
|
|
|
Province: articleDetail.ProvinceName,
|
|
@@ -163,7 +172,7 @@ func AddWechatArticle(item *rag.WechatPlatform, articleLink string, articleDetai
|
|
|
err = obj.Create()
|
|
|
|
|
|
|
|
|
- go replaceWechatArticlePic(obj)
|
|
|
+ go replaceWechatArticleCoverPic(obj)
|
|
|
|
|
|
|
|
|
go cache.AddWechatArticleLlmOpToCache(item.WechatPlatformId, ``)
|
|
@@ -525,12 +534,12 @@ func replaceWechatPlatformPic(item *rag.WechatPlatform) {
|
|
|
|
|
|
}
|
|
|
|
|
|
-
|
|
|
+
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-func replaceWechatArticlePic(item *rag.WechatArticle) {
|
|
|
+func replaceWechatArticleCoverPic(item *rag.WechatArticle) {
|
|
|
var err error
|
|
|
defer func() {
|
|
|
if err != nil {
|
|
@@ -550,6 +559,33 @@ func replaceWechatArticlePic(item *rag.WechatArticle) {
|
|
|
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+func ReplaceWechatArticlePic(item *rag.WechatArticle) {
|
|
|
+ var err error
|
|
|
+ defer func() {
|
|
|
+ if err != nil {
|
|
|
+ utils.FileLog.Error("替换公众号头像失败,err:%v", err)
|
|
|
+ fmt.Println("替换公众号头像失败,err:", err)
|
|
|
+ }
|
|
|
+ }()
|
|
|
+ if item.Content == `` {
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ content, err := ReplaceHtmlImg(html.UnescapeString(item.Content))
|
|
|
+ if err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ item.Content = html.EscapeString(content)
|
|
|
+ err = item.Update([]string{"content"})
|
|
|
+
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
|
|
|
|
|
|
|
|
@@ -571,8 +607,7 @@ func downloadWxPicAndUploadToOss(wxPicUrl, source string) (resourceUrl string, e
|
|
|
return
|
|
|
}
|
|
|
ext := path.Ext(localFilePath)
|
|
|
- randStr := utils.GetRandStringNoSpecialChar(28)
|
|
|
- fileName := randStr + ext
|
|
|
+ fileName := fmt.Sprintf(`%s%s%s`, time.Now().Format(utils.FormatShortDateTimeUnSpace), utils.GetRandStringNoSpecialChar(16), ext)
|
|
|
|
|
|
savePath := fmt.Sprintf(`%swx/%s/%s%s`, utils.UploadDir, source, time.Now().Format("200601/20060102/"), fileName)
|
|
|
resourceUrl, err = ossClient.UploadFile(fileName, localFilePath, savePath)
|
|
@@ -584,3 +619,58 @@ func downloadWxPicAndUploadToOss(wxPicUrl, source string) (resourceUrl string, e
|
|
|
return
|
|
|
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+func ReplaceHtmlImg(htmlStr string) (newHtml string, err error) {
|
|
|
+ doc, err := html2.Parse(strings.NewReader(htmlStr))
|
|
|
+ if err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ handleNode(doc)
|
|
|
+
|
|
|
+
|
|
|
+ var buf bytes.Buffer
|
|
|
+ if err = html2.Render(&buf, doc); err != nil {
|
|
|
+ fmt.Println(err)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ newHtml = buf.String()
|
|
|
+
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+func handleNode(n *html2.Node) {
|
|
|
+ if n.Type == html2.ElementNode {
|
|
|
+ if n.Data == "img" {
|
|
|
+ for k, attr := range n.Attr {
|
|
|
+
|
|
|
+ if n.Data == "img" && attr.Key == "src" {
|
|
|
+ resourceUrl, tmpErr := downloadWxPicAndUploadToOss(attr.Val, `article`)
|
|
|
+ if tmpErr != nil {
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ attr.Val = resourceUrl
|
|
|
+ }
|
|
|
+ n.Attr[k] = attr
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ for c := n.FirstChild; c != nil; c = c.NextSibling {
|
|
|
+ handleNode(c)
|
|
|
+ }
|
|
|
+}
|