From 1e048200bc6ca9624beaf6e673e1fec80e4c52f9 Mon Sep 17 00:00:00 2001 From: Alexander Sheiko Date: Wed, 6 Jan 2021 21:19:12 +0200 Subject: [PATCH] Fix pinned tweets (added to the beginning of the timeline) Close #23 --- types.go | 13 +++++++++++++ util.go | 18 ++++++++++++++++-- 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/types.go b/types.go index 3ff206f..04d11a3 100644 --- a/types.go +++ b/types.go @@ -146,6 +146,19 @@ type ( } `json:"content,omitempty"` } `json:"entries"` } `json:"addEntries"` + PinEntry struct { + Entry struct { + Content struct { + Item struct { + Content struct { + Tweet struct { + ID string `json:"id"` + } `json:"tweet"` + } `json:"content"` + } `json:"item"` + } `json:"content"` + } `json:"entry"` + } `json:"pinEntry,omitempty"` } `json:"instructions"` } `json:"timeline"` } diff --git a/util.go b/util.go index 53e2c24..ddafacf 100644 --- a/util.go +++ b/util.go @@ -84,8 +84,13 @@ func getTimeline(ctx context.Context, query string, maxTweetsNbr int, fetchFunc } if tweetsNbr < maxTweetsNbr { + if tweet.IsPin && nextCursor != "" { + continue + } nextCursor = next channel <- &Result{Tweet: *tweet} + } else { + break } tweetsNbr++ } @@ -192,9 +197,15 @@ func parseTimeline(timeline *timeline) ([]*Tweet, string) { } var cursor string + var pinnedTweet *Tweet var orderedTweets []*Tweet - if len(timeline.Timeline.Instructions) > 0 { - for _, entry := range timeline.Timeline.Instructions[0].AddEntries.Entries { + for _, instruction := range timeline.Timeline.Instructions { + if instruction.PinEntry.Entry.Content.Item.Content.Tweet.ID != "" { + if tweet, ok := tweets[instruction.PinEntry.Entry.Content.Item.Content.Tweet.ID]; ok { + pinnedTweet = &tweet + } + } + for _, entry := range instruction.AddEntries.Entries { if tweet, ok := tweets[entry.Content.Item.Content.Tweet.ID]; ok { orderedTweets = append(orderedTweets, &tweet) } @@ -203,5 +214,8 @@ func parseTimeline(timeline *timeline) ([]*Tweet, string) { } } } + if pinnedTweet != nil && len(orderedTweets) > 0 { + orderedTweets = append([]*Tweet{pinnedTweet}, orderedTweets...) + } return orderedTweets, cursor }