public void DownloadAllVideos(PDownload pDownload) { Broadcasts broadcasts = GetBroadcasts(pDownload.User); broadcasts.broadcasts = broadcasts.broadcasts.Where(b => b.available_for_replay || b.state == "RUNNING").ToList(); if (pDownload.IsReverseOrder) broadcasts.broadcasts.Reverse(); #region Selected Videos List<int> selectedVideos = pDownload.SelectedVideos; if (selectedVideos.Any()) { List<Broadcast> selectedBroadcasts = new List<Broadcast>(); selectedBroadcasts.AddRange(selectedVideos.Select(selectedVideo => broadcasts.broadcasts[selectedVideo])); broadcasts.broadcasts = selectedBroadcasts.ToList(); } #endregion #region Selected Broadcasts List<string> selectedBroadcastsText = pDownload.SelectedBroadcasts; if (selectedBroadcastsText.Any()) { broadcasts.broadcasts = selectedBroadcastsText.Select( selectedBroadcast => broadcasts.broadcasts.First(b => b.id == selectedBroadcast)).ToList(); } #endregion Console.WriteLine(broadcasts.broadcasts.Count + " broadcasts found."); foreach (var broadcast in broadcasts.broadcasts) { DownloadVideos(broadcast, pDownload.DownloadLiveStream); } }
private void btnDownload_Click(object sender, EventArgs e) { List<DataGridViewRow> selectedRows = grdBroadcast.SelectedRows.Cast<DataGridViewRow>().ToList(); if (!selectedRows.Any()) return; var selectedBroadcasts = selectedRows.Select(r => new Broadcast { username = r.Cells[0].Value.ToString(), id = r.Cells[1].Value.ToString() }).ToList(); PDownload pDownload = new PDownload { User = selectedBroadcasts.First().username, SelectedBroadcasts = selectedBroadcasts.Select(b => b.id).ToList() }; using (VideoDownloader videoDownloader = new VideoDownloader()) { videoDownloader.DownloadAllVideos(pDownload); } }
static void Main(string[] args) { if(args.Length < 1) return; string user = args[0]; string broadcast = ""; List<int> selectedVideos = new List<int>(); bool downloadReplayOnly = false; bool isReverseOrder = false; var p = new OptionSet { {"b|broadcast=", "the name of broadcast.", v => broadcast = v}, {"ds|downloadselected=", "only selected videos downloaded, seperate with comma (e.g. 1,2,7), start index is 0", v => selectedVideos = v.Split(',').Select(int.Parse).ToList()}, {"ro|replayonly", "download only replay videos", v => downloadReplayOnly = v != null}, {"r|reverse", "download reverse order", v => isReverseOrder = v != null} }; p.Parse(args); if(string.IsNullOrEmpty(user)) return; bool downloadSingle = !string.IsNullOrEmpty(broadcast); bool downloadSelectedVideos = selectedVideos.Any(); if(downloadSelectedVideos && downloadSingle) return; PDownload pDownload = new PDownload { User = user, Broadcast = broadcast, SelectedVideos = selectedVideos, DownloadLiveStream = !downloadReplayOnly, IsReverseOrder = isReverseOrder }; using (VideoDownloader videoDownloader = new VideoDownloader()) { if (downloadSingle) videoDownloader.DownloadVideos(pDownload); else videoDownloader.DownloadAllVideos(pDownload); } }
static void Main(string[] args) { var periscopeApi = new PeriscopeApi(); var loginTwitterRequest = new loginTwitterRequest { }; var loginTwitter = periscopeApi.LoginTwitter(loginTwitterRequest); var userSearchRequest = new userSearchRequest { cookie = loginTwitter.cookie, search = args[0] }; var userSearch = periscopeApi.UserSearch(userSearchRequest); var userBroadcastsRequest1 = new userBroadcastsRequest { cookie = loginTwitter.cookie, all = true, user_id = userSearch.First().id }; var userBroadcasts = periscopeApi.UserBroadcasts(userBroadcastsRequest1); using (VideoDownloader videoDownloader = new VideoDownloader()) { foreach (var userBroadcast in userBroadcasts) { PDownload pDownload = new PDownload { User = userBroadcast.username, Broadcast = userBroadcast.id, DownloadLiveStream = true }; videoDownloader.DownloadVideos(pDownload); } } }
public void DownloadVideos(PDownload pDownload) { DownloadVideos(GetBroadcastInfo(pDownload.User, pDownload.Broadcast), pDownload.DownloadLiveStream); }
private void DownloadLiveStream(Broadcast broadcast, AccessPublic accessPublic) { List<string> chunklist = new List<string>(); Uri httpsHlsUrl = new Uri(accessPublic.https_hls_url); string baseUrl = httpsHlsUrl.Scheme + "://" + httpsHlsUrl.DnsSafeHost + httpsHlsUrl.Segments[0] + httpsHlsUrl.Segments[1] + httpsHlsUrl.Segments[2] + httpsHlsUrl.Segments[3]; bool liveStream = true; while (liveStream) { UpdateChunklist(broadcast, baseUrl, ref chunklist, ref liveStream); foreach (var chunk in chunklist.ToList()) { string message; chunklist.Remove(chunk); DownloadChunk(broadcast, baseUrl, chunk, out message); Console.WriteLine(message); } } var pDownload = new PDownload { User = broadcast.username, Broadcast = broadcast.id, DownloadLiveStream = false }; DownloadVideos(pDownload); }