public static async Task <ContentManageResult> RemoveFollowCommunityAsync(NiconicoContext context, string communityId) { var token = await GetCommunityLeaveTokenAsync(context, communityId); var url = NiconicoUrls.CommunityLeavePageUrl + token.CommunityId; var dict = new Dictionary <string, string>(); dict.Add("time", token.Time); dict.Add("commit_key", token.CommitKey); dict.Add("commit", token.Commit); #if WINDOWS_UWP var content = new HttpFormUrlEncodedContent(dict); #else var content = new FormUrlEncodedContent(dict); #endif var request = new HttpRequestMessage(HttpMethod.Post, new Uri(url)); request.Headers.Add("Upgrade-Insecure-Requests", "1"); request.Headers.Add("Referer", url); request.Headers.Add("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"); request.Content = content; var postResult = await context.SendAsync(request, HttpCompletionOption.ResponseHeadersRead); Debug.WriteLine(postResult); return(postResult.IsSuccessStatusCode ? ContentManageResult.Success : ContentManageResult.Failed); }
public static async Task <bool> UpdateMylistGroupAsync(NiconicoContext context, string mylistId, string name, string description, bool isPublic, MylistSortKey defaultSortKey, MylistSortOrder defaultSortOrder) { var dict = new Dictionary <string, string>(); dict.Add("name", name); dict.Add("description", description); dict.Add("isPublic", isPublic.ToString1Or0()); dict.Add("defaultSortKey", defaultSortKey.ToQueryString()); dict.Add("defaultSortOrder", defaultSortOrder.ToQueryString()); var request = new HttpRequestMessage(HttpMethod.Put, new Uri($"https://nvapi.nicovideo.jp/v1/users/me/mylists/{mylistId}")); #if WINDOWS_UWP request.Content = new HttpFormUrlEncodedContent(dict); request.Headers.Referer = new Uri($"https://www.nicovideo.jp/my/mylist/{mylistId}"); #else request.Content = new FormUrlEncodedContent(dict); request.Headers.Referrer = new Uri($"https://www.nicovideo.jp/my/mylist/{mylistId}"); #endif request.Headers.Add("X-Request-With", "https://www.nicovideo.jp"); var res = await context.SendAsync(request); var json = await res.Content.ReadAsStringAsync(); var result = JsonConvert.DeserializeObject <MylistUpdateResultResponse>(json); return(result.Meta.Status == 200); }
public static async Task <ContentManageResult> AddFollowCommunityAsync(NiconicoContext context, string communityId) { var communityIdWoCo = communityId.Substring(2); var communityJoinPageUrl = new Uri($"https://com.nicovideo.jp/motion/{communityId}"); var uri = $"https://com.nicovideo.jp/api/v1/communities/{communityIdWoCo}/follows.json"; // await PrepareCorsAsscessAsync(HttpMethod.Post, uri); var request = new HttpRequestMessage(HttpMethod.Post, new Uri(uri)); #if WINDOWS_UWP request.Headers.Referer = communityJoinPageUrl; request.Headers.Host = new Windows.Networking.HostName("com.nicovideo.jp"); #else request.Headers.Referrer = communityJoinPageUrl; request.Headers.Host = "com.nicovideo.jp"; #endif request.Headers.Add("Origin", "https://com.nicovideo.jp"); request.Headers.Add("X-Requested-By", communityJoinPageUrl.OriginalString); var message = await context.SendAsync(request); var json = await message.Content.ReadAsStringAsync(); var result = Newtonsoft.Json.JsonConvert.DeserializeObject <FollowResultResponse>(json); return(result.Meta.Status == 200 || result.Meta.Status == 201 ? ContentManageResult.Success : ContentManageResult.Failed); }
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 static async Task DmcSessionExitHeartbeatAsync( NiconicoContext context, DmcWatchResponse watch, DmcSessionResponse sessionRes ) { var session = watch.Media.Delivery.Movie.Session; var sessionUrl = $"{session.Urls[0].UrlUnsafe}/{sessionRes.Data.Session.Id}?_format=json&_method=DELETE"; var message = new HttpRequestMessage(HttpMethod.Post, new Uri(sessionUrl)); message.Headers.Add("Access-Control-Request-Method", "POST"); message.Headers.Add("Access-Control-Request-Headers", "content-type"); message.Headers.UserAgent.Add(context.HttpClient.DefaultRequestHeaders.UserAgent.First()); message.Headers.Add("Accept", "application/json"); var requestJson = JsonConvert.SerializeObject(sessionRes.Data, new JsonSerializerSettings() { NullValueHandling = NullValueHandling.Ignore }); #if WINDOWS_UWP message.Content = new HttpStringContent(requestJson, Windows.Storage.Streams.UnicodeEncoding.Utf8, "application/json"); #else message.Content = new StringContent(requestJson, UnicodeEncoding.UTF8, "application/json"); #endif var result = await context.SendAsync(message, HttpCompletionOption.ResponseHeadersRead); if (!result.IsSuccessStatusCode) { System.Diagnostics.Debug.WriteLine(result.ToString()); } }
public static async Task DmcSessionFirstHeartbeatAsync( NiconicoContext context, DmcWatchResponse watch, DmcSessionResponse sessionRes ) { var session = watch.Media.Delivery.Movie.Session; var sessionUrl = $"{session.Urls[0].UrlUnsafe}/{sessionRes.Data.Session.Id}?_format=json&_method=PUT"; var message = new HttpRequestMessage(HttpMethod.Options, new Uri(sessionUrl)); message.Headers.Add("Access-Control-Request-Method", "POST"); message.Headers.Add("Access-Control-Request-Headers", "content-type"); #if WINDOWS_UWP message.Headers.UserAgent.Add(context.HttpClient.DefaultRequestHeaders.UserAgent.First()); #else message.Headers.UserAgent.Add(context.HttpClient.DefaultRequestHeaders.UserAgent.First()); #endif var result = await context.SendAsync(message, HttpCompletionOption.ResponseHeadersRead); if (!result.IsSuccessStatusCode) { System.Diagnostics.Debug.WriteLine(result.ToString()); } }
public static async Task <string> PostReservationAsync(NiconicoContext context, string vid, bool overwrite) { var dict = new Dictionary <string, string>(); if (vid.StartsWith("lv")) { vid = vid.Remove(0, 2); } if (!int.TryParse(vid, out var vidNumber)) { throw new ArgumentException("vid can not accept NiconicoLiveContentId."); } dict.Add(nameof(vid), vid); dict.Add(nameof(overwrite), overwrite.ToString1Or0()); var requestMessage = new HttpRequestMessage(HttpMethod.Post, new Uri("http://live.nicovideo.jp/api/timeshift.reservations")) { #if WINDOWS_UWP Content = new HttpFormUrlEncodedContent(dict) #else Content = new FormUrlEncodedContent(dict) #endif }; requestMessage.Headers.Add("origin", "https://live.nicovideo.jp"); var response = await context.SendAsync(requestMessage, HttpCompletionOption.ResponseContentRead); return(await response.Content.ReadAsStringAsync()); }
public static async Task <bool> SendOfficialHlsWatchAsync( NiconicoContext context, string contentId, string trackId ) { var uri = new Uri($"https://nvapi.nicovideo.jp/v1/2ab0cbaa/watch?t={Uri.EscapeDataString(trackId)}"); var refererUri = new Uri($"https://www.nicovideo.jp/watch/{contentId}"); { var optionReq = new HttpRequestMessage(HttpMethod.Options, uri); optionReq.Headers.Add("Access-Control-Request-Headers", "x-frontend-id,x-frontend-version"); optionReq.Headers.Add("Access-Control-Request-Method", "GET"); optionReq.Headers.Add("Origin", "https://www.nicovideo.jp"); #if WINDOWS_UWP optionReq.Headers.Referer = refererUri; #else optionReq.Headers.Referrer = refererUri; #endif var optionRes = await context.SendAsync(optionReq); if (!optionRes.IsSuccessStatusCode) { return(false); } } //var allowHeaders = res.Headers["Access-Control-Allow-Headers"]; { var watchReq = new HttpRequestMessage(HttpMethod.Get, uri); watchReq.Headers.Add("X-Frontend-Id", "6"); watchReq.Headers.Add("X-Frontend-Version", "0"); #if WINDOWS_UWP watchReq.Headers.Referer = refererUri; #else watchReq.Headers.Referrer = refererUri; #endif watchReq.Headers.Add("Origin", "https://www.nicovideo.jp"); var watchRes = await context.SendAsync(watchReq); return(watchRes.IsSuccessStatusCode); } }
public static async Task <ContentManageResult> RemoveMylistItemAsync(NiconicoContext context, string group_id, params string[] itemIdList) { string url = $"https://nvapi.nicovideo.jp/v1/users/me/mylists/{group_id}/items?itemIds=" + string.Join("%2C", itemIdList); var res = await context.SendAsync(new HttpRequestMessage(HttpMethod.Delete, new Uri(url))); var json = await res.Content.ReadAsStringAsync(); var result = Newtonsoft.Json.JsonConvert.DeserializeObject <MylistContentResult>(json); return(result.Meta.Status == 200 ? ContentManageResult.Success : ContentManageResult.Failed); }
// Liveのwatchページから再生準備情報を取得します public static async Task <string> GetLiveWatchPageHtmlAsync(NiconicoContext context, string liveId, bool forceHtml5 = true) { #if WINDOWS_UWP var request = new HttpRequestMessage(HttpMethod.Get, new Uri(NiconicoUrls.Live2WatchPageUrl + liveId)); #else var request = new HttpRequestMessage(HttpMethod.Get, NiconicoUrls.Live2WatchPageUrl + liveId); #endif request.Headers.Add(@"Cookie", "player_version=leo"); var res = await context.SendAsync(request); return(await res.Content.ReadAsStringAsync()); }
// 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); } }
// Communityへの登録 // http://com.nicovideo.jp/motion/co1894176 // mode:commit // title:登録申請 // comment: // notify: // POST public static async Task <ContentManageResult> AddFollowCommunityAsync___( NiconicoContext context , string communityId , string title = "" , string comment = "" , bool notify = false ) { // http://com.nicovideo.jp/motion/id にアクセスして200かを確認 var url = NiconicoUrls.CommunityJoinPageUrl + communityId; var res = await context.GetAsync(url); if (!res.IsSuccessStatusCode) { return(ContentManageResult.Failed); } await Task.Delay(1000); // http://com.nicovideo.jp/motion/id に情報をpostする var dict = new Dictionary <string, string>() { { "mode", "commit" }, { "title", title ?? "フォローリクエスト" }, { "comment", comment ?? "" }, { "notify", notify ? "1" : "" }, }; var request = new HttpRequestMessage(HttpMethod.Post, new Uri(url)); request.Headers.Add("Upgrade-Insecure-Requests", "1"); request.Headers.Add("Referer", url); request.Headers.Add("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"); #if WINDOWS_UWP request.Content = new HttpFormUrlEncodedContent(dict); #else request.Content = new FormUrlEncodedContent(dict); #endif var postResult = await context.SendAsync(request, HttpCompletionOption.ResponseHeadersRead); Debug.WriteLine(postResult); return(postResult.IsSuccessStatusCode ? ContentManageResult.Success : ContentManageResult.Failed); }
public static async Task <bool> RemoveMylistGroupAsync(NiconicoContext context, string mylistId) { var request = new HttpRequestMessage(HttpMethod.Delete, new Uri($"https://nvapi.nicovideo.jp/v1/users/me/mylists/{mylistId}")); #if WINDOWS_UWP request.Headers.Referer = new Uri($"https://www.nicovideo.jp/my/mylist/{mylistId}"); #else request.Headers.Referrer = new Uri($"https://www.nicovideo.jp/my/mylist/{mylistId}"); #endif request.Headers.Add("X-Request-With", "https://www.nicovideo.jp"); var res = await context.SendAsync(request); var json = await res.Content.ReadAsStringAsync(); var result = JsonConvert.DeserializeObject <MylistUpdateResultResponse>(json); return(result.Meta.Status == 200); }