diff --git a/scraper/tweet.go b/scraper/tweet.go index 970427a..73e9916 100644 --- a/scraper/tweet.go +++ b/scraper/tweet.go @@ -73,3 +73,33 @@ func ParseSingleTweet(apiTweet APITweet) (ret Tweet, err error) { ret.HasVideo = false // TODO return } + + +func ParseTweetResponse(resp TweetResponse) (tweets []Tweet, retweets []Retweet, users []User, err error) { + var new_tweet Tweet + var new_retweet Retweet + for _, single_tweet := range resp.GlobalObjects.Tweets { + if single_tweet.RetweetedStatusIDStr == "" { + new_tweet, err = ParseSingleTweet(single_tweet) + if err != nil { + return + } + tweets = append(tweets, new_tweet) + } else { + new_retweet, err = ParseSingleRetweet(single_tweet) + if err != nil { + return + } + retweets = append(retweets, new_retweet) + } + } + var new_user User + for _, user := range resp.GlobalObjects.Users { + new_user, err = ParseSingleUser(user) + if err != nil { + return + } + users = append(users, new_user) + } + return +} diff --git a/scraper/tweet_test.go b/scraper/tweet_test.go index 70d0477..2486529 100644 --- a/scraper/tweet_test.go +++ b/scraper/tweet_test.go @@ -136,3 +136,31 @@ func TestParseSingleTweet2(t *testing.T) { t.Errorf("Expected %q, got %q", expected_text, quoted_tweet.Text) } } + + +func TestParseTweetResponse(t *testing.T) { + data, err := ioutil.ReadFile("test_responses/michael_malice_feed.json") + if err != nil { + panic(err) + } + var tweet_resp scraper.TweetResponse + err = json.Unmarshal(data, &tweet_resp) + if err != nil { + t.Errorf(err.Error()) + } + + tweets, retweets, users, err := scraper.ParseTweetResponse(tweet_resp) + if err != nil { + t.Errorf(err.Error()) + } + + if len(tweets) != 29 - 3 { + t.Errorf("Expected %d tweets, got %d", 29-3, len(tweets)) + } + if len(retweets) != 3 { + t.Errorf("Expected %d tweets, got %d", 3, len(retweets)) + } + if len(users) != 9 { + t.Errorf("Expected %d tweets, got %d", 9, len(users)) + } +}