Пример #1
0
 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);
 }
Пример #3
0
        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);
        }
Пример #4
0
 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);
 }
Пример #6
0
        protected ScrapeScheduler(ILogger logger)
        {
            Logger          = logger;
            WebPortalHelper = new WebPortalHelper(new HttpClient());
            CronBuilder     = new CronBuilder();

            // Inject
            WebPortalHelper.Logger = Logger;
        }
Пример #7
0
        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();
        }
Пример #9
0
        /// <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));
        }
Пример #11
0
        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);
        }
Пример #12
0
        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));
        }
Пример #13
0
 public EspnFutureCompetition(ILogger logger, WebPortalHelper webPortalHelper, ScrapeHelper scrapeHelper)
     : base(logger, webPortalHelper, scrapeHelper)
 {
 }
Пример #14
0
 public TabPlayerHeadToHead(ILogger logger, WebPortalHelper webPortalHelper, ScrapeHelper scrapeHelper)
     : base(logger, webPortalHelper, scrapeHelper)
 {
     logger = null;
 }
Пример #15
0
 public BorgataonlinePlayerOverUnder(ILogger logger, WebPortalHelper webPortalHelper, ScrapeHelper scrapeHelper)
     : base(logger, webPortalHelper, scrapeHelper)
 {
 }
Пример #16
0
        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&region=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");
            }
        }
Пример #17
0
 public UbetPlayerOverUnder(ILogger logger, WebPortalHelper webPortalHelper, ScrapeHelper scrapeHelper)
     : base(logger, webPortalHelper, scrapeHelper)
 {
 }
Пример #18
0
 protected ScrapeJob(WebPortalHelper webPortalHelper, ScrapeHelper scrapeHelper)
 {
     WebPortalHelper = webPortalHelper;
     ScrapeHelper    = scrapeHelper;
 }