Skip to content

Commit

Permalink
expanded tweets lookup (#94)
Browse files Browse the repository at this point in the history
* expanded tweets lookup

* update unit test
  • Loading branch information
g8rswimmer authored Jan 29, 2022
1 parent 95cb379 commit e62b746
Show file tree
Hide file tree
Showing 3 changed files with 54 additions and 19 deletions.
30 changes: 20 additions & 10 deletions v2/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@ const (
tweetRecentCountsQueryLength = 512
userBlocksMaxResults = 1000
userMutesMaxResults = 1000
userLikesMaxResults = 100
userLikesMinResults = 10
likesMaxResults = 100
likesMinResults = 10
sampleStreamMaxBackoffMin = 5
)

Expand Down Expand Up @@ -1614,6 +1614,11 @@ func (c *Client) TweetLikesLookup(ctx context.Context, tweetID string, opts Twee
switch {
case len(tweetID) == 0:
return nil, fmt.Errorf("user tweet likes lookup: an id is required: %w", ErrParameter)
case opts.MaxResults == 0:
case opts.MaxResults < likesMinResults:
return nil, fmt.Errorf("tweet tweet likes lookup: a min results [%d] is required [current: %d]: %w", likesMinResults, opts.MaxResults, ErrParameter)
case opts.MaxResults > likesMaxResults:
return nil, fmt.Errorf("tweet tweet likes lookup: a max results [%d] is required [current: %d]: %w", likesMaxResults, opts.MaxResults, ErrParameter)
default:
}

Expand Down Expand Up @@ -1648,13 +1653,18 @@ func (c *Client) TweetLikesLookup(ctx context.Context, tweetID string, opts Twee
return nil, e
}

raw := &UserRaw{}
respBody := struct {
*UserRaw
Meta *TweetLikesMeta `json:"meta"`
}{}

if err := decoder.Decode(&raw); err != nil {
return nil, fmt.Errorf("user tweet likes lookup dictionary: %w", err)
if err := decoder.Decode(&respBody); err != nil {
return nil, fmt.Errorf("tweet user likes lookup dictionary: %w", err)
}

return &TweetLikesLookupResponse{
Raw: raw,
Raw: respBody.UserRaw,
Meta: respBody.Meta,
}, nil
}

Expand All @@ -1664,10 +1674,10 @@ func (c *Client) UserLikesLookup(ctx context.Context, userID string, opts UserLi
case len(userID) == 0:
return nil, fmt.Errorf("tweet user likes lookup: an id is required: %w", ErrParameter)
case opts.MaxResults == 0:
case opts.MaxResults < userLikesMinResults:
return nil, fmt.Errorf("tweet user likes lookup: a min results [%d] is required [current: %d]: %w", userLikesMinResults, opts.MaxResults, ErrParameter)
case opts.MaxResults > userLikesMaxResults:
return nil, fmt.Errorf("tweet user likes lookup: a max results [%d] is required [current: %d]: %w", userLikesMaxResults, opts.MaxResults, ErrParameter)
case opts.MaxResults < likesMinResults:
return nil, fmt.Errorf("tweet user likes lookup: a min results [%d] is required [current: %d]: %w", likesMinResults, opts.MaxResults, ErrParameter)
case opts.MaxResults > likesMaxResults:
return nil, fmt.Errorf("tweet user likes lookup: a max results [%d] is required [current: %d]: %w", likesMaxResults, opts.MaxResults, ErrParameter)
default:
}

Expand Down
12 changes: 10 additions & 2 deletions v2/client_likes_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -56,8 +56,12 @@ func TestClient_TweetLikesLookup(t *testing.T) {
"name": "Twitter Data",
"username": "TwitterData"
}
]
}`
],
"meta": {
"result_count": 2,
"next_token": "7140dibdnow9c7btw3w29grvxfcgvpb9n9coehpk7xz5i"
}
}`
return &http.Response{
StatusCode: http.StatusOK,
Body: io.NopCloser(strings.NewReader(body)),
Expand Down Expand Up @@ -87,6 +91,10 @@ func TestClient_TweetLikesLookup(t *testing.T) {
},
},
},
Meta: &TweetLikesMeta{
ResultCount: 2,
NextToken: "7140dibdnow9c7btw3w29grvxfcgvpb9n9coehpk7xz5i",
},
},
wantErr: false,
},
Expand Down
31 changes: 24 additions & 7 deletions v2/tweet_likes.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,22 +2,33 @@ package twitter

import (
"net/http"
"strconv"
"strings"
)

// TweetLikesLookupResponse is the user from the tweet likes
type TweetLikesLookupResponse struct {
Raw *UserRaw
Raw *UserRaw
Meta *TweetLikesMeta `json:"meta"`
}

// TweetLikesMeta is the meta data from the response
type TweetLikesMeta struct {
ResultCount int `json:"result_count"`
NextToken string `json:"next_token"`
PreviousToken string `json:"previous_token"`
}

// TweetLikesLookupOpts the user like lookup options
type TweetLikesLookupOpts struct {
Expansions []Expansion
TweetFields []TweetField
UserFields []UserField
MediaFields []MediaField
PlaceFields []PlaceField
PollFields []PollField
Expansions []Expansion
TweetFields []TweetField
UserFields []UserField
MediaFields []MediaField
PlaceFields []PlaceField
PollFields []PollField
MaxResults int
PaginationToken string
}

func (u TweetLikesLookupOpts) addQuery(req *http.Request) {
Expand All @@ -40,6 +51,12 @@ func (u TweetLikesLookupOpts) addQuery(req *http.Request) {
if len(u.PollFields) > 0 {
q.Add("poll.fields", strings.Join(pollFieldStringArray(u.PollFields), ","))
}
if u.MaxResults > 0 {
q.Add("max_results", strconv.Itoa(u.MaxResults))
}
if len(u.PaginationToken) > 0 {
q.Add("pagination_token", u.PaginationToken)
}
if len(q) > 0 {
req.URL.RawQuery = q.Encode()
}
Expand Down

0 comments on commit e62b746

Please sign in to comment.