diff --git a/persistence/retweet_queries.go b/persistence/retweet_queries.go
index c197728..78d3d37 100644
--- a/persistence/retweet_queries.go
+++ b/persistence/retweet_queries.go
@@ -18,7 +18,7 @@ func (p Profile) SaveRetweet(r scraper.Retweet) error {
r.RetweetID, r.TweetID, r.RetweetedByID, r.RetweetedAt.Unix(),
)
if err != nil {
- return fmt.Errorf("Error executing SaveRetweet(%d):\n %w", r.RetweetID, err)
+ return fmt.Errorf("Error executing SaveRetweet(%#v):\n %w", r, err)
}
return nil
}
diff --git a/scraper/api_types_v2.go b/scraper/api_types_v2.go
index 6868ee3..cfd8e21 100644
--- a/scraper/api_types_v2.go
+++ b/scraper/api_types_v2.go
@@ -290,8 +290,15 @@ func (api_v2_tweet APIV2Tweet) ToTweetTrove() TweetTrove {
retweet := Retweet{}
var err error
+
retweet.RetweetID = TweetID(api_v2_tweet.ID)
- retweet.TweetID = TweetID(api_v2_tweet.RetweetedStatusResult.Result.ID)
+ if api_v2_tweet.RetweetedStatusResult.Result.Legacy.ID == 0 && api_v2_tweet.RetweetedStatusResult.Result.Tweet.Legacy.ID != 0 {
+ // Tweet is a "TweetWithVisibilityResults" (See above comment for more).
+ retweet.TweetID = TweetID(api_v2_tweet.RetweetedStatusResult.Result.Tweet.ID)
+ } else {
+ retweet.TweetID = TweetID(api_v2_tweet.RetweetedStatusResult.Result.ID)
+ }
+
retweet.RetweetedByID = UserID(api_v2_tweet.APITweet.UserID)
retweet.RetweetedAt, err = TimestampFromString(api_v2_tweet.APITweet.CreatedAt)
if err != nil {
diff --git a/scraper/api_types_v2_test.go b/scraper/api_types_v2_test.go
index 9817c1f..a39bbc0 100644
--- a/scraper/api_types_v2_test.go
+++ b/scraper/api_types_v2_test.go
@@ -659,3 +659,23 @@ func TestTweetWithWarning(t *testing.T) {
assert.Len(trove.Tweets, 2)
assert.Len(trove.Users, 3)
}
+
+func TestRetweetWithVisibilityResults(t *testing.T) {
+ assert := assert.New(t)
+ require := require.New(t)
+ data, err := os.ReadFile("test_responses/api_v2/retweet_with_visibility_results.json")
+ require.NoError(err)
+ var tweet_result APIV2Result
+ err = json.Unmarshal(data, &tweet_result)
+ require.NoError(err)
+
+ trove := tweet_result.ToTweetTrove(true)
+
+ assert.Len(trove.Retweets, 1)
+ assert.Len(trove.Tweets, 1)
+ assert.Len(trove.Users, 2)
+
+ rt, is_ok := trove.Retweets[1595999178593034241]
+ require.True(is_ok)
+ assert.Equal(rt.TweetID, TweetID(1595973736833892356))
+}
diff --git a/scraper/test_responses/api_v2/retweet_with_visibility_results.json b/scraper/test_responses/api_v2/retweet_with_visibility_results.json
new file mode 100644
index 0000000..c6eb1a7
--- /dev/null
+++ b/scraper/test_responses/api_v2/retweet_with_visibility_results.json
@@ -0,0 +1 @@
+{"result":{"__typename":"TweetWithVisibilityResults","tweet":{"rest_id":"1595999178593034241","core":{"user_results":{"result":{"__typename":"User","id":"VXNlcjo0NDA2NzI5OA==","rest_id":"44067298","affiliates_highlighted_label":{},"has_nft_avatar":false,"legacy":{"created_at":"Tue Jun 02 05:35:52 +0000 2009","default_profile":false,"default_profile_image":false,"description":"Author of Dear Reader, The New Right & The Anarchist Handbook\nHost of \"YOUR WELCOME\" \nSubject of Ego & Hubris by Harvey Pekar\nHe/Him ⚑\n@SheathUnderwear Model","entities":{"description":{"urls":[]},"url":{"urls":[{"display_url":"amzn.to/3oInafv","expanded_url":"https://amzn.to/3oInafv","url":"https://t.co/7VDFOOtFK2","indices":[0,23]}]}},"fast_followers_count":0,"favourites_count":4561,"followers_count":533192,"friends_count":980,"has_custom_timelines":false,"is_translator":false,"listed_count":1780,"location":"Austin","media_count":11576,"name":"Michael Malice","normal_followers_count":533192,"pinned_tweet_ids_str":["1596175658530766848"],"profile_banner_extensions":{"mediaColor":{"r":{"ok":{"palette":[{"percentage":48.49,"rgb":{"blue":43,"green":38,"red":231}},{"percentage":21.58,"rgb":{"blue":225,"green":220,"red":221}},{"percentage":11.92,"rgb":{"blue":22,"green":19,"red":32}},{"percentage":4.11,"rgb":{"blue":147,"green":125,"red":195}},{"percentage":3.05,"rgb":{"blue":168,"green":179,"red":155}}]}}}},"profile_banner_url":"https://pbs.twimg.com/profile_banners/44067298/1664774013","profile_image_extensions":{"mediaColor":{"r":{"ok":{"palette":[{"percentage":50.78,"rgb":{"blue":249,"green":247,"red":246}},{"percentage":17.4,"rgb":{"blue":51,"green":51,"red":205}},{"percentage":9.43,"rgb":{"blue":124,"green":139,"red":210}},{"percentage":6.38,"rgb":{"blue":47,"green":63,"red":116}},{"percentage":3.17,"rgb":{"blue":65,"green":45,"red":46}}]}}}},"profile_image_url_https":"https://pbs.twimg.com/profile_images/1415820415314931715/_VVX4GI8_normal.jpg","profile_interstitial_type":"","protected":false,"screen_name":"michaelmalice","statuses_count":151386,"translator_type":"none","url":"https://t.co/7VDFOOtFK2","verified":true,"withheld_in_countries":[]},"super_follow_eligible":false,"super_followed_by":false,"super_following":false}}},"legacy":{"created_at":"Fri Nov 25 04:33:51 +0000 2022","conversation_id_str":"1595999178593034241","display_text_range":[0,91],"entities":{"user_mentions":[{"id_str":"44196397","name":"Elon Musk","screen_name":"elonmusk","indices":[3,12]},{"id_str":"51241574","name":"The Associated Press","screen_name":"AP","indices":[14,17]}],"urls":[],"hashtags":[],"symbols":[]},"favorite_count":0,"favorited":false,"full_text":"RT @elonmusk: @AP AP is such an expert in misinformation. Twitter couldn’t hope to compete!","is_quote_status":false,"lang":"en","limited_actions":"soft_nudge_with_quote_tweet","quote_count":0,"reply_count":0,"retweet_count":22599,"retweeted":false,"source":"Twitter Web App","user_id_str":"44067298","id_str":"1595999178593034241","retweeted_status_result":{"result":{"__typename":"TweetWithVisibilityResults","tweet":{"rest_id":"1595973736833892356","core":{"user_results":{"result":{"__typename":"User","id":"VXNlcjo0NDE5NjM5Nw==","rest_id":"44196397","affiliates_highlighted_label":{},"has_nft_avatar":false,"legacy":{"created_at":"Tue Jun 02 20:12:29 +0000 2009","default_profile":false,"default_profile_image":false,"description":"","entities":{"description":{"urls":[]}},"fast_followers_count":0,"favourites_count":15313,"followers_count":118940533,"friends_count":130,"has_custom_timelines":true,"is_translator":false,"listed_count":103548,"location":"","media_count":1305,"name":"Elon Musk","normal_followers_count":118940533,"pinned_tweet_ids_str":[],"profile_banner_extensions":{"mediaColor":{"r":{"ok":{"palette":[{"percentage":70.33,"rgb":{"blue":17,"green":18,"red":18}},{"percentage":10.76,"rgb":{"blue":120,"green":121,"red":122}},{"percentage":10.72,"rgb":{"blue":49,"green":66,"red":118}},{"percentage":3.51,"rgb":{"blue":79,"green":57,"red":41}},{"percentage":0.98,"rgb":{"blue":39,"green":67,"red":74}}]}}}},"profile_banner_url":"https://pbs.twimg.com/profile_banners/44196397/1576183471","profile_image_extensions":{"mediaColor":{"r":{"ok":{"palette":[{"percentage":44.12,"rgb":{"blue":224,"green":192,"red":164}},{"percentage":20.2,"rgb":{"blue":43,"green":44,"red":62}},{"percentage":18.21,"rgb":{"blue":148,"green":175,"red":240}},{"percentage":5.42,"rgb":{"blue":26,"green":19,"red":92}},{"percentage":4.07,"rgb":{"blue":43,"green":32,"red":190}}]}}}},"profile_image_url_https":"https://pbs.twimg.com/profile_images/1590968738358079488/IY9Gx6Ok_normal.jpg","profile_interstitial_type":"","protected":false,"screen_name":"elonmusk","statuses_count":20735,"translator_type":"none","verified":true,"withheld_in_countries":[]},"super_follow_eligible":false,"super_followed_by":false,"super_following":false}}},"legacy":{"created_at":"Fri Nov 25 02:52:45 +0000 2022","conversation_id_str":"1595886746520244226","display_text_range":[4,77],"entities":{"user_mentions":[{"id_str":"51241574","name":"The Associated Press","screen_name":"AP","indices":[0,3]}],"urls":[],"hashtags":[],"symbols":[]},"favorite_count":221577,"favorited":false,"full_text":"@AP AP is such an expert in misinformation. Twitter couldn’t hope to compete!","in_reply_to_screen_name":"AP","in_reply_to_status_id_str":"1595886746520244226","in_reply_to_user_id_str":"51241574","is_quote_status":false,"lang":"en","limited_actions":"soft_nudge_with_quote_tweet","quote_count":1167,"reply_count":7515,"retweet_count":22599,"retweeted":false,"source":"Twitter for iPhone","user_id_str":"44196397","id_str":"1595973736833892356"}}}}}}}}