/
application.go
74 lines (70 loc) · 2.51 KB
/
application.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
package twitter
import (
"context"
"encoding/json"
"net/url"
"strings"
)
// RateLimitsRes ...
type RateLimitsRes struct {
RateLimitContext struct {
AccessToken string `json:"access_token"`
} `json:"rate_limit_context"`
Resources struct {
Help struct {
Configuration RateLimit `json:"/help/configuration"`
Languages RateLimit `json:"/help/languages"`
Privacy RateLimit `json:"/help/privacy"`
TOS RateLimit `json:"/help/tos"`
} `json:"help"`
Users struct {
Contributees RateLimit `json:"/users/contributees"`
Contributors RateLimit `json:"/users/contributors"`
Lookup RateLimit `json:"/users/lookup"`
ProfileBanner RateLimit `json:"/users/profile_banner"`
Search RateLimit `json:"/users/search"`
ShowID RateLimit `json:"/users/show/:id"`
Suggestions RateLimit `json:"/users/suggestions"`
SuggestionsSlug RateLimit `json:"/users/suggestions/:slug"`
SuggestionsSlugMembers RateLimit `json:"/users/suggestions/:slug/members"`
} `json:"users"`
Search struct {
Tweets RateLimit `json:"/search/tweets"`
} `json:"search"`
Statuses struct {
HomeTimeline RateLimit `json:"/statuses/home_timeline"`
Lookup RateLimit `json:"/statuses/lookup"`
MentionsTimeline RateLimit `json:"/statuses/mentions_timeline"`
OEmbed RateLimit `json:"/statuses/oembed"`
Retweeters RateLimit `json:"/statuses/retweeters/ids"`
Retweets RateLimit `json:"/statuses/retweets/:id"`
RetweetsOfMe RateLimit `json:"/statuses/retweets_of_me"`
Show RateLimit `json:"/statuses/show/:id"`
UserTimeline RateLimit `json:"/statuses/user_timeline"`
} `json:"statuses"`
} `json:"resources"`
}
// RateLimitStatus calls the Twitter /application/rate_limit_status.json endpoint.
func (c *Client) RateLimitStatus(ctx context.Context, resources []string) (*RateLimitStatusResponse, error) {
values := url.Values{}
if len(resources) > 0 {
values.Set("resources", strings.Join(resources, ","))
}
resp, err := c.do(ctx, "GET", "https://api.twitter.com/1.1/application/rate_limit_status.json", values)
if err != nil {
return nil, err
}
defer resp.Body.Close()
if err = checkResponse(resp); err != nil {
return nil, err
}
var res RateLimitsRes
err = json.NewDecoder(resp.Body).Decode(&res)
if err != nil {
return nil, err
}
return &RateLimitStatusResponse{
RateLimitsRes: res,
RateLimit: getRateLimit(resp.Header),
}, nil
}