public async Task <BasicStreamInfo> GetLivestreamStatusFromChannelId(string ChannelId) { try { var client = new RestClient($"https://www.youtube.com/channel/{ChannelId}/live"); client.Timeout = 8000; var request = new RestRequest(Method.GET); request.AddCookie("CONSENT", "YES+cb"); IRestResponse response = await client.ExecuteAsync(request); if (response.StatusCode == HttpStatusCode.NotFound) { CMessage.GotResponseNonExistentUser(ChannelId, API_NAME); return(BasicStreamInfo.Empty); } string videoId = ScrapeBit.FirstString(response.Content, "\"videoDetails\":{\"videoId\":\"", "\""); if (videoId == null) { return(BasicStreamInfo.Empty); } if (response.Content.Contains("LIVE_STREAM_OFFLINE")) { CMessage.GotResponseScheduledLivestream(ChannelId, API_NAME); return(BasicStreamInfo.Empty); } else { return(new BasicStreamInfo(true, videoId)); } } catch (Exception) { return(BasicStreamInfo.Empty); } }
public async Task Run() { try { string PageResponse = await RequestCurrentStatus(); if (PageResponse != null) { Player DownloadInfo = Player.RetrievePlayer(PageResponse); if (DownloadInfo.Quality == Quality.NotFound) { return; } string Title = ScrapeBit.FirstFrom(PageResponse, TITLE); string Path = FilePaths.GetLivestreamsPath(FileName.Purify($"{Title} [{DateTime.Now.Ticks.GetHashCode()}].mp4")); string Description = ScrapeBit.FirstFrom(PageResponse, DESCRIPTION); Console.WriteLine($"Found Livestream with Title: {Title} and Quality: {DownloadInfo.Quality}"); await Download(DownloadInfo.Url, Path); var Upload = new Youtube(FilePaths.SecretsFile); await Upload.Init(); _ = Upload.UploadWithRetry(new YoutubeUpload() { LivestreamPath = Path, Title = Title, Description = Description, ThumbnailPath = null }, TimeSpan.FromHours(3)); } } catch (Exception x) { Console.WriteLine($"Error in Check loop, Exception occurred: {x.Message}, please restart"); } }
public async Task <string> RequestCurrentStatus() { try { var client = new RestClient($"https://trovo.live/{Name}"); client.Timeout = -1; client.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36"; var request = new RestRequest(Method.GET); IRestResponse PageResponse = await client.ExecuteAsync(request); if (PageResponse.Content == null) { return(null); } string BoolText = ScrapeBit.FirstFrom(PageResponse.Content, ISLIVE); if (BoolText == null) { return(null); } bool status = bool.Parse(BoolText.ToLower()); if (status) { return(PageResponse.Content); } else { return(null); } } catch (Exception) { return(null); } }
public static Player RetrievePlayer(string PageContent) { IList <Player> PlayerQualityTypes = new List <Player>(); Bitrate[] Bitrates = { Bitrate.Create(5000, Quality.High), Bitrate.Create(0, Quality.MediumHighest), Bitrate.Create(2500, Quality.Medium), Bitrate.Create(1500, Quality.Low), Bitrate.Create(600, Quality.VeryLow) }; foreach (var Bitrate in Bitrates) { string Url = ScrapeBit.FirstString(PageContent, "{\"bitrate\":" + Bitrate.amount + ",\"playUrl\":\"", "\","); // FHD High Bitrate if (Url == null) { continue; } else { return(new Player(Url, Bitrate.quality)); } } return(new Player(null, Quality.NotFound)); }
public static string[] AllFrom(string Source, Scrape scrape) { return(ScrapeBit.AllString(Source, scrape.SearchString, scrape.SearchUntilString)); }
public static string FirstFrom(string Source, Scrape scrape) { return(ScrapeBit.FirstString(Source, scrape.SearchString, scrape.SearchUntilString)); }