/// <summary>動画を検索する</summary> /// <param name="Keyword">検索キーワード</param> /// <param name="SearchPage">検索ページの指定、1~nの間の数値を指定する</param> /// <param name="SearchType">検索方法を指定する</param> /// <param name="SearchOption">検索オプションを指定する、Filterメンバは無効</param> public Session<Response<VideoInfo[]>> Search( string Keyword, int SearchPage, SearchType SearchType, SearchOption SearchOption) { var session = new Session<Response<VideoInfo[]>>(); session.SetAccessers(new Func<byte[], APIs.IAccesser>[] { (data) => { var accesser = new APIs.search.Accesser(); accesser.Setting( context.CookieContainer, SearchType.ToKey(), Keyword, SearchPage.ToString(), SearchOption.SortOrder.ToKey(), SearchOption.SortTarget.ToKey()); return accesser; } }, (data) => Converter.VideoInfoResponse(context, new APIs.search.Parser().Parse(data))); return session; }
/// <summary> /// マイリストを取得する /// </summary> public Session<Response<Mylist>> DownloadMylist() { var session = new Session<Response<Mylist>>(); session.SetAccessers( new Func<byte[], APIs.IAccesser>[] { (data) => { var accesser = new APIs.mylistvideo.Accesser(); accesser.Setting( context.CookieContainer, target.ID); return accesser; } }, (data) => { return Converter.MylistResponse( context, new APIs.mylistvideo.Parser().Parse(data), target.ID); }); return session; }
/// <summary> /// ユーザー情報を取得する /// </summary> public Session<Response<User>> DownloadUser() { var session = new Session<Response<User>>(); var accessorList = new List<Func<byte[], APIs.IAccesser>>(); if (!htmlCache.IsAvailab) accessorList.Add( (data) => { var accesser = new APIs.user_page_html.Accesser(); accesser.Setting( context.CookieContainer, target.ID); return accesser; }); session.SetAccessers( accessorList.ToArray(), (data) => { var parser = new APIs.user_page_html.Parser(); if (data != null) htmlCache.Value = parser.Parse(data); return Converter.UserResponse(context, parser.Parse(htmlCache)); }); return session; }
/// <summary>ログインする</summary> /// <param name="MailAddress">メールアドレス</param> /// <param name="Password">パスワード</param> public Session<User> Login(string MailAddress, string Password) { var session = new Session<User>(); session.SetAccessers(new Func<byte[], APIs.IAccesser>[] { (data) => { var accesser = new APIs.login.Accesser(); accesser.Setting(context.CookieContainer, MailAddress, Password); return accesser; } }, (data) => new APIs.login.Parser().Parse(data)); return session; }
/// <summary> /// 動画の詳細情報を取得する /// </summary> public Session<Response<VideoInfo>> DownloadVideoInfo(DownloadVideoInfoUseAPI DownloadVideoInfoUseAPI) { var session = new Session<Response<VideoInfo>>(); switch (DownloadVideoInfoUseAPI) { case DownloadVideoInfoUseAPI.html: #region var accessorList = new List<Func<byte[], APIs.IAccesser>>(); if (!htmlCache.IsAvailab) { accessorList.Add((data) => { var accesser = new APIs.video_page_html.Accesser(); accesser.Setting( context.CookieContainer, target.ID); return accesser; }); } session.SetAccessers( accessorList.ToArray(), (data) => { if (data != null) htmlCache.Value = new APIs.video_page_html.Parser().Parse(data); var result = new Response<VideoInfo>(); result.Status = Status.OK; result.Result = context.IDContainer.GetVideoInfo(target.ID); result.Result.Description = new APIs.video_page_html.html_video_info().Parse(htmlCache); return result; }); #endregion break; case DownloadVideoInfoUseAPI.getthumbinfo: #region session.SetAccessers(new Func<byte[], APIs.IAccesser>[] { (data) => { var accesser = new APIs.getthumbinfo.Accesser(); accesser.Setting( context.CookieContainer, target.ID); return accesser; } }, (data) => Converter.VideoInfoResponse(context, new APIs.getthumbinfo.Parser().Parse(data))); #endregion break; default: throw new Exception(); } return session; }
private Session<Response<Tag[]>> EditTag(Tag EditTag, string cmd) { var session = new Session<Response<Tag[]>>(); var accessorList = new List<Func<byte[], APIs.IAccesser>>(); if (!htmlCache.IsAvailab) { accessorList.Add(new Func<byte[], APIs.IAccesser>((byte[] data) => { var accesser = new APIs.video_page_html.Accesser(); accesser.Setting( context.CookieContainer, target.ID); return accesser; })); } accessorList.Add(new Func<byte[], APIs.IAccesser>((byte[] data) => { if (data != null) htmlCache.Value = new APIs.video_page_html.Parser().Parse(data); if (token == "") token = new APIs.video_page_html.csrf_token().Parse(htmlCache); if (watch_auth_key == "") watch_auth_key = new APIs.video_page_html.watch_auth_key().Parse(htmlCache); var accesser = new APIs.tag_edit.UploadAccesser(); accesser.Setting( context.CookieContainer, target.ID, "json", cmd, EditTag.Name, token, watch_auth_key, (EditTag.IsLock == true) ? "1" : "0"); return accesser; })); session.SetAccessers( accessorList.ToArray(), (data) => Converter.TagsResponse(new APIs.tag_edit.Parser().Parse(data))); return session; }
/// <summary> /// タグを取得する /// </summary> public Session<Response<Tag[]>> DownloadTags() { var session = new Session<Response<Tag[]>>(); session.SetAccessers(new Func<byte[], APIs.IAccesser>[] { new Func<byte[], APIs.IAccesser>((byte[] data) => { var accesser = new APIs.tag_edit.DownloadAccesser(); accesser.Setting( context.CookieContainer, target.ID, "json", "tags"); return accesser; }) }, (data) => Converter.TagsResponse(new APIs.tag_edit.Parser().Parse(data))); return session; }
/// <summary> /// コメントをダウンロードする /// </summary> public Session<Response<Comment[]>> DownloadComment() { var session = new Session<Response<Comment[]>>(); var accessorList = new List<Func<byte[], APIs.IAccesser>>(); if (!videoCache.IsAvailab) { accessorList.Add((data) => { var accesser = new APIs.getflv.Accesser(); accesser.Setting( context.CookieContainer, target.ID); return accesser; }); } accessorList.AddRange(new Func<byte[], APIs.IAccesser>[] { (data) => { if (data != null) videoCache.Value = new APIs.getflv.Parser().Parse(data); var accesser = new APIs.download_comment.Accesser(); accesser.Setting( context.CookieContainer, videoCache.Value["ms"], videoCache.Value["thread_id"]); return accesser; }, }); session.SetAccessers( accessorList.ToArray(), (data) => { var Serial = new APIs.download_comment.Parser().Parse(data); ticket = Serial.thread[0].ticket; block_no = ((Serial.thread[0].last_res + 1) / 100).ToString(); return Converter.CommentResponse(Serial); }); return session; }
/// <summary> /// コメントをアップロードする /// </summary> /// <param name="Comment">投稿するコメント</param> public Session<Response> UploadComment(Comment Comment) { var session = new Session<Response>(); var accessorList = new List<Func<byte[], APIs.IAccesser>>(); if (!videoCache.IsAvailab) accessorList.Add((data) => { var accesser = new APIs.getflv.Accesser(); accesser.Setting( context.CookieContainer, target.ID); return accesser; }); if (postkey == "") accessorList.Add((data) => { if (data != null) videoCache.Value = new APIs.getflv.Parser().Parse(data); var accesser = new APIs.getpostkey.Accesser(); accesser.Setting( context.CookieContainer, block_no, videoCache.Value["thread_id"]); return accesser; }); accessorList.Add((data) => { if (postkey == "") postkey = new APIs.getpostkey.Parser().Parse(data); var accesser = new APIs.upload_comment.Accesser(); accesser.Setting( context.CookieContainer, videoCache.Value["ms"], videoCache.Value["thread_id"], ((int)(Comment.PlayTime.TotalMilliseconds / 10)).ToString(), Comment.Command, ticket, videoCache.Value["user_id"], postkey, Comment.Body); return accesser; }); session.SetAccessers( accessorList.ToArray(), (data) => Converter.Response(new APIs.upload_comment.Parser().Parse(data))); return session; }
/// <summary> /// 動画をダウンロードする /// </summary> public Session<WebResponse> DownloadVideo() { var session = new Session<WebResponse>(); var accessorList = new List<Func<byte[], APIs.IAccesser>>(); var isVideoCacheProgress = false; var isHtmlCacheProgress = false; if (!videoCache.IsAvailab) { isVideoCacheProgress = true; accessorList.Add((data) => { var accesser = new APIs.getflv.Accesser(); accesser.Setting( context.CookieContainer, target.ID); return accesser; }); } if (!htmlCache.IsAvailab) { isHtmlCacheProgress = true; accessorList.Add( (data) => { if (data != null) videoCache.Value = new APIs.getflv.Parser().Parse(data); var accesser = new APIs.video_page_html.Accesser(); accesser.Setting( context.CookieContainer, target.ID); return accesser; }); } accessorList.Add( (data) => { if (data != null) if (isHtmlCacheProgress) htmlCache.Value = new APIs.video_page_html.Parser().Parse(data); else if (isVideoCacheProgress) videoCache.Value = new APIs.getflv.Parser().Parse(data); var accesser = new APIs.getvideo.Accesser(); accesser.Setting( context.CookieContainer, videoCache.Value["url"]); return accesser; }); session.SetAccessers(accessorList.ToArray(), null); return session; }