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
|
|
|
}
|