public static async Task <string> GetDmcWatchResponseDataAsync(NiconicoContext context, string requestId) { if (!NiconicoRegex.IsVideoId(requestId)) { // throw new ArgumentException(); } var dict = new Dictionary <string, string>(); var url = $"{NiconicoUrls.VideoWatchPageUrl}{requestId}"; url += "?" + HttpQueryExtention.DictionaryToQuery(dict); try { var message = new HttpRequestMessage(HttpMethod.Get, new Uri(url)); var res = await context.SendAsync(message); if (res.ReasonPhrase == "Forbidden") { throw new WebException("require payment."); } var text = await res.Content.ReadAsStringAsync(); return(text); } catch (Exception e) { throw new WebException("access failed watch/" + requestId, e); } }
public void AddWatchAfterPlaylist(string contentId) { if (!NiconicoRegex.IsVideoId(contentId) && !int.TryParse(contentId, out var temp)) { return; } var result = DefaultPlaylist.AddMylistItem(contentId, ContentInsertPosition.Tail); }
public static Task <string> RemoveHistoryDataAsync( NiconicoContext context, string token, string requestId) { if (!NiconicoRegex.IsVideoId(requestId) && !uint.TryParse(requestId, out var _)) { throw new ArgumentException(); } return(context .GetStringAsync($"{NiconicoUrls.VideoRemoveUrl}{token}&video_id={requestId}")); }
private async Task ExtractNicoContentId_And_SubmitSuggestion(Uri url) { var match = NicoContentRegex.Match(url.OriginalString); if (match.Success) { var hostNameGroup = match.Groups[1]; var contentTypeGroup = match.Groups[3]; var contentIdGroup = match.Groups[4]; var contentId = contentIdGroup.Value; if (NiconicoRegex.IsVideoId(contentId)) { SubmitVideoContentSuggestion(contentId); } else if (NiconicoRegex.IsLiveId(contentId)) { await SubmitLiveContentSuggestion(contentId); } else if (contentTypeGroup.Success) { var contentType = contentTypeGroup.Value; switch (contentType) { case "mylist": await SubmitMylistContentSuggestion(contentId); break; case "community": await SubmitCommunityContentSuggestion(contentId); break; case "user": await SubmitUserSuggestion(contentId); break; } } else if (hostNameGroup.Success) { var hostName = hostNameGroup.Value; if (hostName == "ch.nicovideo.jp") { var channelId = contentId; // TODO: クリップボードから受け取ったチャンネルIdを開く } } } }
private async Task ExtractNicoContentId_And_SubmitSuggestion(string contentId) { if (NiconicoRegex.IsVideoId(contentId)) { SubmitVideoContentSuggestion(contentId); } else if (NiconicoRegex.IsLiveId(contentId)) { await SubmitLiveContentSuggestion(contentId); } }
// あとで見るプレイリストを通じての再生をサポート // プレイリストが空だった場合、その場で再生を開始 public void PlayVideo(string contentId, string title = "", NicoVideoQuality?quality = null) { if (!NiconicoRegex.IsVideoId(contentId) && !int.TryParse(contentId, out var temp)) { return; } var newItem = DefaultPlaylist.AddVideo(contentId, title, ContentInsertPosition.Head); Play(newItem); }
public void PlayVideo(IVideoContent video) { if (!(NiconicoRegex.IsVideoId(video.Id) || video.Id.All(x => '0' <= x && x <= '9'))) { return; } var item = DefaultPlaylist.PlaylistItems.FirstOrDefault(x => x.Type == PlaylistItemType.Video && x.ContentId == video.Id) ?? DefaultPlaylist.AddVideo(video.Id, video.Label, ContentInsertPosition.Head); Play(item); }
public static Task <string> GetCKeyDataAsync(NiconicoContext context, string refererId, string requestId) { if (!NiconicoRegex.IsLiveId(refererId)) { throw new ArgumentException(); } if (!NiconicoRegex.IsVideoId(requestId)) { throw new ArgumentException(); } return(context .GetStringAsync($"{NiconicoUrls.LiveCKeyUrl}?referer_id={refererId}&id={requestId}")); }
// https://www.nicovideo.jp/api/watch/v3_guest/1615359905?_frontendId=6&_frontendVersion=0&actionTrackId=rV8Nf4Qith_1615871913294&skips=harmful&additionals=pcWatchPage,external,marquee,series&isContinueWatching=true&i18nLanguage=ja-jp&t=1615871919713 // https://www.nicovideo.jp/api/watch/v3/1615359905?_frontendId=6&_frontendVersion=0&actionTrackId=nYQzK4jFdB_1615872059788&skips=harmful&additionals=pcWatchPage,external,marquee,series&isContinueWatching=true&i18nLanguage=ja-jp&t=1615872080318 public static async Task <string> GetDmcWatchJsonDataAsync(NiconicoContext context, string requestId, bool isLoggedIn, string actionTrackId) { if (!NiconicoRegex.IsVideoId(requestId)) { // throw new ArgumentException(); } //bool isLoggedIn = true; var dict = new Dictionary <string, string>(); var url = $"{NiconicoUrls.VideoApiUrlBase}watch/{(isLoggedIn ? "v3" : "v3_guest")}/{requestId}"; dict.Add("_frontendId", "6"); dict.Add("_frontendVersion", "0"); dict.Add("actionTrackId", actionTrackId); dict.Add("skips", "harmful"); dict.Add("additionals", WebUtility.UrlEncode("pcWatchPage,external,marquee,series")); dict.Add("isContinueWatching", "true"); dict.Add("i18nLanguage", "ja-jp"); dict.Add("t", DateTimeOffset.Now.ToUnixTimeMilliseconds().ToString()); url += "?" + HttpQueryExtention.DictionaryToQuery(dict); var requestMessage = new HttpRequestMessage(HttpMethod.Get, new Uri(url)); requestMessage.Headers.Add("Accept", "*/*"); requestMessage.Headers.Referer = new Uri($"https://www.nicovideo.jp/watch/{requestId}"); requestMessage.Headers.Add("Sec-Fetch-Site", "same-origin"); requestMessage.Headers.Host = new Windows.Networking.HostName("www.nicovideo.jp"); try { var res = await context.SendAsync(requestMessage); if (res.ReasonPhrase == "Forbidden") { throw new WebException("require payment."); } var text = await res.Content.ReadAsStringAsync(); return(text); } catch (Exception e) { throw new WebException("access failed watch/" + requestId, e); } }
public void Play(IMylist mylist) { var videoId = mylist.FirstOrDefault(); if (!(NiconicoRegex.IsVideoId(videoId) || videoId.All(x => '0' <= x && x <= '9'))) { throw new Exception("Video Id not correct format. (\"sm0123456\" or \"12345678\") "); } Play(new QualityVideoPlaylistItem() { ContentId = videoId, Owner = mylist, Type = PlaylistItemType.Video, }); }
public void PlayVideo(IVideoContent video) { if (!(NiconicoRegex.IsVideoId(video.Id) || video.Id.All(x => '0' <= x && x <= '9'))) { return; } DefaultPlaylist.AddMylistItem(video.Id, ContentInsertPosition.Head); Play(new QualityVideoPlaylistItem() { ContentId = video.Id, Owner = video.OnwerPlaylist ?? DefaultPlaylist, Title = video.Label, Type = PlaylistItemType.Video, }); }
// あとで見るプレイリストを通じての再生をサポート // プレイリストが空だった場合、その場で再生を開始 public void PlayVideo(string contentId, string title = "", NicoVideoQuality?quality = null) { if (!NiconicoRegex.IsVideoId(contentId) && !int.TryParse(contentId, out var temp)) { return; } var result = DefaultPlaylist.AddMylistItem(contentId, ContentInsertPosition.Head); Play(new QualityVideoPlaylistItem() { ContentId = contentId, Owner = DefaultPlaylist, Title = title, Type = PlaylistItemType.Video, Quality = quality }); }
public void PlayVideoWithPlaylist(IVideoContent video) { if (!(NiconicoRegex.IsVideoId(video.Id) || video.Id.All(x => '0' <= x && x <= '9'))) { return; } if (video.Playlist != null) { var playlistItem = video.Playlist.PlaylistItems.FirstOrDefault(x => x.ContentId == video.Id); if (playlistItem != null) { Play(playlistItem); } } else { var newItem = DefaultPlaylist.AddVideo(video.Id, video.Label, ContentInsertPosition.Head); Play(newItem); } }
static bool IsVideoId(string videoId) { return(NiconicoRegex.IsVideoId(videoId) && !int.TryParse(videoId, out var _)); }