From 412574e46fa20414aeb5bcf9a6615a0776a597a0 Mon Sep 17 00:00:00 2001 From: Alessio Date: Fri, 25 Nov 2022 13:22:20 -0500 Subject: [PATCH] Fix parsing of spaces in APIv2; improve no-worsening of Spaces --- persistence/space_queries.go | 4 ++-- persistence/space_queries_test.go | 9 +++++++++ scraper/api_types_v2.go | 9 ++++++++- scraper/api_types_v2_test.go | 10 +++++++--- 4 files changed, 26 insertions(+), 6 deletions(-) diff --git a/persistence/space_queries.go b/persistence/space_queries.go index 55d65e0..b09af86 100644 --- a/persistence/space_queries.go +++ b/persistence/space_queries.go @@ -27,11 +27,11 @@ func (p Profile) SaveSpace(s scraper.Space) error { short_url=case when short_url == "" then :short_url else short_url end, state=:state, title=:title, - updated_at=:updated_at, + updated_at=max(:updated_at, updated_at), is_available_for_replay=:is_available_for_replay, replay_watch_count=:replay_watch_count, live_listeners_count=:live_listeners_count, - is_details_fetched=:is_details_fetched + is_details_fetched=(is_details_fetched or :is_details_fetched) `, &s) if err != nil { return fmt.Errorf("Error saving space (space ID %q, value: %#v):\n %w", s.ID, s, err) diff --git a/persistence/space_queries_test.go b/persistence/space_queries_test.go index a9037a5..10d2747 100644 --- a/persistence/space_queries_test.go +++ b/persistence/space_queries_test.go @@ -38,8 +38,11 @@ func TestNoWorseningSpace(t *testing.T) { space := create_space_from_id(rand.Int()) space.ShortUrl = "Some Short Url" + space.Title = "Debating Somebody" space.CreatedAt = scraper.TimestampFromUnix(1000) + space.UpdatedAt = scraper.TimestampFromUnix(2000) space.CreatedById = scraper.UserID(-1) + space.IsDetailsFetched = true // Save the space err := profile.SaveSpace(space) @@ -47,8 +50,11 @@ func TestNoWorseningSpace(t *testing.T) { // Worsen the space, then re-save space.ShortUrl = "" + space.Title = "" space.CreatedAt = scraper.TimestampFromUnix(0) + space.UpdatedAt = scraper.TimestampFromUnix(0) space.CreatedById = scraper.UserID(0) + space.IsDetailsFetched = false err = profile.SaveSpace(space) require.NoError(err) @@ -57,6 +63,9 @@ func TestNoWorseningSpace(t *testing.T) { require.NoError(err) assert.Equal(new_space.ShortUrl, "Some Short Url") + assert.Equal(new_space.Title, "Debating Somebody") assert.Equal(new_space.CreatedAt, scraper.TimestampFromUnix(1000)) + assert.Equal(new_space.UpdatedAt, scraper.TimestampFromUnix(2000)) assert.Equal(new_space.CreatedById, scraper.UserID(-1)) + assert.True(new_space.IsDetailsFetched) } diff --git a/scraper/api_types_v2.go b/scraper/api_types_v2.go index 0cee0be..6868ee3 100644 --- a/scraper/api_types_v2.go +++ b/scraper/api_types_v2.go @@ -249,7 +249,14 @@ func (api_result APIV2Result) ToTweetTrove(ignore_null_entries bool) TweetTrove ret.Tweets[main_tweet.ID] = main_tweet } else if api_result.Result.Card.Legacy.Name == "3691233323:audiospace" { space := api_result.Result.Card.ParseAsSpace() - main_tweet.Spaces = []Space{space} + // Attach it to the Tweet that linked it + main_tweet.SpaceID = space.ID + // Put it in the trove; avoid clobbering + if existing_space, is_ok := ret.Spaces[space.ID]; !is_ok || !existing_space.IsDetailsFetched { + ret.Spaces[space.ID] = space + } + + // main_tweet.Spaces = []Space{space} // Remove it from the Urls for i, url := range main_tweet.Urls { diff --git a/scraper/api_types_v2_test.go b/scraper/api_types_v2_test.go index fd67719..9817c1f 100644 --- a/scraper/api_types_v2_test.go +++ b/scraper/api_types_v2_test.go @@ -444,6 +444,7 @@ func TestAPIV2ParseTweetWithPoll(t *testing.T) { */ func TestAPIV2ParseTweetWithSpace(t *testing.T) { assert := assert.New(t) + require := require.New(t) data, err := os.ReadFile("test_responses/api_v2/tweet_with_audiospaces_card.json") if err != nil { panic(err) @@ -457,11 +458,14 @@ func TestAPIV2ParseTweetWithSpace(t *testing.T) { assert.Len(trove.Tweets, 1) tweet, ok := trove.Tweets[1497647006445146113] - require.True(t, ok) + require.True(ok) assert.Len(tweet.Urls, 0) - assert.Len(tweet.Spaces, 1) + assert.Equal(tweet.SpaceID, SpaceID("1dRJZlRNZDzKB")) + + require.Len(trove.Spaces, 1) + s, is_ok := trove.Spaces["1dRJZlRNZDzKB"] + require.True(is_ok) - s := tweet.Spaces[0] assert.Equal(SpaceID("1dRJZlRNZDzKB"), s.ID) assert.Equal("https://t.co/5RLbEwQgvH", s.ShortUrl) assert.False(s.IsDetailsFetched)