public async Task<DmcSession> CreateAsync() { var xml = new XmlDocument(); var session = xml.CreateElement("session"); { var recipeId = xml.CreateElement("recipe_id"); recipeId.InnerText = GetDmc.RecipeId; session.AppendChild(recipeId); var contentId = xml.CreateElement("content_id"); contentId.InnerText = GetDmc.ContentId; session.AppendChild(contentId); var contentType = xml.CreateElement("content_type"); contentType.InnerText = "movie"; session.AppendChild(contentType); var protocol = xml.CreateElement("protocol"); { var name = xml.CreateElement("name"); name.InnerText = "http"; protocol.AppendChild(name); var parameters = xml.CreateElement("parameters"); { var httpParameters = xml.CreateElement("http_parameters"); { var method = xml.CreateElement("method"); method.InnerText = "GET"; httpParameters.AppendChild(method); var parameter = xml.CreateElement("parameters"); { var httpOutputDownloadParameters = xml.CreateElement("http_output_download_parameters"); { var fileExtension = xml.CreateElement("file_extension"); fileExtension.InnerText = "mp4"; httpOutputDownloadParameters.AppendChild(fileExtension); } parameter.AppendChild(httpOutputDownloadParameters); } httpParameters.AppendChild(parameter); } parameters.AppendChild(httpParameters); } protocol.AppendChild(parameters); } session.AppendChild(protocol); var priority = xml.CreateElement("priority"); priority.InnerText = GetDmc.Priority.ToString(); session.AppendChild(priority); var contentSrcIdSets = xml.CreateElement("content_src_id_sets"); { var contentSrcIdSet = xml.CreateElement("content_src_id_set"); { var contentSrcIds = xml.CreateElement("content_src_ids"); { var srcIdToMux = xml.CreateElement("src_id_to_mux"); { var videoSrcIds = xml.CreateElement("video_src_ids"); foreach(var video in GetDmc.Videos) { var str = xml.CreateElement("string"); str.InnerText = video; videoSrcIds.AppendChild(str); } srcIdToMux.AppendChild(videoSrcIds); var audioSrcIds = xml.CreateElement("audio_src_ids"); foreach(var video in GetDmc.Audios) { var str = xml.CreateElement("string"); str.InnerText = video; audioSrcIds.AppendChild(str); } srcIdToMux.AppendChild(audioSrcIds); } contentSrcIds.AppendChild(srcIdToMux); } contentSrcIdSet.AppendChild(contentSrcIds); } contentSrcIdSets.AppendChild(contentSrcIdSet); } session.AppendChild(contentSrcIdSets); var keepMethod = xml.CreateElement("keep_method"); { var heartBeat = xml.CreateElement("heartbeat"); { var lifetime = xml.CreateElement("lifetime"); lifetime.InnerText = GetDmc.HeartbeatLifeTime.ToString(); heartBeat.AppendChild(lifetime); } keepMethod.AppendChild(heartBeat); } session.AppendChild(keepMethod); var timingConstraint = xml.CreateElement("timing_constraint"); timingConstraint.InnerText = "unlimited"; session.AppendChild(timingConstraint); var sessionOperationAuth = xml.CreateElement("session_operation_auth"); { var sessionOperationAuthBySignature = xml.CreateElement("session_operation_auth_by_signature"); { var token = xml.CreateElement("token"); token.InnerText = GetDmc.Token; sessionOperationAuthBySignature.AppendChild(token); var signature = xml.CreateElement("signature"); signature.InnerText = GetDmc.Signature; sessionOperationAuthBySignature.AppendChild(signature); } sessionOperationAuth.AppendChild(sessionOperationAuthBySignature); } session.AppendChild(sessionOperationAuth); var contentAuth = xml.CreateElement("content_auth"); { var authType = xml.CreateElement("auth_type"); authType.InnerText = GetDmc.AuthType; contentAuth.AppendChild(authType); var serviceId = xml.CreateElement("service_id"); serviceId.InnerText = "nicovideo"; contentAuth.AppendChild(serviceId); var serviceUserId = xml.CreateElement("service_user_id"); serviceUserId.InnerText = GetDmc.ServiceUserId; contentAuth.AppendChild(serviceUserId); var maxContentCount = xml.CreateElement("max_content_count"); maxContentCount.InnerText = "10"; contentAuth.AppendChild(maxContentCount); var contentKeyTimeout = xml.CreateElement("content_key_timeout"); contentKeyTimeout.InnerText = GetDmc.ContentKeyTimeout.ToString(); contentAuth.AppendChild(contentKeyTimeout); } session.AppendChild(contentAuth); var clientInfo = xml.CreateElement("client_info"); { var playerId = xml.CreateElement("player_id"); playerId.InnerText = GetDmc.PlayerId; clientInfo.AppendChild(playerId); } session.AppendChild(clientInfo); } xml.AppendChild(session); try { var query = new GetRequestQuery(GetDmc.ApiUrl); query.AddQuery("_format", "xml"); query.AddQuery("suppress_response_codes", "true"); var request = new HttpRequestMessage(HttpMethod.Post, new Uri(query.TargetUrl)); request.Content = new StringContent(xml.OuterXml); request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/x-www-form-urlencoded"); var a = await NicoNicoWrapperMain.Session.GetAsync(request); var ret = new DmcSession(); var doc = new XmlDocument(); doc.LoadXml(a); ret.Id = doc.SelectSingleNode("/object/data/session/id").InnerText; ret.ContentUri = doc.SelectSingleNode("/object/data/session/content_uri").InnerText; LastResponseXml = doc.SelectSingleNode("/object/data").InnerXml; return ret; } catch(RequestTimeout) { return null; } }
public async Task <DmcSession> CreateAsync() { dynamic json = new DynamicJson(); json.session = new { recipe_id = Dmc.RecipeId, content_id = Dmc.ContentId, content_type = "movie", content_src_id_sets = new List <dynamic>(), timing_constraint = "unlimited", keep_method = new { heartbeat = new { lifetime = Dmc.HeartbeatLifeTime } }, protocol = new { name = "http", parameters = new { http_parameters = new { parameters = new { http_output_download_parameters = new {} } } } }, content_uri = "", session_operation_auth = new { session_operation_auth_by_signature = new { token = Dmc.Token, signature = Dmc.Signature } }, content_auth = new { auth_type = Dmc.AuthType, max_content_count = 10, content_key_timeout = Dmc.ContentKeyTimeout, service_id = "nicovideo", service_user_id = Dmc.ServiceUserId }, client_info = new { player_id = Dmc.PlayerId }, priority = Dmc.Priority }; var mux = new { video_src_ids = new List <string>(), audio_src_ids = new List <string>() }; foreach (var video in Dmc.Videos) { mux.video_src_ids.Add(video); } foreach (var audio in Dmc.Audios) { mux.audio_src_ids.Add(audio); } json.session.content_src_id_sets = new[] { new { content_src_ids = new[] { new { src_id_to_mux = mux } } } }; try { var str = json.ToString(); var query = new GetRequestQuery(Dmc.ApiUrls.First()); query.AddQuery("_format", "json"); var request = new HttpRequestMessage(HttpMethod.Post, new Uri(query.TargetUrl)) { Content = new StringContent(json.ToString()) }; request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/json"); var a = await App.ViewModelRoot.CurrentUser.Session.GetAsync(request); var ret = new DmcSession(); var doc = DynamicJson.Parse(a); ret.Id = doc.data.session.id; ret.ContentUri = doc.data.session.content_uri; LastResponseXml = doc.data.ToString(); return(ret); } catch (RequestFailed) { return(null); } }