public JikkenRecordProcess( CookieContainer container, string[] recFolderFile, RecordingManager rm, RecordFromUrl rfu, JikkenRecorder jr, long openTime, bool isTimeShift, string lvid, TimeShiftConfig tsConfig, string userId, bool isPremium, TimeSpan programTime, WatchingInfo wi, long releaseTime, bool isSub, bool isRtmp) { this.container = container; this.recFolderFile = recFolderFile; this.rm = rm; this.rfu = rfu; this.jr = jr; this.openTime = openTime; this.isTimeShift = isTimeShift; this.lvid = lvid; this.tsConfig = tsConfig; this.userId = userId; this.isPremium = isPremium; this.programTime = programTime; this.wi = wi; this.msUri = wi.msUri; isGetCommentXml = bool.Parse(rm.cfg.get("IsgetcommentXml")); isJikken = true; this.releaseTime = releaseTime; this.isSub = isSub; this.isRtmp = isRtmp; }
private int getJikkenPageType(string res, bool isSub, out JikkenRecorder jr, CookieContainer cc) { // if (jr == null) //var ccInd = (isSub) ? 1 : 0; var ccInd = 0; jr = new JikkenRecorder(res, lvid, cc, rm.cfg, rm, this, isSub); // rm.jr = jr; return(jr.getPageType()); }
private int _rec(string url) { JikkenRecorder jr = null; //RtmpRecorder rr = null; var isRtmp = isRtmpMain; CookieContainer cc; var pageType = this.getPageType(url, true, ref jr, out cc); if (pageType == -1) { return(2); } util.debugWriteLine("pagetype " + pageType + " container " + cc); if (cc == null || cc == null) { rm.form.addLogText("ログインに失敗しました。"); if (bool.Parse(rm.cfg.get("IsmessageBox")) && util.isShowWindow) { rm.form.formAction(() => MessageBox.Show("ログインに失敗しました。\n" + lvid, "", MessageBoxButtons.OK, MessageBoxIcon.None), false); } if (bool.Parse(rm.cfg.get("IsfailExit"))) { rm.rfu = null; rm.form.close(); } return(2); } util.debugWriteLine("pagetype " + pageType); while (this == rm.rfu) { util.debugWriteLine("pagetype " + pageType); if (pageType == 0 || pageType == 7) { var isJikken = res.IndexOf("siteId":"nicocas") > -1; int recResult = 0; if (isPlayOnlyMode && pageType == 7 && isRtmp) { isRtmp = false; } if (isJikken) { //実験放送 なくし //recResult = jr.record(res, isRtmp); } else { var isTimeShift = pageType == 7; h5r = new Html5Recorder(url, cc, lvid, rm, this, isTimeShift); recResult = h5r.record(res, isRtmp, pageType); } util.debugWriteLine("recresult " + recResult); return(recResult); } else if (pageType == 1) { rm.form.addLogText("満員です。"); if (bool.Parse(rm.cfg.get("Isretry"))) { System.Threading.Thread.Sleep(10000); while (this == rm.rfu) { try { res = util.getPageSource(url, cc); isJikken = res.IndexOf("siteId":"nicocas") > -1; //var _pageType = (isJikken) ? getJikkenPageType(res, out jr, cc) : util.getPageType(res); var _pageType = (isJikken) ? 0 : util.getPageType(res); util.debugWriteLine(_pageType); if (pageType != 1) { continue; } System.Threading.Thread.Sleep(5000); } catch (Exception e) { util.debugWriteLine(e.Message + " " + e.StackTrace + " "); } } continue; } else { return(2); } } else if (pageType == 5) { if (bool.Parse(rm.cfg.get("Isretry"))) { rm.form.addLogText("接続エラー。10秒後リトライします。"); System.Threading.Thread.Sleep(10000); try { pageType = getPageType(url, false, ref jr, out cc); util.debugWriteLine("pagetype_ " + pageType); } catch (Exception e) { util.debugWriteLine(e.Message + " " + e.StackTrace + " "); } continue; } else { rm.form.addLogText("接続エラー"); return(2); } } else if (pageType == 6) { util.debugWriteLine("pagetype 6 process"); System.Threading.Thread.Sleep(3000); try { pageType = getPageType(url, false, ref jr, out cc); util.debugWriteLine("pagetype_ " + pageType); } catch (Exception e) { util.debugWriteLine(e.Message + " " + e.StackTrace + " "); rm.form.addLogText(e.Message + " " + e.StackTrace + " "); } continue; } else if (pageType == 4) { rm.form.addLogText("require_community_member"); util.debugWriteLine(rm.cfg.get("IsautoFollowComgen")); if (bool.Parse(rm.cfg.get("IsautoFollowComgen"))) { var isFollow = new FollowCommunity().followCommunity(res, cc, rm.form, rm.cfg, isPlayOnlyMode); util.debugWriteLine("isfollow " + isFollow); if (isFollow) { pageType = getPageAfterFollow(url, lvid, ref jr, out cc); util.debugWriteLine("pagetype_ " + pageType); continue; } } if (bool.Parse(rm.cfg.get("IsmessageBox")) && util.isShowWindow) { var ret = rm.form.formAction(() => MessageBox.Show("コミュニティに入る必要があります:\nrequire_community_member/" + lvid, "", MessageBoxButtons.OK, MessageBoxIcon.None), false); if (!ret) { return(2); } } if (bool.Parse(rm.cfg.get("IsfailExit"))) { rm.rfu = null; rm.form.close(); } return(2); } else if (pageType == 8) { rm.form.addLogText("この番組の視聴にはシリアル番号が必要です。"); return(2); } else if (pageType == 9) { rm.form.addLogText("この番組の視聴には予約が必要です。"); DialogResult isYoyakuRes = DialogResult.None; var reserveMessage = rm.cfg.get("reserveMessage"); if (reserveMessage != "ダイアログで確認") { isYoyakuRes = reserveMessage == "常に予約する" ? DialogResult.Yes : DialogResult.No; } else { rm.form.formAction(() => { isYoyakuRes = MessageBox.Show(rm.form, "この番組の視聴には予約が必要です。予約しますか?", "", MessageBoxButtons.YesNo); }, false); } if (isYoyakuRes == DialogResult.No) { return(2); } var r = new Reservation(cc, lvid); //var reserveRet = r.reserve(); var reserveRet = r.live2Reserve(); if (reserveRet == "ok") { rm.form.addLogText("予約しました"); pageType = getPageType(url, false, ref jr, out cc); continue; } else { rm.form.addLogText(reserveRet); rm.form.addLogText("予約できませんでした"); if (reserveRet == "予約リストが一杯です。") { //DialogResult isOpenMypageRes = DialogResult.None; rm.form.formAction(() => { var isOpenMypageRes = MessageBox.Show(rm.form, "予約リストが一杯です。マイページを開きますか?", "", MessageBoxButtons.YesNo); if (isOpenMypageRes == DialogResult.Yes) { System.Diagnostics.Process.Start("https://live.nicovideo.jp/my"); } }, false); } return(2); } } else if (pageType == 10) { var r = new Reservation(cc, lvid).useLive2Reserve(); if (!r) { rm.form.addLogText("この番組のチケットを正常に使用できませんでした。"); return(2); } pageType = getPageType(url, false, ref jr, out cc); util.debugWriteLine("pagetype 10_ " + pageType); continue; } else if (pageType == 11) { rm.form.addLogText("この番組は有料チケットが必要です。"); return(2); } else { var mes = ""; if (pageType == 2 || pageType == 3) { mes = "この放送は終了しています。"; } rm.form.addLogText(mes); util.debugWriteLine("pagetype " + pageType + " 終了"); if (bool.Parse(rm.cfg.get("IsdeleteExit"))) { rm.rfu = null; rm.form.close(); } return(2); } } return(2); }
private int getPageAfterFollow(string url, string lvid, ref JikkenRecorder jr, out CookieContainer cc) { Uri TargetUrl = new Uri("https://live.nicovideo.jp"); Uri TargetUrl2 = new Uri("https://live2.nicovideo.jp"); for (int i = 0; this == rm.rfu; i++) { try { var cg = new CookieGetter(rm.cfg); var cgret = cg.getHtml5RecordCookie(url); cgret.Wait(); if (cgret == null || cgret.Result == null) { System.Threading.Thread.Sleep(1000); continue; } cc = cgret.Result[0]; /* * var wc = new WebHeaderCollection(); * var referer = "http://live.nicovideo.jp/gate/" + lvid; * container.Add(TargetUrl, new Cookie("_gali", "jsFollowingAdMain")); * container.Add(TargetUrl2, new Cookie("_gali", "jsFollowingAdMain")); * // container.Add(TargetUrl, new Cookie("_gali", "all")); * // container.Add(TargetUrl2, new Cookie("_gali", "all")); * * res = util.getPageSource(url + "?ref=grel", ref wc, container, ""); * * var pagetype = util.getPageType(res); */ // var pagetype = getPageType(url + "?ref=grel"); // if (pagetype != 5) return pagetype; // if (res.IndexOf("会場のご案内") < 0) break; var _url = "https://live2.nicovideo.jp/watch/" + lvid; var req = (HttpWebRequest)WebRequest.Create(_url + "?ref=grel"); req.Proxy = util.httpProxy; req.AllowAutoRedirect = true; // req.Headers = getheaders; req.Referer = "https://live.nicovideo.jp/gate/" + lvid; req.Headers.Add("Accept-Encoding", "gzip,deflate"); req.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate; //var ccInd = (isSub) ? 1 : 0; //var ccInd = 0; cc.Add(TargetUrl, new Cookie("_gali", "box" + lvid)); if (cc != null) { req.CookieContainer = cc; } using (var _res = (HttpWebResponse)req.GetResponse()) using (var dataStream = _res.GetResponseStream()) using (var reader = new StreamReader(dataStream)) { res = reader.ReadToEnd(); var getheaders = _res.Headers; var resCookie = _res.Cookies; } isJikken = res.IndexOf("siteId":"nicocas") > -1; int pagetype; // if (isRtmp) pagetype = getRtmpPageType(res, isSub, out rr, cc); //pagetype = (isJikken) ? getJikkenPageType(res, out jr, cc) : util.getPageType(res); pagetype = (isJikken) ? 0 : util.getPageType(res); if (!isJikken && pagetype != 5 && pagetype != 9 && pagetype != 4) { return(pagetype); } if (isJikken && pagetype != 4) { return(pagetype); } util.debugWriteLine(i); } catch (Exception e) { util.debugWriteLine(e.Message + " " + e.StackTrace); } System.Threading.Thread.Sleep(3000); } cc = null; return(-1); }
public int getPageType(string url, bool isLogin, ref JikkenRecorder jr, out CookieContainer cc) { var dt = DateTime.Now; var isFirst = true; CookieGetter.isLoginCheck = true; while (this == rm.rfu) { try { if (isLogin && DateTime.Now - dt > TimeSpan.FromSeconds(15)) { // cc = null; // return -1; } if (isRtmpMain) { url = url.Replace("live2.nicovideo.jp", "live.nicovideo.jp"); } var cg = new CookieGetter(rm.cfg); var cgret = cg.getHtml5RecordCookie(url); cgret.Wait(); CookieGetter.isLoginCheck = false; //if (isSub && cg.id != null) id[1] = cg.id; if (cg.id != null) { id[0] = cg.id; } if (id[0] != null && id[1] != null && id[0] == id[1]) { rm.form.addLogText("メインアカウントとサブアカウントのIDが同じでした"); util.debugWriteLine("メインアカウントとサブアカウントのIDが同じでした"); cc = null; return(-2); } // cgret.ConfigureAwait(false); if (cgret == null || cgret.Result[0] == null) { util.debugWriteLine("cgret " + cgret); if (isLogin && isFirst) { rm.form.addLogText(cg.log); // rm.form.addLogText("ログインに失敗しました。"); isFirst = false; } if (bool.Parse(rm.cfg.get("IsdeleteExit"))) { cc = null; rm.rfu = null; rm.form.close(); return(2); } if (cg.reason != null) { cc = null; if (cg.reason == "not_login") { rm.form.formAction(() => MessageBox.Show("ログインに失敗しました。\n" + lvid)); } return(-1); } System.Threading.Thread.Sleep(3000); continue; } // if (cgret == null) return true; cc = cgret.Result[0]; util.debugWriteLine("container " + cc); res = cg.pageSource; // Uri TargetUrl = new Uri("http://live.nicovideo.jp/"); // util.debugWriteLine("1 " + container.GetCookieHeader(TargetUrl)); // TargetUrl = new Uri("http://live2.nicovideo.jp/"); // util.debugWriteLine("2 " + container.GetCookieHeader(TargetUrl)); //if (res.IndexOf("siteId":"nicolive2") > -1) { // if (isRtmp) return getRtmpPageType(res, isSub, out rr, cc); if (isRtmpMain) { //if (res.IndexOf("%3Cgetplayerstatus%20") > -1) { if (res.IndexOf("player_type = null") > -1) { if (res.IndexOf("\"timeshift_reservation") > -1) { return(9); } else if (res.IndexOf("\"Nicolive.WatchingReservation.confirm") > -1) { return(10); } return(2); } else if (res.IndexOf("player_type = 'flash'") > -1 && res.IndexOf("%3Cgetplayerstatus%20") > -1) { var _res = util.getRegGroup(res, "(%3Cgetplayerstatus%20.+?%3C%2Fgetplayerstatus%3E)"); _res = System.Net.WebUtility.UrlDecode(_res); var isTimeShift = true; var ret = util.getPageTypeRtmp(_res, ref isTimeShift, false); //isRtmpMain = true; return(ret); } else if (res.IndexOf("<!doctype html>") == -1) { var __url = "http://live.nicovideo.jp/api/getplayerstatus?v=" + lvid; var __res = util.getPageSource(__url, cc); var isTimeShift = true; var ret = util.getPageTypeRtmp(__res, ref isTimeShift, false); res += __res; return(ret); } } var isJikken = res.IndexOf("siteId":"nicocas") > -1; if (isJikken) { //実験放送なくし //return getJikkenPageType(res, out jr, cc); } else { var _pageType = util.getPageType(res); util.debugWriteLine(_pageType); return(_pageType); } } catch (Exception e) { util.debugWriteLine(e.Message + " " + e.StackTrace); System.Threading.Thread.Sleep(3000); if (isLogin) { rm.form.addLogText("ページの取得に失敗しました。"); isLogin = false; } } } cc = null; return(5); }
public int getPageType(string url, bool isLogin, bool isSub, ref JikkenRecorder jr, out CookieContainer cc) { var dt = DateTime.Now; var isFirst = true; while (this == rm.rfu) { try { if (isLogin && DateTime.Now - dt > TimeSpan.FromSeconds(15)) { cc = null; return(-1); } if (isRtmpMain) { url = url.Replace("live2.nicovideo.jp", "live.nicovideo.jp"); } var cg = new CookieGetter(rm.cfg); var cgret = cg.getHtml5RecordCookie(url, isSub); cgret.Wait(); if (isSub && cg.id != null) { id[1] = cg.id; } if (!isSub && cg.id != null) { id[0] = cg.id; } if (id[0] != null && id[1] != null && id[0] == id[1]) { rm.form.addLogText("メインアカウントとサブアカウントのIDが同じでした"); util.debugWriteLine("メインアカウントとサブアカウントのIDが同じでした"); cc = null; return(-2); } // cgret.ConfigureAwait(false); if (cgret == null || cgret.Result[0] == null) { util.debugWriteLine("cgret " + cgret); if (isLogin && isFirst) { rm.form.addLogText(cg.log); // rm.form.addLogText("ログインに失敗しました。"); isFirst = false; } System.Threading.Thread.Sleep(3000); continue; } // if (cgret == null) return true; cc = cgret.Result[0]; util.debugWriteLine("container " + cc); res = cg.pageSource; // Uri TargetUrl = new Uri("http://live.nicovideo.jp/"); // util.debugWriteLine("1 " + container.GetCookieHeader(TargetUrl)); // TargetUrl = new Uri("http://live2.nicovideo.jp/"); // util.debugWriteLine("2 " + container.GetCookieHeader(TargetUrl)); //if (res.IndexOf("siteId":"nicolive2") > -1) { // if (isRtmp) return getRtmpPageType(res, isSub, out rr, cc); if (isRtmpMain) { if (res.IndexOf("%3Cgetplayerstatus%20") > -1) { //if (res.IndexOf("<getplayerstatus status=\"ok\"") > -1) { var _res = util.getRegGroup(res, "(%3Cgetplayerstatus%20.+?%3C%2Fgetplayerstatus%3E)"); _res = System.Net.WebUtility.UrlDecode(_res); //var _res = res; var isTimeShift = true; if (_res == null) { continue; } var ret = util.getPageTypeRtmp(_res, ref isTimeShift, false); return(ret); } } var isJikken = res.IndexOf("siteId":"nicocas") > -1; if (isJikken) { return(getJikkenPageType(res, isSub, out jr, cc)); } else { var _pageType = util.getPageType(res); util.debugWriteLine(_pageType); return(_pageType); } } catch (Exception e) { util.debugWriteLine(e.Message + " " + e.StackTrace); System.Threading.Thread.Sleep(3000); if (isLogin) { rm.form.addLogText("ページの取得に失敗しました。"); isLogin = false; } } } cc = null; return(5); /* * var req = (HttpWebRequest)HttpWebRequest.Create(url); * req.Timeout = 15000; * req.CookieContainer = this.container; * req.AllowAutoRedirect = false; * * var res = (HttpWebResponse)req.GetResponse(); * return (res.Headers.Get("Location") == null) ? false : true; */ }
private int _rec(string url, bool isSub) { JikkenRecorder jr = null; RtmpRecorder rr = null; var isRtmp = !isSubAccountHokan && (isRtmpMain || isSub); CookieContainer cc = null; var pageType = wssUrl == null? this.getPageType(url, true, isSub, ref jr, out cc) : 0; container = cc; if (pageType == -2 && isSub) { return(2); } if (pageType == -1) { return(2); } //var ccInd = (isSub) ? 1 : 0; var ccInd = 0; util.debugWriteLine("pagetype " + pageType + " container " + cc + " isSub " + isSub); if ((cc == null || cc == null) && wssUrl == null) { rm.form.addLogText("ログインに失敗しました。"); if (bool.Parse(rm.cfg.get("IsmessageBox")) && util.isShowWindow) { if (rm.form.IsDisposed) { return(2); } try { rm.form.Invoke((MethodInvoker) delegate() { MessageBox.Show("ログインに失敗しました。(" + util.getMainSubStr(isSub) + ")\n" + lvid, "", MessageBoxButtons.OK, MessageBoxIcon.None); }); } catch (Exception e) { util.debugWriteLine(e.Message + " " + e.StackTrace + " " + e.Source + " " + e.TargetSite); } } if (bool.Parse(rm.cfg.get("IsfailExit")) && false) { rm.rfu = null; if (util.isShowWindow) { try { rm.form.Invoke((MethodInvoker) delegate() { try { rm.form.Close(); } catch (Exception e) { util.debugWriteLine(e.Message + " " + e.StackTrace + " " + e.Source + " " + e.TargetSite); } }); } catch (Exception e) { util.debugWriteLine(e.Message + " " + e.StackTrace + " " + e.Source + " " + e.TargetSite); } } } return(2); } util.debugWriteLine("pagetype " + pageType); while (true && this == rm.rfu) { util.debugWriteLine("pagetype " + pageType); if (pageType == 0 || pageType == 7) { if (wssUrl != null) { res = ""; } var isJikken = res.IndexOf("siteId":"nicocas") > -1; int recResult = 0; if (rm.isPlayOnlyMode && pageType == 7 && isRtmp) { isRtmp = false; } if (isJikken) { if (!jr.isLive && isSub) { return(2); } recResult = jr.record(res, isRtmp); } else { var isTimeShift = pageType == 7; if (isTimeShift && isSub) { return(2); } var h5r = new Html5Recorder(url, cc, lvid, rm, this, isTimeShift, isSub); recResult = h5r.record(res, isRtmp, pageType); } util.debugWriteLine("recresult " + recResult); return(recResult); } else if (pageType == 1) { rm.form.addLogText("満員です。"); if (bool.Parse(rm.cfg.get("Isretry"))) { System.Threading.Thread.Sleep(10000); while (this == rm.rfu) { try { var wc = new WebHeaderCollection(); res = util.getPageSource(url, ref wc, cc); isJikken = res.IndexOf("siteId":"nicocas") > -1; var _pageType = (isJikken) ? getJikkenPageType(res, isSub, out jr, cc) : util.getPageType(res); util.debugWriteLine(_pageType); if (pageType != 1) { continue; } System.Threading.Thread.Sleep(5000); } catch (Exception e) { util.debugWriteLine(e.Message + " " + e.StackTrace + " "); } } continue; } else { return(2); } } else if (pageType == 5) { if (bool.Parse(rm.cfg.get("Isretry"))) { rm.form.addLogText("接続エラー。10秒後リトライします。"); System.Threading.Thread.Sleep(10000); try { // var wc = new WebHeaderCollection(); // res = util.getPageSource(url, ref wc, container); // pageType = util.getPageType(res); pageType = getPageType(url, false, isSub, ref jr, out cc); container = cc; util.debugWriteLine("pagetype_ " + pageType); } catch (Exception e) { util.debugWriteLine(e.Message + " " + e.StackTrace + " "); // rm.form.addLogText(e.Message + " " + e.StackTrace + " "); } continue; } else { rm.form.addLogText("接続エラー"); return(2); } } else if (pageType == 6) { util.debugWriteLine("pagetype6process"); System.Threading.Thread.Sleep(3000); try { pageType = getPageType(url, false, isSub, ref jr, out cc); container = cc; util.debugWriteLine("pagetype_ " + pageType); } catch (Exception e) { util.debugWriteLine(e.Message + " " + e.StackTrace + " "); rm.form.addLogText(e.Message + " " + e.StackTrace + " "); } continue; } else if (pageType == 4) { rm.form.addLogText("require_community_menber"); // rm.form.addLogText(res); if (true && false) { rm.rfu = null; if (util.isShowWindow) { try { rm.form.Invoke((MethodInvoker) delegate() { try { rm.form.Close(); } catch (Exception e) { util.debugWriteLine(e.Message + " " + e.StackTrace + " " + e.Source + " " + e.TargetSite); } }); } catch (Exception e) { util.debugWriteLine(e.Message + " " + e.StackTrace + " " + e.Source + " " + e.TargetSite); } } } return(2); } else if (pageType == 8) { rm.form.addLogText("この番組の視聴にはシリアル番号が必要です。"); return(2); } else if (pageType == 9) { if (isSub) { return(2); } rm.form.addLogText("この番組の視聴には予約が必要です。"); return(2); } else { var mes = ""; if (pageType == 2) { mes = "この放送は終了しています。"; } if (pageType == 3) { mes = "この放送は終了しています。"; } if (pageType == 7) { mes = "この放送は終了しています。"; } rm.form.addLogText(mes); util.debugWriteLine("pagetype " + pageType + " 終了"); if (bool.Parse(rm.cfg.get("IsdeleteExit")) && false) { rm.rfu = null; if (util.isShowWindow) { try { rm.form.Invoke((MethodInvoker) delegate() { try { rm.form.Close(); } catch (Exception e) { util.debugWriteLine(e.Message + " " + e.StackTrace + " " + e.Source + " " + e.TargetSite); } }); } catch (Exception e) { util.debugWriteLine(e.Message + " " + e.StackTrace + " " + e.Source + " " + e.TargetSite); } } } return(2); //var nh5r = new NotHtml5Recorder(url, container, lvid, rm, this); //nh5r.record(res); } } return(2); }