public EspnCompetitionJob(WebPortalHelper webPortalHelper, ScrapeHelper scrapeHelper) : base(webPortalHelper, scrapeHelper) { Logger = Helper .GetLoggerConfig($@"{NBAScrapingService.BaseLoggerPath}\Scrape\Competition\espn-.txt") .CreateLogger(); ProviderType = typeof(EspnCompetition); }
public PalmerbetPlayerOverUnderJob(WebPortalHelper webPortalHelper, ScrapeHelper scrapeHelper) : base(webPortalHelper, scrapeHelper) { Logger = Helper .GetLoggerConfig($@"{NBAScrapingService.BaseLoggerPath}\Scrape\PlayerOverUnder\palmerbet-.txt") .CreateLogger(); ProviderType = typeof(PalmerbetPlayerOverUnder); }
public static async Task <IScrapeHandler> CreateAsync(Type providerType, ILogger logger, WebPortalHelper webPortalHelper, ScrapeHelper scrapeHelper) { var instance = (IScrapeHandler)Activator.CreateInstance(providerType, logger, webPortalHelper, scrapeHelper); await instance.Initialize(providerType); return(instance); }
public TabPlayerHeadToHeadJob(WebPortalHelper webPortalHelper, ScrapeHelper scrapeHelper) : base(webPortalHelper, scrapeHelper) { Logger = Helper .GetLoggerConfig($@"{NBAScrapingService.BaseLoggerPath}\Scrape\PlayerHeadToHead\tab-.txt") .CreateLogger(); ProviderType = typeof(TabPlayerHeadToHead); }
public BorgataonlinePlayerOverUnderJob(WebPortalHelper webPortalHelper, ScrapeHelper scrapeHelper) : base(webPortalHelper, scrapeHelper) { Logger = Helper .GetLoggerConfig($@"{NBAScrapingService.BaseLoggerPath}\Scrape\PlayerOverUnder\borgataonline-.txt") .CreateLogger(); ProviderType = typeof(BorgataonlinePlayerOverUnder); }
protected ScrapeScheduler(ILogger logger) { Logger = logger; WebPortalHelper = new WebPortalHelper(new HttpClient()); CronBuilder = new CronBuilder(); // Inject WebPortalHelper.Logger = Logger; }
protected ScrapeHandler(ILogger logger, WebPortalHelper webPortalHelper, ScrapeHelper scrapeHelper) { Logger = logger; Environment = AppEnvironment.Production; WebPortalHelper = webPortalHelper; ScrapeHelper = scrapeHelper; // Inject WebPortalHelper.Logger = ScrapeHelper.Logger = Logger; }
public void ProcessWXMessage() { Stream reqstream = Request.InputStream; reqstream.Seek(0, SeekOrigin.Begin); string body = new StreamReader(reqstream).ReadToEnd(); var echostr = Request["echostr"]; var signature = Request["signature"]; var timestamp = Request["timestamp"]; var nonce = Request["nonce"]; string resp = "success"; if (CheckSignature(signature, timestamp, nonce)) { if (!string.IsNullOrEmpty(echostr)) { resp = echostr; } else { WXTextMessage wxresult = null; var result = WechatSenderService.GetWXMsgEntity(body); var textmessage = result is WXTextMessage; if (textmessage) { wxresult = result as WXTextMessage; if (wxresult.Content.Equals(IgnoreMessage, StringComparison.CurrentCultureIgnoreCase)) { var lastmsg = SMSProcessor.LoadLastMessageByMsgReceiver(wxresult.FromUserName); if (lastmsg != null) { MessageDA.UpdateSmsStatusAfterHandled(lastmsg.SysNo, true, true); if (wxresult != null) { WXTextMessage wXText = new WXTextMessage { ToUserName = wxresult.FromUserName, FromUserName = wxresult.ToUserName, CreateTime = WebPortalHelper.GetTimeStamp(), Content = "忽略当前报警信息成功!\n正在等待服务器响应!", MsgId = WebPortalHelper.GetGuidToLongID() }; resp = WechatSenderService.OpeationWXEntity(wXText); Logger.WriteLog(resp); } } } } } } Response.Write(resp); Response.End(); Response.Close(); }
/// <summary> /// For debugging purpose only /// </summary> protected ScrapeHandler() { Logger = Helper .GetLoggerConfig($@"{Constants.BaseLoggerPath}\Debug\debug-.txt") .CreateLogger(); Environment = AppEnvironment.Debug; WebPortalHelper = new WebPortalHelper(new HttpClient()); ScrapeHelper = new ScrapeHelper(new HttpClient(), new WebClient()); //ShouldGetTodayMatches = false; // Inject WebPortalHelper.Logger = ScrapeHelper.Logger = Logger; }
public ActionResult GetWXjsSdkConfig(string curl) { string ticket = string.Empty; //try //{ ticket = WeiXinService.GetWeixinJsApiTicket(); //} //catch (BusinessException e ) //{ // return Json(new AjaxResult { Success = false,Message="获取微信接口信息失败,请重新进入后再试" }, JsonRequestBehavior.AllowGet); //} if (string.IsNullOrEmpty(ticket)) { throw new BusinessException("调用微信接口失败,请重新进入页面后重试!"); } Random random = new Random(unchecked ((int)DateTime.Now.Ticks)); var srandom = random.Next(11111, 999999); WeixinJsApiConfig jsApiConfig = new WeixinJsApiConfig { Noncestr = srandom.ToString(), Timestamp = WebPortalHelper.GetTimeStamp().ToString(), }; string url = string.Empty; if (!string.IsNullOrEmpty(curl)) { url = curl; } StringBuilder sb = new StringBuilder(); sb.Append(string.Format("jsapi_ticket={0}&", ticket)); sb.Append(string.Format("noncestr={0}&", jsApiConfig.Noncestr)); sb.Append(string.Format("timestamp={0}&", jsApiConfig.Timestamp)); sb.Append(string.Format("url={0}", url)); jsApiConfig.Signature = SecurityHelper.GetSHA1Value(sb.ToString()); jsApiConfig.AppId = WechatSenderService.WXConfig.AppID; jsApiConfig.Debug = false; jsApiConfig.JsApiList = WechatSenderService.WXConfig.JsApis; var jsapiconfig = JsonConvert.SerializeObject(jsApiConfig); return(Json(new AjaxResult { Success = true, Data = jsapiconfig }, JsonRequestBehavior.AllowGet)); }
protected override async Task <string> ConfigureCronTimeForMetricScheduling() { var todayMatches = await WebPortalHelper.GetSingletonTodayMatches(); if (todayMatches == null || todayMatches.Count == 0) { Logger.Warning("No matches to schedule metric scraping"); return(string.Empty); } var fromHour = todayMatches.Min(x => x.StartTime.Hour - Constants.ScrapingMetricHourBefore); // Get min hour var toHour = todayMatches.Max(x => x.StartTime.Hour); // get max hour var cronTime = CronBuilder .AtSpecificSecond(0) .EveryMinutesStartingAt(30, 0) .EveryHourBetween(fromHour, toHour) .AtSpecificDayOfMonth(DateTime.Now.Day) .AtSpecificMonth(DateTime.Now.Month) .AtSpecificYear(DateTime.Now.Year) .Build(); return(cronTime); }
public ActionResult Save() { string json = Request["data"]; if (string.IsNullOrWhiteSpace(json)) { throw new BusinessException("传入数据不能为空"); } Company entity = SerializationUtility.JsonDeserialize2 <Company>(json); SetEntityBaseUserInfo(entity); entity.CompanyStatus = CompanyStatus.Init; if (string.IsNullOrEmpty(entity.Name)) { throw new BusinessException("请输入客户名称"); } SystemUser customer = new SystemUser(); //if (!string.IsNullOrEmpty(entity.ContactCellPhone)) //{ if (string.IsNullOrEmpty(entity.ContactName)) { throw new BusinessException("请输入联系人姓名"); } if (string.IsNullOrEmpty(entity.ContactCellPhone)) { throw new BusinessException("请输入联系人手机号"); } if (!WebPortalHelper.IsPhonenum(entity.ContactCellPhone)) { throw new BusinessException("请输入正确的手机号!"); } customer = SystemUserService.LoadSystemUserByLoginNameAndCellPhone(entity.ContactCellPhone, ConstValue.ApplicationID); // } Company company = CompanyService.LoadCompanyByName(entity.Name); if (entity.SysNo > 0) { Company curentcompany = CompanyService.LoadCompany(entity.SysNo, false); if (curentcompany == null) { throw new BusinessException("未找到此公司的相关信息"); } if (company != null && company.SysNo != curentcompany.SysNo) { throw new BusinessException("系统中已存在当前客户,请重新输入客户名称!"); } if (customer != null && customer.SysNo > 0 && ((!string.IsNullOrEmpty(entity.ContactCellPhone) && !string.Equals(customer.CellPhone, entity.ContactCellPhone)) || (entity.SysNo != customer.MasterSysNo))) { throw new BusinessException("系统中已存在此手机号,请更换手机号重试!"); } using (ITransaction it = TransactionManager.Create()) { //if (!string.IsNullOrEmpty(entity.ContactCellPhone)) //{ // if (customer == null || !string.Equals(entity.ContactCellPhone, customer.CellPhone)) // { // customer = new SystemUser(); // customer.MasterSysNo = entity.SysNo; // customer.LoginName = customer.CellPhone = entity.ContactCellPhone; // customer.LoginPassword = AuthMgr.EncryptPassword(entity.ContactCellPhone); // customer.UserFullName = entity.ContactName; // customer.CommonStatus = CommonStatus.Actived; // SetEntityBaseUserInfo(customer); // var usersysno = user_service.InsertSystemUser(customer); // if (usersysno > 0) // { // if (rolesysno != 0) // { // List<Role> roles = new List<Role> { new Role { SysNo = rolesysno } }; // usersrole.SaveUsersRole(usersysno, roles, ConstValue.ApplicationID); // } // } // } //} entity.CompanyStatus = curentcompany.CompanyStatus; entity.AccountSysNo = curentcompany.AccountSysNo; if (curentcompany.CompanyStatus == CompanyStatus.Invalid) { entity.CompanyStatus = CompanyStatus.Init; } CompanyService.UpdateCompany(entity); it.Complete(); } } else { if (company != null) { throw new BusinessException("系统中已存在当前客户,请重新输入客户名称!"); } if (customer != null && customer.SysNo > 0) { throw new BusinessException("系统中已存在此手机号,请更换手机号重试!"); } if (!string.IsNullOrEmpty(entity.ContactCellPhone)) { customer = new SystemUser(); customer.LoginName = entity.LoginName; customer.CellPhone = ""; customer.LoginPassword = AuthMgr.EncryptPassword(entity.LoginName); customer.UserFullName = entity.ContactName; customer.CommonStatus = CommonStatus.Actived; SetEntityBaseUserInfo(customer); } using (ITransaction it = TransactionManager.Create()) { entity.SysNo = CompanyService.InsertCompany(entity); customer.MasterSysNo = entity.SysNo; if (!string.IsNullOrEmpty(entity.ContactCellPhone)) { var usersysno = user_service.InsertSystemUser(customer); if (usersysno > 0) { entity.AccountSysNo = usersysno; CompanyService.UpdateCompany(entity); if (rolesysno != 0) { List <Role> roles = new List <Role> { new Role { SysNo = rolesysno } }; usersrole.SaveUsersRole(usersysno, roles, ConstValue.ApplicationID); } } } it.Complete(); } } return(Json(new AjaxResult { Success = true, Message = "保存成功", Data = entity.SysNo }, JsonRequestBehavior.AllowGet)); }
public EspnFutureCompetition(ILogger logger, WebPortalHelper webPortalHelper, ScrapeHelper scrapeHelper) : base(logger, webPortalHelper, scrapeHelper) { }
public TabPlayerHeadToHead(ILogger logger, WebPortalHelper webPortalHelper, ScrapeHelper scrapeHelper) : base(logger, webPortalHelper, scrapeHelper) { logger = null; }
public BorgataonlinePlayerOverUnder(ILogger logger, WebPortalHelper webPortalHelper, ScrapeHelper scrapeHelper) : base(logger, webPortalHelper, scrapeHelper) { }
protected override async Task ScrapeData() { // Fetch all teams from web portal var teams = await WebPortalHelper.GetTeams(Helper.GetSportCode()); if (teams == null || teams.Count == 0) { throw new ArgumentNullException(nameof(teams), "Teams from web portal is null"); } FromDate = Helper.ToMinTime(FromDate); ToDate = Helper.ToMaxTime(ToDate); var totalDays = Convert.ToInt32((ToDate - FromDate).TotalDays); for (var date = FromDate.Date; date <= ToDate.Date; date = date.AddDays(1)) { Logger.Information($"Scrape matches: {date.ToShortDateString()}"); await UpdateScrapeStatus(null, $"Scrape matches: {date.ToShortDateString()}"); var url = $"http://site.api.espn.com/apis/site/v2/sports/basketball/nba/scoreboard?lang=en®ion=au&calendartype=blacklist&limit=100&dates={Helper.GetDate(date)}&tz=Australia%2FMelbourne"; var rawResult = await ScrapeHelper.GetDocument(url); var jObject = JObject.Parse(rawResult); if (jObject == null) { throw new ArgumentNullException(nameof(jObject)); } var sportCode = Helper.GetSportCode(); var teamCodes = new List <string>(); var competitions = jObject.SelectTokens("$.events[*].competitions[*]"); foreach (var competition in competitions) { var homeAbbr = competition.SelectToken("$.competitors[0].team.abbreviation").ToString(); var awayAbbr = competition.SelectToken("$.competitors[1].team.abbreviation").ToString(); if (teams.All(x => x.ShortName != homeAbbr)) { throw new Exception($"Cannot find any home team named '{homeAbbr}' in teams"); } if (teams.All(x => x.ShortName != awayAbbr)) { throw new Exception($"Cannot find any away team named '{awayAbbr}' in teams"); } teamCodes.Add(homeAbbr); teamCodes.Add(awayAbbr); var homeTeamId = teams.First(x => x.ShortName.Equals(homeAbbr)).Id; var awayTeamId = teams.First(x => x.ShortName.Equals(awayAbbr)).Id; var homeTeamName = competition.SelectToken("$.competitors[0].team.name").ToString(); var awayTeamName = competition.SelectToken("$.competitors[1].team.name").ToString(); homeTeamName = homeTeamName.Substring(0, Math.Min(homeTeamName.Length, 3)).ToUpper(); awayTeamName = awayTeamName.Substring(0, Math.Min(awayTeamName.Length, 3)).ToUpper(); var gameCode = $"{Helper.GetDate(date, "MMddyyyy")}{homeTeamName}{awayTeamName}"; var gameDate = competition.SelectToken("$.date").ToString(); Logger.Information($"Match: {gameCode}, {homeTeamName} vs {awayTeamName}, {gameDate}"); Matches.Add(new Match { StartTime = DateTime.Parse(gameDate), HomeTeamId = homeTeamId, AwayTeamId = awayTeamId, GameCode = gameCode, SportCode = sportCode }); } Logger.Information("Scraped matches complete"); Logger.Information("Scrape players from teams"); const string baseTeamsUrl = "https://www.espn.com/nba/team/stats/_/name"; const string xPathToPlayers = "/html/body/div[1]/div/div/div/div/div[5]/div[2]/div[5]/div[1]/div/section/div/section[1]/div[2]/table/tbody/tr[*]/td/span/a"; var playerTasks = new List <Task <HtmlNodeCollection> >(); foreach (var teamCode in teamCodes) { url = $"{baseTeamsUrl}/{teamCode}"; playerTasks.Add(ScrapeHelper.GetInnerHtml(url, xPathToPlayers)); } var nodes = await Task.WhenAll(playerTasks); for (var i = 0; i < teamCodes.Count; i++) { var teamId = teams.First(x => x.ShortName == teamCodes[i]).Id; Logger.Information($"Scrape player from: {baseTeamsUrl}/{teamCodes[i]}"); ExtractPlayers(nodes[i], teamId); } Logger.Information("Scrape players complete"); var newProgress = GetScrapingInformation().Progress; newProgress = Math.Min(newProgress + 90 / totalDays, 90); await UpdateScrapeStatus(newProgress, $"Scrape matches: {date.ToShortDateString()} complete"); } }
public UbetPlayerOverUnder(ILogger logger, WebPortalHelper webPortalHelper, ScrapeHelper scrapeHelper) : base(logger, webPortalHelper, scrapeHelper) { }
protected ScrapeJob(WebPortalHelper webPortalHelper, ScrapeHelper scrapeHelper) { WebPortalHelper = webPortalHelper; ScrapeHelper = scrapeHelper; }