Fix error where retweets were not parsing properly sometimes

This commit is contained in:
Alessio 2022-11-25 15:51:21 -05:00
parent 37525e58c0
commit 6830be3c87
4 changed files with 30 additions and 2 deletions

View File

@ -18,7 +18,7 @@ func (p Profile) SaveRetweet(r scraper.Retweet) error {
r.RetweetID, r.TweetID, r.RetweetedByID, r.RetweetedAt.Unix(), r.RetweetID, r.TweetID, r.RetweetedByID, r.RetweetedAt.Unix(),
) )
if err != nil { 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 return nil
} }

View File

@ -290,8 +290,15 @@ func (api_v2_tweet APIV2Tweet) ToTweetTrove() TweetTrove {
retweet := Retweet{} retweet := Retweet{}
var err error var err error
retweet.RetweetID = TweetID(api_v2_tweet.ID) 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.RetweetedByID = UserID(api_v2_tweet.APITweet.UserID)
retweet.RetweetedAt, err = TimestampFromString(api_v2_tweet.APITweet.CreatedAt) retweet.RetweetedAt, err = TimestampFromString(api_v2_tweet.APITweet.CreatedAt)
if err != nil { if err != nil {

View File

@ -659,3 +659,23 @@ func TestTweetWithWarning(t *testing.T) {
assert.Len(trove.Tweets, 2) assert.Len(trove.Tweets, 2)
assert.Len(trove.Users, 3) 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))
}

File diff suppressed because one or more lines are too long