package placement import ( "regexp" "strings" ) var threadsPostURLRe = regexp.MustCompile(`(?i)threads\.(?:com|net)/@([^/]+)/post/([^/?#]+)`) type ParsedThreadsPost struct { Permalink string ExternalID string Author string Text string } func ParseThreadsPostFromWebResult(title, snippet, url string) (ParsedThreadsPost, bool) { permalink := normalizeThreadsPermalink(url) if permalink == "" { return ParsedThreadsPost{}, false } match := threadsPostURLRe.FindStringSubmatch(permalink) if len(match) < 3 { return ParsedThreadsPost{}, false } text := strings.TrimSpace(strings.Join([]string{strings.TrimSpace(title), strings.TrimSpace(snippet)}, " — ")) if len([]rune(text)) < 8 { return ParsedThreadsPost{}, false } return ParsedThreadsPost{ Permalink: permalink, ExternalID: match[2], Author: match[1], Text: text, }, true } func normalizeThreadsPermalink(raw string) string { raw = strings.TrimSpace(raw) if raw == "" { return "" } raw = strings.Split(raw, "?")[0] raw = strings.Split(raw, "#")[0] if threadsPostURLRe.MatchString(raw) { return raw } return "" }