diff --git a/tweets_test.go b/tweets_test.go index fe66cf8..a6d687b 100644 --- a/tweets_test.go +++ b/tweets_test.go @@ -94,3 +94,21 @@ func TestGetTweet(t *testing.T) { } } } + +func TestRetweet(t *testing.T) { + sample := Retweet{ + ID: "1359151057872580612", + TimeParsed: time.Date(2021, 02, 9, 14, 43, 58, 0, time.FixedZone("UTC", 0)), + Timestamp: 1612881838, + UserID: "773578328498372608", + Username: "TwitterTogether", + } + tweet, err := defaultScraper.GetTweet("1362849141248974853") + if err != nil { + t.Error(err) + } else { + if diff := cmp.Diff(sample, tweet.Retweet); diff != "" { + t.Error("Resulting retweet does not match the sample", diff) + } + } +} diff --git a/types.go b/types.go index 04d11a3..73795ef 100644 --- a/types.go +++ b/types.go @@ -10,6 +10,15 @@ type ( URL string } + // Retweet type + Retweet struct { + ID string + TimeParsed time.Time + Timestamp int64 + UserID string + Username string + } + // Tweet type. Tweet struct { Hashtags []string @@ -24,6 +33,7 @@ type ( Photos []string Replies int Retweets int + Retweet Retweet Text string TimeParsed time.Time Timestamp int64 diff --git a/util.go b/util.go index ddafacf..69486b3 100644 --- a/util.go +++ b/util.go @@ -129,6 +129,18 @@ func parseTimeline(timeline *timeline) ([]*Tweet, string) { } if tweet.RetweetedStatusIDStr != "" { tw.IsRetweet = true + if retweet, ok := timeline.GlobalObjects.Tweets[tweet.RetweetedStatusIDStr]; ok { + tw.Retweet = Retweet{ + ID: tweet.RetweetedStatusIDStr, + UserID: retweet.UserIDStr, + Username: timeline.GlobalObjects.Users[retweet.UserIDStr].ScreenName, + } + tm, err := time.Parse(time.RubyDate, retweet.CreatedAt) + if err == nil { + tw.Retweet.TimeParsed = tm + tw.Retweet.Timestamp = tm.Unix() + } + } } for _, pinned := range timeline.GlobalObjects.Users[tweet.UserIDStr].PinnedTweetIdsStr {