public StreamHelpers.GetStreamsResult FetchStreams(int id) { bool isLive = false; using (var context = new MainDataContext()) { Streamer data = context.Streamers.FirstOrDefault(item => item.streamerId == id); if (data != null && data.isLive != null) { isLive = (bool)data.isLive; } } TwitchApiHelpers twitchApiHelpers = new TwitchApiHelpers(); var response = twitchApiHelpers.TwitchRequest("https://api.twitch.tv/helix/videos" + $"?user_id={id}" + "&first=100", Method.GET); var deserializeResponse = JsonConvert.DeserializeObject <StreamHelpers.GetStreamsResult>(response.Content); StreamHelpers.GetStreamsResult getStreamsResult = new StreamHelpers.GetStreamsResult(); getStreamsResult.data = new List <StreamHelpers.Data>(); string cursor; foreach (var stream in deserializeResponse.data) { if (isLive && stream.thumbnail_url.Length > 0) { getStreamsResult.data.Add(stream); } else if (!isLive) { getStreamsResult.data.Add(stream); } } if (deserializeResponse.pagination.cursor != null && deserializeResponse.data.Count >= 100) { cursor = deserializeResponse.pagination.cursor; } else { cursor = null; } while (cursor != null) { var paginatedResponse = twitchApiHelpers.TwitchRequest("https://api.twitch.tv/helix/videos" + $"?user_id={id}" + "&first=100" + $"&after={deserializeResponse.pagination.cursor}", Method.GET); deserializeResponse = JsonConvert.DeserializeObject <StreamHelpers.GetStreamsResult>(paginatedResponse .Content); foreach (var stream in deserializeResponse.data) { if (isLive && stream.thumbnail_url.Length > 0) { getStreamsResult.data.Add(stream); } else if (!isLive) { getStreamsResult.data.Add(stream); } } if (deserializeResponse.data.Count >= 100) { cursor = deserializeResponse.pagination.cursor; } else { cursor = null; } } for (int x = 0; x < getStreamsResult.data.Count; x++) { /*if (getStreamsResult.data[x].type != "archive") { * // only retrieve vods * getStreamsResult.data.Remove(getStreamsResult.data[x]); * }*/ // manually add thumbnail dimensions because twitch is too lazy to do it getStreamsResult.data[x].thumbnail_url = getStreamsResult.data[x].thumbnail_url .Replace("%{width}", "320").Replace("%{height}", "180"); } return(getStreamsResult); }
public void UpdateLiveStatus(List <Streamer> listOfStreamers) { string listOfIds = "?user_id="; for (int i = 0; i < listOfStreamers.Count; i++) { if (i != listOfStreamers.Count - 1) { listOfIds += listOfStreamers[i].streamerId + "&user_id="; } else { listOfIds += listOfStreamers[i].streamerId; } } TwitchApiHelpers twitchApiHelpers = new TwitchApiHelpers(); var response = twitchApiHelpers.TwitchRequest($"https://api.twitch.tv/helix/streams{listOfIds}&first=100", Method.GET); StreamHelpers.GetStreamsResult liveStream = JsonConvert.DeserializeObject <StreamHelpers.GetStreamsResult>(response.Content); for (int x = 0; x < listOfStreamers.Count; x++) { var stream = liveStream.data.FirstOrDefault(item => item.user_id == listOfStreamers[x].streamerId); if (stream != null && stream.type == "live") { // if live and if not a re-run or something else using (var context = new MainDataContext()) { var alreadyExistingStream = context.Streams.FirstOrDefault(item => item.vodId == Int64.Parse(stream.id)); var streamer = context.Streamers.FirstOrDefault(item => item.streamerId == listOfStreamers[x].streamerId); if (streamer.isLive == false) { streamer.isLive = true; context.SaveChanges(); } NotificationHub.Current.Clients.All.SendAsync($"{streamer.id}Live", true); if (streamer.getLive == false || alreadyExistingStream != null) { // already downloading/downloaded, or user does not want to download this streamers live stream continue; } } if (DateTime.UtcNow.Subtract(stream.started_at).TotalMinutes < 5) { // queue up the stream to be downloaded StreamExtended convertedLiveStream = new StreamExtended { streamId = StreamHelpers.GetStreamDetails(Int64.Parse(stream.id), true, stream.user_id).streamId, vodId = Int64.Parse(stream.id), streamerId = stream.user_id, title = stream.title, createdAt = stream.started_at }; CreateLiveStream createLiveStream = new CreateLiveStream(); createLiveStream.PrepareLiveStreamDownload(convertedLiveStream, stream.user_login); } } else { using (var context = new MainDataContext()) { var streamer = context.Streamers.FirstOrDefault(item => item.streamerId == listOfStreamers[x].streamerId); if (streamer.isLive == true) { streamer.isLive = false; context.SaveChanges(); } NotificationHub.Current.Clients.All.SendAsync($"{streamer.id}Live", false); } } } }