Example #1
0
        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);
            }
        }
Example #2
0
        public void AddWatchAfterPlaylist(string contentId)
        {
            if (!NiconicoRegex.IsVideoId(contentId) && !int.TryParse(contentId, out var temp))
            {
                return;
            }

            var result = DefaultPlaylist.AddMylistItem(contentId, ContentInsertPosition.Tail);
        }
Example #3
0
        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}"));
        }
Example #4
0
        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を開く
                    }
                }
            }
        }
Example #5
0
 private async Task ExtractNicoContentId_And_SubmitSuggestion(string contentId)
 {
     if (NiconicoRegex.IsVideoId(contentId))
     {
         SubmitVideoContentSuggestion(contentId);
     }
     else if (NiconicoRegex.IsLiveId(contentId))
     {
         await SubmitLiveContentSuggestion(contentId);
     }
 }
Example #6
0
        // あとで見るプレイリストを通じての再生をサポート
        // プレイリストが空だった場合、その場で再生を開始
        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);
        }
Example #7
0
        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);
        }
Example #8
0
        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}"));
        }
Example #9
0
        // 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);
            }
        }
Example #10
0
        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,
            });
        }
Example #11
0
        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,
            });
        }
Example #12
0
        // あとで見るプレイリストを通じての再生をサポート
        // プレイリストが空だった場合、その場で再生を開始
        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
            });
        }
Example #13
0
        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);
            }
        }
Example #14
0
 static bool IsVideoId(string videoId)
 {
     return(NiconicoRegex.IsVideoId(videoId) && !int.TryParse(videoId, out var _));
 }