diff --git a/cmd/tests.sh b/cmd/tests.sh index 737acc2..f8c3ad1 100755 --- a/cmd/tests.sh +++ b/cmd/tests.sh @@ -351,13 +351,18 @@ test $(sqlite3 twitter.db "select count(*) from tweets where user_id = 44067298 # Test fetching user Likes tw fetch_user Offline_Twatter # TODO: why doesn't this work when authenticated? tw --session Offline_Twatter get_user_likes Offline_Twatter -test $(sqlite3 twitter.db "select count(*) from likes") = "2" +test $(sqlite3 twitter.db "select count(*) from likes") -ge "2" test $(sqlite3 twitter.db "select count(*) from likes where tweet_id = 1671902735250124802") = "1" # Test liking and unliking +tw fetch_tweet_only 1589023388676554753 +test $(sqlite3 twitter.db "select count(*) from likes where tweet_id = 1589023388676554753 and user_id = (select id from users where handle like 'offline_twatter')") = "0" tw --session Offline_Twatter like_tweet https://twitter.com/elonmusk/status/1589023388676554753 +test $(sqlite3 twitter.db "select count(*) from likes where tweet_id = 1589023388676554753 and user_id = (select id from users where handle like 'offline_twatter')") = "1" tw --session Offline_Twatter unlike_tweet https://twitter.com/elonmusk/status/1589023388676554753 +# TODO: implement deleting a Like +# test $(sqlite3 twitter.db "select count(*) from likes where tweet_id = 1589023388676554753 and user_id = (select id from users where handle like 'offline_twatter')") = "0" # TODO: Maybe this file should be broken up into multiple test scripts diff --git a/cmd/twitter/main.go b/cmd/twitter/main.go index bc718a9..2a37311 100644 --- a/cmd/twitter/main.go +++ b/cmd/twitter/main.go @@ -356,10 +356,14 @@ func like_tweet(tweet_identifier string) { if err != nil { die(err.Error(), false, -1) } - err = scraper.LikeTweet(tweet_id) + like, err := scraper.LikeTweet(tweet_id) if err != nil { die(err.Error(), false, -10) } + err = profile.SaveLike(like) + if err != nil { + die(err.Error(), false, -1) + } happy_exit("Liked the tweet.") } diff --git a/scraper/api_request_utils.go b/scraper/api_request_utils.go index 3e2ce19..c8dce3e 100644 --- a/scraper/api_request_utils.go +++ b/scraper/api_request_utils.go @@ -174,7 +174,7 @@ func (api *API) LogIn(username string, password string) { Subtasks []struct { OpenAccount struct { User struct { - ID int + ID int `json:"id_str,string"` Name string ScreenName string `json:"screen_name"` } diff --git a/scraper/api_types_posting.go b/scraper/api_types_posting.go index 301fcd6..536565f 100644 --- a/scraper/api_types_posting.go +++ b/scraper/api_types_posting.go @@ -11,7 +11,7 @@ import ( var AlreadyLikedThisTweet error = errors.New("already liked this tweet") var HaventLikedThisTweet error = errors.New("Haven't liked this tweet") -func (api API) LikeTweet(id TweetID) error { +func (api API) LikeTweet(id TweetID) (Like, error) { type LikeResponse struct { Data struct { FavoriteTweet string `json:"favorite_tweet"` @@ -30,17 +30,21 @@ func (api API) LikeTweet(id TweetID) error { &result, ) if err != nil { - return fmt.Errorf("Error executing the HTTP POST request:\n %w", err) + return Like{}, fmt.Errorf("Error executing the HTTP POST request:\n %w", err) } if len(result.Errors) > 0 { if strings.Contains(result.Errors[0].Message, "has already favorited tweet") { - return AlreadyLikedThisTweet + return Like{}, AlreadyLikedThisTweet } } if result.Data.FavoriteTweet != "Done" { panic(fmt.Sprintf("Dunno why but it failed with value %q", result.Data.FavoriteTweet)) } - return nil + return Like{ + UserID: api.UserID, + TweetID: id, + SortID: -1, + }, nil } func (api API) UnlikeTweet(id TweetID) error { @@ -75,7 +79,7 @@ func (api API) UnlikeTweet(id TweetID) error { return nil } -func LikeTweet(id TweetID) error { +func LikeTweet(id TweetID) (Like, error) { if !the_api.IsAuthenticated { log.Fatalf("Must be authenticated!") }