Skip to content

Commit

Permalink
Always add field with XMA fetch status
Browse files Browse the repository at this point in the history
  • Loading branch information
tulir committed Feb 17, 2024
1 parent 3cd7905 commit 7f24ceb
Showing 1 changed file with 26 additions and 1 deletion.
27 changes: 26 additions & 1 deletion msgconv/from-meta.go
Original file line number Diff line number Diff line change
Expand Up @@ -371,6 +371,7 @@ func removeLPHP(addr string) string {
func (mc *MessageConverter) fetchFullXMA(ctx context.Context, att *table.WrappedXMA, minimalConverted *ConvertedMessagePart) *ConvertedMessagePart {
ig := mc.GetClient(ctx).Instagram
if att.CTA == nil || ig == nil {
minimalConverted.Extra["fi.mau.meta.xma_fetch_status"] = "unsupported"
return minimalConverted
}
log := zerolog.Ctx(ctx)
Expand All @@ -386,15 +387,20 @@ func (mc *MessageConverter) fetchFullXMA(ctx context.Context, att *table.Wrapped
minimalConverted.Extra["external_url"] = externalURL
if !mc.ShouldFetchXMA(ctx) {
log.Debug().Msg("Not fetching XMA media")
minimalConverted.Extra["fi.mau.meta.xma_fetch_status"] = "skip"
return minimalConverted
}

log.Trace().Any("cta_data", att.CTA).Msg("Fetching XMA media from CTA data")
resp, err := ig.FetchMedia(strconv.FormatInt(att.CTA.TargetId, 10), att.CTA.NativeUrl)
if err != nil {
log.Err(err).Int64("target_id", att.CTA.TargetId).Msg("Failed to fetch XMA media")
minimalConverted.Extra["fi.mau.meta.xma_fetch_status"] = "fetch fail"
return minimalConverted
} else if len(resp.Items) == 0 {
log.Warn().Int64("target_id", att.CTA.TargetId).Msg("Got empty XMA media response")
minimalConverted.Extra["fi.mau.meta.xma_fetch_status"] = "empty response"
return minimalConverted
} else {
log.Trace().Int64("target_id", att.CTA.TargetId).Any("response", resp).Msg("Fetched XMA media")
log.Debug().Msg("Fetched XMA media")
Expand All @@ -420,6 +426,7 @@ func (mc *MessageConverter) fetchFullXMA(ctx context.Context, att *table.Wrapped
if externalURL != "" {
secondConverted.Extra["external_url"] = externalURL
}
secondConverted.Extra["fi.mau.meta.xma_fetch_status"] = "success"
return secondConverted
}
case strings.HasPrefix(att.CTA.ActionUrl, "/stories/direct/"):
Expand All @@ -428,13 +435,18 @@ func (mc *MessageConverter) fetchFullXMA(ctx context.Context, att *table.Wrapped
minimalConverted.Extra["external_url"] = externalURL
if !mc.ShouldFetchXMA(ctx) {
log.Debug().Msg("Not fetching XMA media")
minimalConverted.Extra["fi.mau.meta.xma_fetch_status"] = "skip"
return minimalConverted
}

if match := reelActionURLRegex.FindStringSubmatch(att.CTA.ActionUrl); len(match) != 3 {
log.Warn().Str("action_url", att.CTA.ActionUrl).Msg("Failed to parse story action URL")
minimalConverted.Extra["fi.mau.meta.xma_fetch_status"] = "parse fail"
return minimalConverted
} else if resp, err := ig.FetchReel([]string{match[2]}, match[1]); err != nil {
log.Err(err).Str("action_url", att.CTA.ActionUrl).Msg("Failed to fetch XMA story")
minimalConverted.Extra["fi.mau.meta.xma_fetch_status"] = "fetch fail"
return minimalConverted
} else if reel, ok := resp.Reels[match[2]]; !ok {
log.Trace().
Str("action_url", att.CTA.ActionUrl).
Expand All @@ -446,6 +458,8 @@ func (mc *MessageConverter) fetchFullXMA(ctx context.Context, att *table.Wrapped
Str("media_id", match[1]).
Str("response_status", resp.Status).
Msg("Got empty XMA story response")
minimalConverted.Extra["fi.mau.meta.xma_fetch_status"] = "empty response"
return minimalConverted
} else {
log.Trace().
Str("action_url", att.CTA.ActionUrl).
Expand All @@ -472,6 +486,7 @@ func (mc *MessageConverter) fetchFullXMA(ctx context.Context, att *table.Wrapped
Str("media_id", match[1]).
Strs("found_ids", foundIDs).
Msg("Failed to find exact item in fetched XMA story")
minimalConverted.Extra["fi.mau.meta.xma_fetch_status"] = "item not found in response"
return minimalConverted
}
log.Debug().Msg("Fetched XMA story and found exact item")
Expand All @@ -488,6 +503,7 @@ func (mc *MessageConverter) fetchFullXMA(ctx context.Context, att *table.Wrapped
if externalURL != "" {
secondConverted.Extra["external_url"] = externalURL
}
secondConverted.Extra["fi.mau.meta.xma_fetch_status"] = "success"
return secondConverted
}
case strings.HasPrefix(att.CTA.ActionUrl, "/stories/"):
Expand All @@ -496,13 +512,18 @@ func (mc *MessageConverter) fetchFullXMA(ctx context.Context, att *table.Wrapped
minimalConverted.Extra["external_url"] = externalURL
if !mc.ShouldFetchXMA(ctx) {
log.Debug().Msg("Not fetching XMA media")
minimalConverted.Extra["fi.mau.meta.xma_fetch_status"] = "skip"
return minimalConverted
}

if match := reelActionURLRegex2.FindStringSubmatch(att.CTA.ActionUrl); len(match) != 3 {
log.Warn().Str("action_url", att.CTA.ActionUrl).Msg("Failed to parse story action URL (type 2)")
minimalConverted.Extra["fi.mau.meta.xma_fetch_status"] = "parse fail"
return minimalConverted
} else if resp, err := ig.FetchReel([]string{match[2]}, ""); err != nil {
log.Err(err).Str("action_url", att.CTA.ActionUrl).Msg("Failed to fetch XMA story (type 2)")
minimalConverted.Extra["fi.mau.meta.xma_fetch_status"] = "fetch fail"
return minimalConverted
} else if reel, ok := resp.Reels[match[2]]; !ok {
log.Trace().
Str("action_url", att.CTA.ActionUrl).
Expand All @@ -514,6 +535,8 @@ func (mc *MessageConverter) fetchFullXMA(ctx context.Context, att *table.Wrapped
Str("media_id", match[1]).
Str("response_status", resp.Status).
Msg("Got empty XMA story response (type 2)")
minimalConverted.Extra["fi.mau.meta.xma_fetch_status"] = "empty response"
return minimalConverted
} else {
log.Trace().
Str("action_url", att.CTA.ActionUrl).
Expand All @@ -537,15 +560,17 @@ func (mc *MessageConverter) fetchFullXMA(ctx context.Context, att *table.Wrapped
if externalURL != "" {
secondConverted.Extra["external_url"] = externalURL
}
secondConverted.Extra["fi.mau.meta.xma_fetch_status"] = "success"
return secondConverted
}
default:
log.Debug().
Any("cta_data", att.CTA).
Any("xma_data", att.LSInsertXmaAttachment).
Msg("Unrecognized CTA data")
minimalConverted.Extra["fi.mau.meta.xma_fetch_status"] = "unrecognized"
return minimalConverted
}
return minimalConverted
}

var instagramProfileURLRegex = regexp.MustCompile(`^https://www.instagram.com/([a-z0-9._]{1,30})$`)
Expand Down

0 comments on commit 7f24ceb

Please sign in to comment.