diff --git a/api/src/processing/services/twitter.js b/api/src/processing/services/twitter.js index a4f4505e..faf2406b 100644 --- a/api/src/processing/services/twitter.js +++ b/api/src/processing/services/twitter.js @@ -162,6 +162,19 @@ const extractGraphqlMedia = async (tweet, dispatcher, id, guestToken, cookie) => repostedTweet = baseTweet?.retweeted_status_result?.result.tweet.legacy.extended_entities; } + if (tweetResult.card?.legacy?.binding_values?.length) { + const card = JSON.parse(tweetResult.card.legacy.binding_values[0].value?.string_value); + + if (!["video_website", "image_website"].includes(card?.type) || + !card?.media_entities || + card?.component_objects?.media_1?.type !== "media") { + return; + } + + const mediaId = card.component_objects?.media_1?.data?.id; + return [card.media_entities[mediaId]]; + } + return (repostedTweet?.media || baseTweet?.extended_entities?.media); } diff --git a/api/src/util/tests/twitter.json b/api/src/util/tests/twitter.json index 4139e39d..b776a7b2 100644 --- a/api/src/util/tests/twitter.json +++ b/api/src/util/tests/twitter.json @@ -217,5 +217,14 @@ "code": 200, "status": "tunnel" } + }, + { + "name": "video in an ad card", + "url": "https://x.com/igorbrigadir/status/1611399816487084033?s=46", + "params": {}, + "expected": { + "code": 200, + "status": "redirect" + } } ]