From b261f095ade3f876dbd07bea2a677e8a761b0cd8 Mon Sep 17 00:00:00 2001 From: Alessio Date: Mon, 24 Jan 2022 20:19:08 -0800 Subject: [PATCH] Change main application to use new API for user feeds --- cmd/twitter/main.go | 9 +++++---- scraper/user_feed.go | 23 +++++++++++++++++++++++ 2 files changed, 28 insertions(+), 4 deletions(-) diff --git a/cmd/twitter/main.go b/cmd/twitter/main.go index cf612fe..52424ab 100644 --- a/cmd/twitter/main.go +++ b/cmd/twitter/main.go @@ -200,15 +200,16 @@ func fetch_tweet_conversation(tweet_identifier string) { */ func fetch_user_feed(handle string, how_many int) { user, err := profile.GetUserByHandle(scraper.UserHandle(handle)) - if err != nil { - die(err.Error(), false, -1) + die(fmt.Sprintf("Error getting user: %s\n %s", handle, err.Error()), false, -1) } - tweets, retweets, users, err := scraper.GetUserFeedFor(user.ID, how_many); + // tweets, retweets, users, err := scraper.GetUserFeedFor(user.ID, how_many); + trove, err := scraper.GetUserFeedGraphqlFor(user.ID, how_many) if err != nil { - die("Error scraping feed: " + err.Error(), false, -2) + die(fmt.Sprintf("Error scraping feed: %s\n %s", handle, err.Error()), false, -2) } + tweets, retweets, users := trove.Transform(); for _, u := range users { fmt.Println(u.Handle) diff --git a/scraper/user_feed.go b/scraper/user_feed.go index e30ce87..078681f 100644 --- a/scraper/user_feed.go +++ b/scraper/user_feed.go @@ -1,5 +1,8 @@ package scraper +import ( + "fmt" +) /** * Get a list of tweets that appear on the given user's page, along with a list of associated @@ -27,3 +30,23 @@ func GetUserFeedFor(user_id UserID, min_tweets int) (tweets []Tweet, retweets [] return ParseTweetResponse(tweet_response) } + + +func GetUserFeedGraphqlFor(user_id UserID, min_tweets int) (trove TweetTrove, err error) { + api := API{} + api_response, err := api.GetGraphqlFeedFor(user_id, "") + if err != nil { + err = fmt.Errorf("Error calling API to fetch user feed: UserID %d\n %s", user_id, err.Error()) + return + } + + if len(api_response.Data.User.Result.Timeline.Timeline.Instructions[0].Entries) < min_tweets && api_response.GetCursorBottom() != "" { + err = api.GetMoreTweetsFromGraphqlFeed(user_id, &api_response, min_tweets) + if err != nil && err != END_OF_FEED { + return + } + } + + + return api_response.ToTweetTrove() +}