go-twitch/api/channels/get_followed_channels.go

92 lines
3.3 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package channels
import (
"context"
"encoding/json"
"fmt"
"net/http"
"net/url"
"time"
"github.com/google/go-querystring/query"
"go.fifitido.net/twitch/api/types"
)
type GetFollowedChannelsParams struct {
// A users ID. Returns the list of broadcasters that this user follows. This ID must match the user ID in the user OAuth token.
UserID string `url:"user_id"`
// A broadcasters ID. Use this parameter to see whether the user follows this broadcaster.
// If specified, the response contains this broadcaster if the user follows them.
// If not specified, the response contains all broadcasters that the user follows.
BroadcasterID *string `url:"broadcaster_id,omitempty"`
// The maximum number of items to return per page in the response. The minimum page size is 1 item per page and the maximum is 100. The default is 20.
First *int `url:"first,omitempty"`
// The cursor used to get the next page of results. The Pagination object in the response contains the cursors value.
// Read more: https://dev.twitch.tv/docs/api/guide#pagination
After *types.Cursor `url:"after,omitempty"`
}
type GetFollowedChannelsResponse struct {
// The list of broadcasters that the user follows.
// The list is in descending order by followed_at (with the most recently followed broadcaster first)
// The list is empty if the user doesnt follow anyone.
Data []FollowedChannel `json:"data"`
// Contains the information used to page through the list of results. The object is empty if there are no more pages left to page through.
// Read more: https://dev.twitch.tv/docs/api/guide#pagination
Pagination types.Pagination `json:"pagination"`
// The total number of broadcasters that the user follows.
// As someone pages through the list, the number may change as the user follows or unfollows broadcasters.
Total int `json:"total"`
}
type FollowedChannel struct {
// An ID that uniquely identifies the broadcaster that this user is following.
BroadcasterID string `json:"broadcaster_id"`
// The broadcasters login name.
BroadcasterLogin string `json:"broadcaster_login"`
// The broadcasters display name.
BroadcasterName string `json:"broadcaster_name"`
// The UTC timestamp when the user started following the broadcaster.
FollowedAt time.Time `json:"followed_at"`
}
// Gets a list of broadcasters that the specified user follows. You can also use this endpoint to see whether a user follows a specific broadcaster.
//
// Requires a user access token that includes the user:read:follows scope.
func (c *Channels) GetFollowedChannels(ctx context.Context, params *GetFollowedChannelsParams) (*GetFollowedChannelsResponse, error) {
v, _ := query.Values(params)
endpoint := c.baseUrl.ResolveReference(&url.URL{Path: "users/follows", RawQuery: v.Encode()})
req, err := http.NewRequestWithContext(ctx, http.MethodGet, endpoint.String(), nil)
if err != nil {
return nil, err
}
res, err := c.client.Do(req)
if err != nil {
return nil, err
}
defer res.Body.Close()
statusOK := res.StatusCode >= 200 && res.StatusCode < 300
if !statusOK {
return nil, fmt.Errorf("failed to get followed channels (%d)", res.StatusCode)
}
var data GetFollowedChannelsResponse
if err := json.NewDecoder(res.Body).Decode(&data); err != nil {
return nil, err
}
return &data, nil
}