diff --git a/scraper/api_types_v2.go b/scraper/api_types_v2.go index 1c04222..8e5357a 100644 --- a/scraper/api_types_v2.go +++ b/scraper/api_types_v2.go @@ -452,6 +452,10 @@ func (e APIV2Entry) ToTweetTrove() TweetTrove { return ret } else if e.Content.EntryType == "TimelineTimelineItem" { + if e.Content.ItemContent.ItemType == "TimelineTombstone" { + // TODO: user feed tombstone entries + return NewTweetTrove() + } ret, err := e.Content.ItemContent.TweetResults.ToTweetTrove() // Handle tombstones in parent reply thread diff --git a/scraper/api_types_v2_test.go b/scraper/api_types_v2_test.go index edf4bf1..af2b309 100644 --- a/scraper/api_types_v2_test.go +++ b/scraper/api_types_v2_test.go @@ -584,6 +584,30 @@ func TestAPIV2TombstoneEntry(t *testing.T) { assert.Equal(tweet.ID, TweetID(1454515503242829830)) } +func TestAPIV2UserFeedTombstoneEntry(t *testing.T) { + assert := assert.New(t) + data, err := os.ReadFile("test_responses/api_v2/user_feed_tombstone_entry.json") + require.NoError(t, err) + + var entry APIV2Entry + err = json.Unmarshal(data, &entry) + require.NoError(t, err) + + trove := entry.ToTweetTrove() + assert.NoError(err) + // assert.Len(trove.Tweets, 1) + // assert.Len(trove.Users, 1) + assert.Len(trove.Retweets, 0) + + // tweet, is_ok := trove.Tweets[1670122897912786944] + // assert.True(is_ok) + // assert.Equal(tweet.ID, TweetID(1670122897912786944)) + // assert.Equal("age-restricted", tweet.TombstoneType) + // assert.NotEqual(UserID(0), tweet.UserID) + // user, is_ok := trove.Users[tweet.UserID] + // assert.True(user.IsIdFake) +} + func TestAPIV2ConversationThreadWithTombstones(t *testing.T) { assert := assert.New(t) data, err := os.ReadFile("test_responses/api_v2/conversation_thread_with_tombstones.json") diff --git a/scraper/test_responses/api_v2/user_feed_tombstone_entry.json b/scraper/test_responses/api_v2/user_feed_tombstone_entry.json new file mode 100644 index 0000000..310f332 --- /dev/null +++ b/scraper/test_responses/api_v2/user_feed_tombstone_entry.json @@ -0,0 +1 @@ +{"entryId":"tombstone-1670122897912786944","sortIndex":"1670122897912786944","content":{"entryType":"TimelineTimelineItem","itemContent":{"itemType":"TimelineTombstone","tombstoneDisplayType":"Inline","tombstoneInfo":{"text":"","richText":{"rtl":false,"text":"Age-restricted adult content. This content might not be appropriate for people under 18 years old. To view this media, you’ll need to log in to Twitter. Learn more","entities":[{"fromIndex":134,"toIndex":140,"ref":{"type":"TimelineUrl","url":"https://twitter.com","urlType":"ExternalUrl"}},{"fromIndex":153,"toIndex":163,"ref":{"type":"TimelineUrl","url":"https://help.twitter.com/rules-and-policies/notices-on-twitter","urlType":"ExternalUrl"}}]}}}}}