Fix parsing of spaces in APIv2; improve no-worsening of Spaces
This commit is contained in:
parent
433dd5e0bb
commit
412574e46f
@ -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,
|
short_url=case when short_url == "" then :short_url else short_url end,
|
||||||
state=:state,
|
state=:state,
|
||||||
title=:title,
|
title=:title,
|
||||||
updated_at=:updated_at,
|
updated_at=max(:updated_at, updated_at),
|
||||||
is_available_for_replay=:is_available_for_replay,
|
is_available_for_replay=:is_available_for_replay,
|
||||||
replay_watch_count=:replay_watch_count,
|
replay_watch_count=:replay_watch_count,
|
||||||
live_listeners_count=:live_listeners_count,
|
live_listeners_count=:live_listeners_count,
|
||||||
is_details_fetched=:is_details_fetched
|
is_details_fetched=(is_details_fetched or :is_details_fetched)
|
||||||
`, &s)
|
`, &s)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("Error saving space (space ID %q, value: %#v):\n %w", s.ID, s, err)
|
return fmt.Errorf("Error saving space (space ID %q, value: %#v):\n %w", s.ID, s, err)
|
||||||
|
@ -38,8 +38,11 @@ func TestNoWorseningSpace(t *testing.T) {
|
|||||||
|
|
||||||
space := create_space_from_id(rand.Int())
|
space := create_space_from_id(rand.Int())
|
||||||
space.ShortUrl = "Some Short Url"
|
space.ShortUrl = "Some Short Url"
|
||||||
|
space.Title = "Debating Somebody"
|
||||||
space.CreatedAt = scraper.TimestampFromUnix(1000)
|
space.CreatedAt = scraper.TimestampFromUnix(1000)
|
||||||
|
space.UpdatedAt = scraper.TimestampFromUnix(2000)
|
||||||
space.CreatedById = scraper.UserID(-1)
|
space.CreatedById = scraper.UserID(-1)
|
||||||
|
space.IsDetailsFetched = true
|
||||||
|
|
||||||
// Save the space
|
// Save the space
|
||||||
err := profile.SaveSpace(space)
|
err := profile.SaveSpace(space)
|
||||||
@ -47,8 +50,11 @@ func TestNoWorseningSpace(t *testing.T) {
|
|||||||
|
|
||||||
// Worsen the space, then re-save
|
// Worsen the space, then re-save
|
||||||
space.ShortUrl = ""
|
space.ShortUrl = ""
|
||||||
|
space.Title = ""
|
||||||
space.CreatedAt = scraper.TimestampFromUnix(0)
|
space.CreatedAt = scraper.TimestampFromUnix(0)
|
||||||
|
space.UpdatedAt = scraper.TimestampFromUnix(0)
|
||||||
space.CreatedById = scraper.UserID(0)
|
space.CreatedById = scraper.UserID(0)
|
||||||
|
space.IsDetailsFetched = false
|
||||||
err = profile.SaveSpace(space)
|
err = profile.SaveSpace(space)
|
||||||
require.NoError(err)
|
require.NoError(err)
|
||||||
|
|
||||||
@ -57,6 +63,9 @@ func TestNoWorseningSpace(t *testing.T) {
|
|||||||
require.NoError(err)
|
require.NoError(err)
|
||||||
|
|
||||||
assert.Equal(new_space.ShortUrl, "Some Short Url")
|
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.CreatedAt, scraper.TimestampFromUnix(1000))
|
||||||
|
assert.Equal(new_space.UpdatedAt, scraper.TimestampFromUnix(2000))
|
||||||
assert.Equal(new_space.CreatedById, scraper.UserID(-1))
|
assert.Equal(new_space.CreatedById, scraper.UserID(-1))
|
||||||
|
assert.True(new_space.IsDetailsFetched)
|
||||||
}
|
}
|
||||||
|
@ -249,7 +249,14 @@ func (api_result APIV2Result) ToTweetTrove(ignore_null_entries bool) TweetTrove
|
|||||||
ret.Tweets[main_tweet.ID] = main_tweet
|
ret.Tweets[main_tweet.ID] = main_tweet
|
||||||
} else if api_result.Result.Card.Legacy.Name == "3691233323:audiospace" {
|
} else if api_result.Result.Card.Legacy.Name == "3691233323:audiospace" {
|
||||||
space := api_result.Result.Card.ParseAsSpace()
|
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
|
// Remove it from the Urls
|
||||||
for i, url := range main_tweet.Urls {
|
for i, url := range main_tweet.Urls {
|
||||||
|
@ -444,6 +444,7 @@ func TestAPIV2ParseTweetWithPoll(t *testing.T) {
|
|||||||
*/
|
*/
|
||||||
func TestAPIV2ParseTweetWithSpace(t *testing.T) {
|
func TestAPIV2ParseTweetWithSpace(t *testing.T) {
|
||||||
assert := assert.New(t)
|
assert := assert.New(t)
|
||||||
|
require := require.New(t)
|
||||||
data, err := os.ReadFile("test_responses/api_v2/tweet_with_audiospaces_card.json")
|
data, err := os.ReadFile("test_responses/api_v2/tweet_with_audiospaces_card.json")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
@ -457,11 +458,14 @@ func TestAPIV2ParseTweetWithSpace(t *testing.T) {
|
|||||||
|
|
||||||
assert.Len(trove.Tweets, 1)
|
assert.Len(trove.Tweets, 1)
|
||||||
tweet, ok := trove.Tweets[1497647006445146113]
|
tweet, ok := trove.Tweets[1497647006445146113]
|
||||||
require.True(t, ok)
|
require.True(ok)
|
||||||
assert.Len(tweet.Urls, 0)
|
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(SpaceID("1dRJZlRNZDzKB"), s.ID)
|
||||||
assert.Equal("https://t.co/5RLbEwQgvH", s.ShortUrl)
|
assert.Equal("https://t.co/5RLbEwQgvH", s.ShortUrl)
|
||||||
assert.False(s.IsDetailsFetched)
|
assert.False(s.IsDetailsFetched)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user