wechat_platform.go 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. package llm
  2. import (
  3. "eta/eta_api/models/rag"
  4. "eta/eta_api/utils"
  5. "fmt"
  6. "html"
  7. "strconv"
  8. "time"
  9. )
  10. func AddWechatPlatform(item *rag.WechatPlatform) {
  11. var err error
  12. defer func() {
  13. if err != nil {
  14. utils.FileLog.Error("公众号入库后查找最新记录失败,err:%v", err)
  15. }
  16. }()
  17. if item.FakeId != `` {
  18. return
  19. }
  20. if item.ArticleLink == `` {
  21. return
  22. }
  23. articleLink := item.ArticleLink
  24. articleDetail, err := SearchByWechatArticle(item.ArticleLink)
  25. if err != nil {
  26. return
  27. }
  28. if articleDetail.Appuin == `` {
  29. err = fmt.Errorf("文章内未匹配到公众号唯一标识")
  30. return
  31. }
  32. wechatPlatform := new(rag.WechatPlatform)
  33. // 查找是否存在这个公众号id的
  34. wechatPlatformInfo, tmpErr := wechatPlatform.GetByFakeID(articleDetail.Appuin)
  35. if tmpErr != nil && !utils.IsErrNoRow(tmpErr) {
  36. err = tmpErr
  37. return
  38. }
  39. if tmpErr == nil {
  40. // 如果找到了,那么需要将当前的给移除掉
  41. err = item.Del()
  42. if err != nil {
  43. return
  44. }
  45. // 并将查出来的微信公众号摘出来的数据重新赋值
  46. item = wechatPlatformInfo
  47. } else if utils.IsErrNoRow(tmpErr) {
  48. // 如果没找到,那么就变更当前的信息
  49. item.FakeId = articleDetail.Appuin
  50. item.Nickname = articleDetail.Nickname
  51. //item.Alias = req.Alias
  52. item.RoundHeadImg = articleDetail.RoundHeadImg
  53. //item.ServiceType = req.ServiceType
  54. item.Signature = articleDetail.ProfileSignature
  55. //item.Verified = verified
  56. item.ModifyTime = time.Now()
  57. err = item.Update([]string{rag.WechatPlatformColumns.FakeID, rag.WechatPlatformColumns.Nickname, rag.WechatPlatformColumns.RoundHeadImg, rag.WechatPlatformColumns.Signature, rag.WechatPlatformColumns.ModifyTime})
  58. if err != nil {
  59. return
  60. }
  61. }
  62. // 把刚搜索的文章加入到指标库
  63. AddWechatArticle(item, articleLink, articleDetail, nil)
  64. return
  65. }
  66. // AddWechatArticle
  67. // @Description: 添加公众号文章入库
  68. // @author: Roc
  69. // @datetime 2025-03-05 13:24:14
  70. // @param item *rag.WechatPlatform
  71. // @param link string
  72. // @param articleDetail WechatArticleDataResp
  73. func AddWechatArticle(item *rag.WechatPlatform, articleLink string, articleDetail WechatArticleDataResp, articleMenu *ArticleMenu) {
  74. var err error
  75. defer func() {
  76. if err != nil {
  77. utils.FileLog.Error("公众号文章入库失败,文章链接:%s ,err:%v", articleLink, err)
  78. }
  79. }()
  80. obj := new(rag.WechatArticle)
  81. _, err = obj.GetByLink(articleLink)
  82. if err == nil {
  83. // 文章已经入库了,不需要重复入库
  84. return
  85. }
  86. // 如果不是 ErrNoRow 的时候,那么就是查询数据库出问题了,需要直接返回
  87. if !utils.IsErrNoRow(err) {
  88. return
  89. }
  90. // 这个时候,说明数据库中没有这个文章,那么需要文章入库
  91. err = nil
  92. var publishAt time.Time
  93. if articleDetail.CreateAt != `` {
  94. createAtInt, tmpErr := strconv.Atoi(articleDetail.CreateAt)
  95. if tmpErr == nil {
  96. publishAt = time.Unix(int64(createAtInt), 1000)
  97. }
  98. } else if articleMenu != nil {
  99. publishAt = time.Unix(int64(articleMenu.UpdateTime), 1000)
  100. }
  101. obj = &rag.WechatArticle{
  102. WechatArticleId: 0,
  103. WechatPlatformId: item.WechatPlatformId,
  104. FakeId: item.FakeId,
  105. Title: articleDetail.Title,
  106. Link: articleLink,
  107. CoverUrl: articleDetail.CoverUrl,
  108. Description: articleDetail.Desc,
  109. Content: html.EscapeString(articleDetail.HtmlContent),
  110. TextContent: articleDetail.TextContent,
  111. Country: articleDetail.CountryName,
  112. Province: articleDetail.ProvinceName,
  113. City: articleDetail.CityName,
  114. //Abstract: "",
  115. //ArticleCreateTime: createAt,
  116. ModifyTime: time.Now(),
  117. CreateTime: time.Now(),
  118. }
  119. if !publishAt.IsZero() {
  120. obj.ArticleCreateTime = publishAt
  121. }
  122. if articleMenu != nil {
  123. obj.Title = articleMenu.Title
  124. //obj.Link = articleMenu.Link
  125. obj.CoverUrl = articleMenu.Cover
  126. obj.Abstract = articleMenu.Digest
  127. }
  128. err = obj.Create()
  129. }
  130. // BeachAddWechatPlatform
  131. // @Description: 批量添加公众号文章
  132. // @author: Roc
  133. // @datetime 2025-03-05 15:05:07
  134. // @param item *rag.WechatPlatform
  135. // @return err error
  136. func BeachAddWechatPlatform(item *rag.WechatPlatform) (err error) {
  137. defer func() {
  138. fmt.Println("公众号文章批量入库完成")
  139. if err != nil {
  140. utils.FileLog.Error("公众号文章批量入库失败,err:%v", err)
  141. fmt.Println("公众号文章批量入库失败,err:", err)
  142. }
  143. }()
  144. if item.FakeId == `` {
  145. return
  146. }
  147. num := 10
  148. // 获取公众号的文章列表
  149. articleListResp, err := SearchByWechatArticleList(item.FakeId, num)
  150. if err != nil {
  151. return
  152. }
  153. for _, articleMenu := range articleListResp.List {
  154. articleDetail, tmpErr := SearchByWechatArticle(articleMenu.Link)
  155. if tmpErr != nil {
  156. err = tmpErr
  157. return
  158. }
  159. // 把刚搜索的文章加入到指标库
  160. AddWechatArticle(item, articleMenu.Link, articleDetail, &articleMenu)
  161. time.Sleep(10 * time.Second)
  162. }
  163. return
  164. }