84 lines
2.1 KiB
Go
84 lines
2.1 KiB
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
"net/http"
|
|
"strconv"
|
|
|
|
log "github.com/sirupsen/logrus"
|
|
)
|
|
|
|
type TwitchSubscriptions struct {
|
|
Data []*TwitchSubscription `json:"data"`
|
|
Pagination *TwitchPagination `json:"pagination"`
|
|
Total int64 `json:"total"`
|
|
Points int64 `json:"points"`
|
|
}
|
|
|
|
type TwitchSubscription struct {
|
|
BroadcasterID string `json:"broadcaster_id"`
|
|
BroadcasterLogin string `json:"broadcaster_login"`
|
|
BroadcasterName string `json:"broadcaster_name"`
|
|
GifterID string `json:"gifter_id"`
|
|
GifterLogin string `json:"gifter_login"`
|
|
GifterName string `json:"gifter_name"`
|
|
IsGift bool `json:"is_gift"`
|
|
Tier string `json:"gift"`
|
|
PlanName string `json:"plan_name"`
|
|
UserID string `json:"user_id"`
|
|
UserLogin string `json:"user_login"`
|
|
UserName string `json:"user_name"`
|
|
}
|
|
|
|
func getSubs(u *User, max int) {
|
|
result := &TwitchSubscriptions{}
|
|
|
|
after := ""
|
|
for {
|
|
client := twitchOauthConfig.Client(context.Background(), u.Token)
|
|
req, err := http.NewRequest("GET", "https://api.twitch.tv/helix/subscriptions?broadcaster_id="+u.ID+after, nil)
|
|
if err != nil {
|
|
log.WithError(err).Error("Unable to create http request to get twitch streams data")
|
|
return
|
|
}
|
|
req.Header.Set("Client-ID", settings.ClientID)
|
|
|
|
resp, err := client.Do(req)
|
|
if err != nil {
|
|
log.WithError(err).Error("Unable to get twitch stream data")
|
|
return
|
|
}
|
|
|
|
t := &TwitchSubscriptions{}
|
|
if err := json.NewDecoder(resp.Body).Decode(&t); err != nil {
|
|
log.WithError(err).Error("Unable to parse twitch streams data")
|
|
}
|
|
resp.Body.Close()
|
|
|
|
if len(t.Data) == 0 {
|
|
break
|
|
}
|
|
|
|
result.Data = append(result.Data, t.Data...)
|
|
if t.Pagination == nil || t.Pagination.Cursor == "" {
|
|
break
|
|
}
|
|
after = "&after=" + t.Pagination.Cursor
|
|
}
|
|
|
|
if len(result.Data) < 1 {
|
|
log.Info("No subs")
|
|
return
|
|
}
|
|
|
|
if len(result.Data) > 0 {
|
|
u.TwitchSubscriptions = result
|
|
}
|
|
}
|
|
|
|
func (s *TwitchSubscriptions) SaveFiles() {
|
|
saveContent("subscriptions", "total", strconv.FormatInt(s.Total, 10))
|
|
saveJSON("subscriptions", "complete_list", s)
|
|
}
|