Add parser for a TweetResponse

This commit is contained in:
Alessio 2021-06-15 15:18:09 -07:00
parent 5290a0b549
commit 90e5fdb8b1
2 changed files with 58 additions and 0 deletions

View File

@ -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
}

View File

@ -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))
}
}