haixunMaster/haixun-backend/internal/library/viral/mission_inspire_collect.go

67 lines
1.7 KiB
Go
Raw Permalink Normal View History

2026-06-25 08:20:03 +00:00
package viral
import (
"context"
"strings"
"time"
"haixun-backend/internal/library/placement"
"haixun-backend/internal/library/websearch"
)
const maxInspireTrendSnippets = 14
func CollectMissionInspireTrends(
ctx context.Context,
client websearch.Client,
member placement.MemberContext,
personaBrief, styleBenchmark string,
) []MissionInspireTrendSnippet {
if client == nil || !client.Enabled() {
return nil
}
queries := InspireTrendSearchQueries(personaBrief, styleBenchmark)
out := make([]MissionInspireTrendSnippet, 0, maxInspireTrendSnippets)
seen := map[string]struct{}{}
for _, query := range queries {
if len(out) >= maxInspireTrendSnippets {
break
}
res, err := client.Search(ctx, websearch.SearchOptions{
Query: query,
Limit: 5,
Mode: websearch.ModeKnowledgeExpand,
Country: member.BraveCountry,
SearchLang: member.BraveSearchLang,
UserLocation: member.ExaUserLocation,
StartPublishedDate: placement.FormatPublishedAfterISO(7, time.Now().UTC()),
})
if err != nil || res.Status != "success" || len(res.Results) == 0 {
continue
}
for _, item := range res.Results {
if len(out) >= maxInspireTrendSnippets {
break
}
title := strings.TrimSpace(item.Title)
snippet := strings.TrimSpace(item.Snippet)
if title == "" && snippet == "" {
continue
}
key := strings.ToLower(title + "|" + snippet)
if _, ok := seen[key]; ok {
continue
}
seen[key] = struct{}{}
out = append(out, MissionInspireTrendSnippet{
Query: query,
Title: title,
Snippet: snippet,
URL: strings.TrimSpace(item.URL),
})
}
}
return out
2026-06-25 09:34:28 +00:00
}