51 lines
1.2 KiB
Go
51 lines
1.2 KiB
Go
package placement
|
|
|
|
import (
|
|
"context"
|
|
"strings"
|
|
|
|
libthreads "haixun-backend/internal/library/threadsapi"
|
|
)
|
|
|
|
// PreferReplyExternalID keeps a numeric Threads media id when merging scan rows.
|
|
func PreferReplyExternalID(existing, incoming string) string {
|
|
a := strings.TrimSpace(existing)
|
|
b := strings.TrimSpace(incoming)
|
|
if libthreads.IsNumericMediaID(a) {
|
|
return a
|
|
}
|
|
if libthreads.IsNumericMediaID(b) {
|
|
return b
|
|
}
|
|
if b != "" {
|
|
return b
|
|
}
|
|
return a
|
|
}
|
|
|
|
// EnrichDiscoverPostsMediaIDs resolves shortcode-only crawler rows via Threads API when possible.
|
|
func EnrichDiscoverPostsMediaIDs(ctx context.Context, accessToken string, posts []DiscoverPost) []DiscoverPost {
|
|
token := strings.TrimSpace(accessToken)
|
|
if token == "" || len(posts) == 0 {
|
|
return posts
|
|
}
|
|
client := libthreads.NewClient(token)
|
|
out := make([]DiscoverPost, len(posts))
|
|
copy(out, posts)
|
|
for i := range out {
|
|
if libthreads.IsNumericMediaID(out[i].ExternalID) {
|
|
continue
|
|
}
|
|
id, err := client.ResolveReplyMedia(ctx, libthreads.ResolveReplyMediaInput{
|
|
ExternalID: out[i].ExternalID,
|
|
Permalink: out[i].Permalink,
|
|
HintText: out[i].Text,
|
|
})
|
|
if err != nil || !libthreads.IsNumericMediaID(id) {
|
|
continue
|
|
}
|
|
out[i].ExternalID = id
|
|
}
|
|
return out
|
|
}
|