/// <summary> /// 全屏点赞 /// </summary> public void Praise() { QqProvider.Instance.UpdateRunStatus(Id, RunStatus.Init); if (RunStatus != RunStatus.Sucess && CodeStatus != CodeStatus.NotNeedCode) { Check(); } else { try { _miniBrowser.DownloadString(IndexPage, Praise); } catch (Exception ex) { RunStatus = RunStatus.Fail; QqProvider.Instance.UpdateRunStatus(Id, RunStatus.Fail); CodeStatus = CodeStatus.NeedCode; QqProvider.Instance.UpdateCodeStatus(Id, CodeStatus.NeedCode); Log4Logger.Error(UserName + " Login失败!\r\n" + ex.Message, ex); MailLogger.LogError(UserName + " Login失败!\r\n" + ex.Message, ex); QqMsgLogger.LogError(UserName + " Login失败!", ex); } } }
public string ExecutionResult(string code, int exId, string userId, CodeStatus codeStatus) { var codeId = unitOfWork.CodeRepo.Get(c => c.ExerciseId == exId && c.UserId == userId).First().Id; var res = sandboxManager.Execute(code); if (res.Success) { string result = $"Result: {res.Result};\r\nCompile time: {res.CompileTime.TotalMilliseconds};\r\nExecution Time: {res.ExecutionTime.TotalMilliseconds};"; if (codeStatus != CodeStatus.Done) { AddHistory(codeId, code, DateTime.Now, null, result); } return(result); } string errors = res.CompileTimeExceptions.Aggregate("", (current, v) => current + (v + ";\r\n")); errors = res.RunTimeExceptions.Aggregate(errors, (current, v) => current + (v + ";\r\n")); if (codeStatus != CodeStatus.Done) { AddHistory(codeId, code, DateTime.Now, errors, null); } return(errors); }
public string ExecutionResult(string code, int exId, string userId, CodeStatus codeStatus) { var codeId = unitOfWork.CodeRepo.Get(c => c.ExerciseId == exId && c.UserId == userId).First().Id; var testCasesCode = unitOfWork.ExerciseRepo.GetById(exId).TestCasesCode; var finalCode = string.Concat(testCasesCode, code); var res = sandboxManager.Execute(finalCode); if (res.Success) { string result = res.Result; if (codeStatus == CodeStatus.InProgress) { AddHistory(codeId, code, DateTime.Now, null, result); } return(result); } string errors = res.Result; if (codeStatus == CodeStatus.InProgress) { AddHistory(codeId, code, DateTime.Now, errors, null); } return(errors); }
/// <summary> /// 登录 /// </summary> /// <param name="scrapingBrowser"></param> /// <param name="htmlStr"></param> private void Login(ScrapingBrowser scrapingBrowser, string htmlStr) { if (htmlStr.Contains("登录成功")) { Log4Logger.Info(UserName + "登录成功!\r\n" + htmlStr); RunStatus = RunStatus.Sucess; QqProvider.Instance.UpdateRunStatus(Id, RunStatus.Sucess); CodeStatus = CodeStatus.NotNeedCode; QqProvider.Instance.UpdateCodeStatus(Id, CodeStatus.NotNeedCode); scrapingBrowser.DownloadString(IndexPage, Praise); } else { RunStatus = RunStatus.Fail; QqProvider.Instance.UpdateRunStatus(Id, RunStatus.Fail); CodeStatus = CodeStatus.NeedCode; QqProvider.Instance.UpdateCodeStatus(Id, CodeStatus.NeedCode); Log4Logger.Error(UserName + " Login失败!\r\n" + htmlStr); //MailLogger.LogError(UserName + " Login失败!\r\n" + htmlStr); QqMsgLogger.LogError(UserName + " Login失败!" + htmlStr); } }
public static BE.Status GenerateStatus(CodeStatus errorStatus) { BE.Status status = new BE.Status() { Code = errorStatus.ToString() }; switch (errorStatus) { case CodeStatus.Successful: status.Message = "OK"; break; case CodeStatus.InvalidParameter: status.Message = "There was a problem with parameter passed"; break; case CodeStatus.Timeout: status.Message = "No response from server, try again later"; break; case CodeStatus.Unknown: status.Message = "What the hell just happened? Check log plz"; break; default: status.Message = "?"; break; } return(status); }
public void UpdateStatus(string key, CodeStatus status) { var code = _codeMapRepository.Find(key); code.Status = status; code.UpdatedOn = DateTime.Now; if (status == CodeStatus.InActive) { code.RemovedOn = DateTime.Now; } _codeMapRepository.Update(code); }
public CodeStatus GetCodeStatus(CodeRequest cr) { if (cr.Code.Equals("12345")) { CodeStatus cs = new CodeStatus { status = "winner", prize = "nothing" }; return(cs); } CodeStatus losingCs = new CodeStatus { status = "loser" }; return(losingCs); }
public Code(string text, CodeStatus status) { Text = text; Status = status; }
/// <summary> /// 点赞 /// </summary> /// <param name="scrapingBrowser"></param> /// <param name="htmlStr"></param> private void Praise(ScrapingBrowser scrapingBrowser, string htmlStr) { var cookie = scrapingBrowser.GetCookie(new Uri(IndexPage), "skey"); if (cookie == null) { RunStatus = RunStatus.Fail; QqProvider.Instance.UpdateRunStatus(Id, RunStatus.Fail); CodeStatus = CodeStatus.NeedCode; QqProvider.Instance.UpdateCodeStatus(Id, CodeStatus.NeedCode); Log4Logger.Error(UserName + ":skey为空了"); QqMsgLogger.LogError(UserName + ":skey为空了"); return; } var gtk = Gtk.GetGtk(cookie.Value); PraiseUrl = string.Format(PraiseUrl, gtk); var document = new HtmlDocument(); document.LoadHtml(htmlStr); var list = document.DocumentNode.CssSelect("li.f-single"); if (!list.Any()) { QqMsgLogger.LogInfo(UserName + " :li.f-single 找不到点赞的模块"); Log4Logger.Info(UserName + " :li.f-single 找不到点赞的模块.\r\n" + htmlStr); if (document.DocumentNode.CssSelect("i.ico_login").Any()) { RunStatus = RunStatus.Fail; QqProvider.Instance.UpdateRunStatus(Id, RunStatus.Fail); CodeStatus = CodeStatus.NeedCode; QqProvider.Instance.UpdateCodeStatus(Id, CodeStatus.NeedCode); } return; } else { var isContinue = htmlStr.Contains("g_ic_fpfeedsType='friend',"); if (!isContinue) { //其它角色对用户进行点赞评论后会跳转到与我相关页面,这时候再请求一次 //QqMsgLogger.LogInfo(UserName + " 有人关注,需要重新定位到主页."); //_miniBrowser.DownloadString(IndexPage, Praise); return; } } foreach (var htmlNode in list) { if (htmlNode == null || string.IsNullOrWhiteSpace(htmlNode.InnerHtml)) { continue; } try { var nameNode = htmlNode.CssSelect("a.f-name"); var praiseNode = htmlNode.CssSelect("a.qz_like_btn_v3").FirstOrDefault(); if (praiseNode != null && praiseNode.Attributes["data-clicklog"] != null && praiseNode.Attributes["data-clicklog"].Value == "like") { Thread.Sleep(1000); Log4Logger.Info(UserName + "为《" + nameNode.First().InnerHtml + "》点赞!"); var unikey = praiseNode.Attributes["data-unikey"].Value; var curkey = praiseNode.Attributes["data-curkey"].Value; var postForm = new NameValueCollection(); postForm["qzreferrer"] = IndexPage; postForm["opuin"] = UserName; postForm["unikey"] = unikey; postForm["curkey"] = curkey; postForm["from"] = "1"; postForm["appid"] = "311"; postForm["typeid"] = "0"; postForm["abstime"] = "1423372434"; postForm["fid"] = "3611d32392f0d654e5a20900"; postForm["active"] = "0"; postForm["fupdate"] = "1"; scrapingBrowser.NavigateTo(PraiseUrl, postForm, Success, HttpVerb.Post); } else if (praiseNode == null) { QqMsgLogger.LogInfo(UserName + " :a.qz_like_btn_v3 没有找到点赞的按钮"); //Log4Logger.Info(UserName + " :a.qz_like_btn_v3 没有找到点赞的按钮.\r\n" + htmlStr); } else if (praiseNode.Attributes["data-clicklog"] == null) { QqMsgLogger.LogInfo(UserName + " :data-clicklog 没有找到点赞的按钮"); Log4Logger.Info(UserName + " :data-clicklog 没有找到点赞的按钮.\r\n" + htmlStr); } } catch (Exception ex) { Log4Logger.Error(UserName + " 点赞失败!\r\n" + htmlStr, ex); QqMsgLogger.LogError(UserName + " 点赞失败!" + ex.Message, ex); } } RunStatus = RunStatus.Sucess; QqProvider.Instance.UpdateRunStatus(Id, RunStatus.Sucess); }
/// <summary> ///获取验证信息 //验证信息格式为:ptui_checkVC('0','!MIW','\x00\x00\x00\x00\x9a\x65\x0f\xd7') //其中分为三部分,第一个值0或1判断是否需要图片验证码 // 第二个值是默认验证码,若不需要图片验证码,就用此验证码来提交 // 第三部分是所使用的QQ号码的16进制形式 /// </summary> /// <param name="scrapingBrowser"></param> /// <param name="htmlStr"></param> private void Check(ScrapingBrowser scrapingBrowser, string htmlStr) { cap_cd = string.Empty; //将验证码信息的三部分存入数组 int checkCodePosition = htmlStr.IndexOf("(", System.StringComparison.Ordinal) + 1; var checkCode = htmlStr.Substring(checkCodePosition, htmlStr.LastIndexOf(")", System.StringComparison.Ordinal) - checkCodePosition); var checkArray = checkCode.Replace("'", "").Split(','); //验证码数组 if (checkArray[0] == "0") { CodeStatus = CodeStatus.NotNeedCode; QqProvider.Instance.UpdateCodeStatus(Id, CodeStatus.NotNeedCode); Log4Logger.Info(UserName + " 获取验证信息成功! " + htmlStr); Login(checkArray[1]); } else if (checkArray[0] == "1") { cap_cd = checkArray[1]; var ruokuaiUser = ConfigurationManager.AppSettings["ruokuaiUser"] ?? ""; var ruokuaiPwd = ConfigurationManager.AppSettings["ruokuaiPwd"] ?? ""; var ruokuaiTypeid = ConfigurationManager.AppSettings["ruokuaiTypeid"] ?? ""; var ruokuaiSoftid = ConfigurationManager.AppSettings["ruokuaiSoftid"] ?? ""; var ruokuaiSoftkey = ConfigurationManager.AppSettings["ruokuaiSoftkey"] ?? ""; var param = new Dictionary <object, object> { { "username", ruokuaiUser }, { "password", ruokuaiPwd }, { "typeid", ruokuaiTypeid }, { "timeout", "90" }, { "softid", ruokuaiSoftid }, { "softkey", ruokuaiSoftkey } }; var url = string.Format(CodeImage, AppId, UserName, cap_cd); var wr = scrapingBrowser.DownloadWebResource(new Uri(url)); try { string httpResult = RuoKuaiHttp.Post("http://api.ruokuai.com/create.xml", param, wr.Content.ToArray()); var xmlDoc = new XmlDocument(); xmlDoc.LoadXml(httpResult); XmlNode idNode = xmlDoc.SelectSingleNode("Root/Id"); XmlNode resultNode = xmlDoc.SelectSingleNode("Root/Result"); //XmlNode errorNode = xmlDoc.SelectSingleNode("Root/Error"); if (resultNode != null && idNode != null) { //var topidid = idNode.InnerText; var result = resultNode.InnerText; CodeStatus = CodeStatus.NotNeedCode; QqProvider.Instance.UpdateCodeStatus(Id, CodeStatus.NotNeedCode); Log4Logger.Info(UserName + " 获取验证信息成功! " + htmlStr); QqMsgLogger.LogInfo(UserName + " 若快识别成功! "); //停顿下,否则qq会认为是在攻击它 Thread.Sleep(2000); Login(result); } else { CodeStatus = CodeStatus.NeedCode; QqProvider.Instance.UpdateCodeStatus(Id, CodeStatus.NeedCode); Log4Logger.Info(UserName + " 需要验证码,请尽快输入验证码!"); } } catch (Exception ex) { Log4Logger.Error(ex.Message, ex); CodeStatus = CodeStatus.NeedCode; QqProvider.Instance.UpdateCodeStatus(Id, CodeStatus.NeedCode); Log4Logger.Info(UserName + " 需要验证码,请尽快输入验证码!"); QqMsgLogger.LogInfo(UserName + " 若快识别失败! " + ex.Message, ex); } } else { CodeStatus = CodeStatus.NeedCode; QqProvider.Instance.UpdateCodeStatus(Id, CodeStatus.NeedCode); Log4Logger.Error("Check失败!\r\n" + UserName + "\r\n" + htmlStr); QqMsgLogger.LogError("Check失败!" + UserName + ":" + htmlStr); } }