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