Пример #1
0
 public static void Gzip(HtmlWeb web)
 {
     HtmlWeb.PreRequestHandler handler = delegate(HttpWebRequest request)
     {
         request.Headers[HttpRequestHeader.AcceptEncoding] = "gzip, deflate";
         request.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip;
         request.CookieContainer        = new System.Net.CookieContainer();
         return(true);
     };
     web.PreRequest      += handler;
     web.OverrideEncoding = Encoding.GetEncoding("gb2312");
 }
Пример #2
0
 /// <summary>
 /// HtmlWeb.Load() 不支持 gzip 的解决方法
 /// </summary>
 /// <param name="webClient"></param>
 private static void SetGZipHeader(HtmlWeb webClient)
 {
     HtmlWeb.PreRequestHandler handler = delegate(HttpWebRequest request)
     {
         request.Headers[HttpRequestHeader.AcceptEncoding] = "gzip, deflate";
         request.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip;
         request.CookieContainer        = new System.Net.CookieContainer();
         return(true);
     };
     webClient.PreRequest      += handler;
     webClient.OverrideEncoding = Encoding.Default;
 }
Пример #3
0
        public static HtmlWeb GetHtmlWeb(Dictionary <string, string> _headers)
        {
            HtmlWeb web = new HtmlWeb();

            HtmlWeb.PreRequestHandler handler = delegate(HttpWebRequest request)
            {
                foreach (var header in _headers)
                {
                    request.Headers.Add(header.Key, header.Value);
                }
                request.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip;
                request.CookieContainer        = new CookieContainer();
                return(true);
            };
            web.PreRequest      += handler;
            web.OverrideEncoding = Encoding.Default;

            return(web);
        }
Пример #4
0
        public void GetLotteryOpenNumberFromkm28()
        {
            if (DateTime.Now <= this.NextRequestDT ||
                string.IsNullOrEmpty(this.lottery.urlkm28))
            {
                return;
            }
            try
            {
                HtmlWeb htmlWeb = new HtmlWeb();
                HtmlWeb.PreRequestHandler handler = delegate(HttpWebRequest request)
                {
                    request.Headers[HttpRequestHeader.AcceptEncoding] = "gzip, deflate";
                    request.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip;
                    request.CookieContainer        = new CookieContainer();
                    return(true);
                };
                htmlWeb.PreRequest += handler;
                var url = this.lottery.urlkm28.Replace("{date}", DateTime.Now.ToString("yyyy-MM-dd"));
                var doc = htmlWeb.Load(url);
                var trs = doc.DocumentNode.SelectNodes("//table[@class='tac fl']/tr");

                var lotteries = new List <LotteryOpenHistory>();
                foreach (var tr in trs)
                {
                    try
                    {
                        var tds = tr.SelectNodes("./td");
                        if (tds == null || tds.Count != 3)
                        {
                            continue;
                        }

                        var period = tds[0].InnerText;
                        if (string.IsNullOrEmpty(period))
                        {
                            continue;
                        }
                        var win_number = tds[2].InnerText;
                        if (string.IsNullOrEmpty(win_number))
                        {
                            continue;
                        }
                        win_number = win_number.Replace(" ", ",");
                        period     = DateTime.Now.ToString("yyyyMMdd") + period;
                        // 过滤掉已经添加的期号
                        var qihao = Convert.ToInt32(period);
                        if (qihao < this.NextQiHao)
                        {
                            continue;
                        }
                        lotteries.Add(new LotteryOpenHistory
                        {
                            OpenNumber = win_number,
                            QiHao      = period,
                        });
                    }
                    catch (Exception ex)
                    {
                        log.Error(this.lottery.Name + " GetLotteryOpenNumberFromkm28 解析数据失败", ex);
                    }
                }

                lotteries = lotteries.OrderBy(w => w.QiHao).ToList();
                //log.Info("下一期期号:" + this.NextQiHao + this.lottery.Name + ":" + lotteries.Count + " " + JsonConvert.SerializeObject(lotteries));
                using (var db = new OlaEntities())
                {
                    foreach (var lotteryOpen in lotteries)
                    {
                        try
                        {
                            var lotteryOpenTimes = db.LotteryOpenTimes
                                                   .FirstOrDefault(w => w.LotteryId == this.lottery.LotteryId && w.QiHao == lotteryOpen.QiHao);
                            if (lotteryOpenTimes != null)
                            {
                                lotteryOpen.OpenTime = lotteryOpenTimes.OpenTime.ToString("yyyy-MM-dd HH:mm:ss");
                                var history = db.LotteryOpenHistories
                                              .Any(w => w.LotteryId == this.lottery.LotteryId && w.QiHao == lotteryOpen.QiHao);
                                if (!history)
                                {
                                    // 预测
                                    GetForecast(db, lotteryOpen);

                                    lotteryOpen.Id         = Guid.NewGuid();
                                    lotteryOpen.LotteryId  = this.lottery.LotteryId;
                                    lotteryOpen.CreateTime = DateTime.Now;
                                    lotteryOpen.Source     = (int)LotteryOpenNumberSourceEnum.开门彩;
                                    // 获取前三期的预测号码
                                    GetPreForecast(db, lotteryOpen);
                                    db.LotteryOpenHistories.Add(lotteryOpen);
                                    db.SaveChanges();
                                    UpdateWebClientLotteryOpenInfo(lotteryOpen.LotteryId);
                                    var nextInfo = db.LotteryOpenTimes.FirstOrDefault(w => w.LotteryId == lotteryOpen.LotteryId && w.QiHao == lotteryOpenTimes.NextQiHao);
                                    if (nextInfo != null)
                                    {
                                        this.NextQiHao     = Convert.ToInt32(nextInfo.QiHao);
                                        this.NextRequestDT = nextInfo.OpenTime;
                                        log.Info("添加:" + this.lottery.Name + " 期号:" + lotteryOpen.QiHao + " 开奖号码:" + lotteryOpen.OpenNumber + " 获取时间: " + DateTime.Now + ":下次获取时间 " + this.NextRequestDT);
                                    }
                                }
                            }
                        }
                        catch (Exception ex)
                        {
                            log.Error(this.lottery.Name + " GetLotteryOpenNumberFromgdlottery 解析数据失败", ex);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                log.Error(this.lottery.Name + " GetLotteryOpenNumberFromgdlottery 获取数据失败", ex);
            }
        }
Пример #5
0
        public void GetLotteryOpenNumberFrom163()
        {
            if (DateTime.Now <= this.NextRequestDT ||
                string.IsNullOrEmpty(this.lottery.url163))
            {
                return;
            }
            try
            {
                HtmlWeb htmlWeb = new HtmlWeb();
                HtmlWeb.PreRequestHandler handler = delegate(HttpWebRequest request)
                {
                    request.Headers[HttpRequestHeader.AcceptEncoding] = "gzip, deflate";
                    request.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip;
                    request.CookieContainer        = new CookieContainer();
                    return(true);
                };
                htmlWeb.PreRequest += handler;
                var doc = htmlWeb.Load(this.lottery.url163);

                var tds = doc.DocumentNode.SelectNodes("//td");
                if (tds == null)
                {
                    return;
                }
                var lotteries = new List <LotteryOpenHistory>();
                foreach (var td in tds)
                {
                    try
                    {
                        HtmlAttribute attr_data_win_number = td.Attributes["data-award"];
                        HtmlAttribute attr_data_period     = td.Attributes["data-period"];
                        if (attr_data_win_number != null && attr_data_period != null)
                        {
                            var win_number = attr_data_win_number.Value;
                            var period     = attr_data_period.Value;
                            if (string.IsNullOrEmpty(win_number) || string.IsNullOrEmpty(period))
                            {
                                continue;
                            }
                            period = this.lottery.Prefix + period;
                            // 过滤掉已经添加的期号
                            var qihao = Convert.ToInt32(period);
                            if (qihao < this.NextQiHao)
                            {
                                continue;
                            }
                            lotteries.Add(new LotteryOpenHistory
                            {
                                OpenNumber = win_number.Replace(" ", ","),
                                QiHao      = period,
                            });
                        }
                    }
                    catch (Exception ex)
                    {
                        log.Error(this.lottery.Name + " GetLotteryOpenNumberFrom163 解析数据失败", ex);
                    }
                }
                lotteries = lotteries.OrderBy(w => w.QiHao).ToList();
                //log.Info("下一期期号:" + this.NextQiHao + this.lottery.Name + ":" + lotteries.Count + " " + JsonConvert.SerializeObject(lotteries));
                using (var db = new OlaEntities())
                {
                    foreach (var lotteryOpen in lotteries)
                    {
                        try
                        {
                            var lotteryOpenTimes = db.LotteryOpenTimes
                                                   .FirstOrDefault(w => w.LotteryId == this.lottery.LotteryId && w.QiHao == lotteryOpen.QiHao);
                            if (lotteryOpenTimes != null)
                            {
                                lotteryOpen.OpenTime = lotteryOpenTimes.OpenTime.ToString("yyyy-MM-dd HH:mm:ss");
                                var history = db.LotteryOpenHistories
                                              .Any(w => w.LotteryId == this.lottery.LotteryId && w.QiHao == lotteryOpen.QiHao);
                                if (!history)
                                {
                                    // 预测
                                    GetForecast(db, lotteryOpen);

                                    lotteryOpen.Id         = Guid.NewGuid();
                                    lotteryOpen.LotteryId  = this.lottery.LotteryId;
                                    lotteryOpen.CreateTime = DateTime.Now;
                                    lotteryOpen.Source     = (int)LotteryOpenNumberSourceEnum.网易彩票;

                                    // 获取前三期的预测号码
                                    GetPreForecast(db, lotteryOpen);
                                    db.LotteryOpenHistories.Add(lotteryOpen);
                                    db.SaveChanges();
                                    UpdateWebClientLotteryOpenInfo(lotteryOpen.LotteryId);
                                    var nextInfo = db.LotteryOpenTimes.FirstOrDefault(w => w.LotteryId == lotteryOpen.LotteryId && w.QiHao == lotteryOpenTimes.NextQiHao);
                                    if (nextInfo != null)
                                    {
                                        this.NextQiHao     = Convert.ToInt32(nextInfo.QiHao);
                                        this.NextRequestDT = nextInfo.OpenTime;
                                        log.Info("添加:" + this.lottery.Name + " 期号:" + lotteryOpen.QiHao + " 开奖号码:" + lotteryOpen.OpenNumber + " 获取时间: " + DateTime.Now + " 下次获取时间: " + this.NextRequestDT);
                                    }
                                }
                            }
                        }
                        catch (Exception ex)
                        {
                            log.Error(this.lottery.Name + " GetLotteryOpenNumberFrom163 解析数据失败", ex);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                log.Error(this.lottery.Name + " GetLotteryOpenNumberFrom163 获取数据失败", ex);
            }
        }
Пример #6
0
        public void GetLotteryOpenNumberFromgdlottery()
        {
            if (DateTime.Now <= this.NextRequestDT ||
                string.IsNullOrEmpty(this.lottery.urlgdlottery))
            {
                return;
            }
            try
            {
                HtmlWeb htmlWeb = new HtmlWeb();
                HtmlWeb.PreRequestHandler handler = delegate(HttpWebRequest request)
                {
                    request.Headers[HttpRequestHeader.AcceptEncoding] = "gzip, deflate";
                    request.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip;
                    request.CookieContainer        = new CookieContainer();
                    return(true);
                };
                htmlWeb.PreRequest += handler;
                var doc = htmlWeb.Load(this.lottery.urlgdlottery);
                var trs = doc.DocumentNode.SelectNodes("//table[@bordercolorlight='#008000']/tr");
                if (trs == null)
                {
                    return;
                }
                trs.RemoveAt(0);
                trs.RemoveAt(0);

                var lotteries = new List <LotteryOpenHistory>();
                foreach (var tr in trs)
                {
                    try
                    {
                        var tds = tr.ChildNodes;
                        if (tds.Count < 4)
                        {
                            continue;
                        }
                        var period = tds[1].InnerHtml.Trim('\r');
                        var td     = tds[3];
                        var spans  = td.ChildNodes;
                        if (spans.Count < 2)
                        {
                            continue;
                        }
                        var strongs = spans[1].ChildNodes;
                        if (strongs.Count < 2)
                        {
                            continue;
                        }
                        var win_number = strongs[1].InnerHtml.Replace("\r\n\t", "");
                        win_number = win_number.Replace("\r\n\t", "");
                        win_number = win_number.Replace("   \t", "");
                        win_number = win_number.Trim(' ');
                        win_number = win_number.Replace(',', ',');
                        if (string.IsNullOrEmpty(win_number) || string.IsNullOrEmpty(period))
                        {
                            continue;
                        }
                        period = this.lottery.Prefix + period;
                        // 过滤掉已经添加的期号
                        var qihao = Convert.ToInt32(period);
                        if (qihao < this.NextQiHao)
                        {
                            continue;
                        }
                        lotteries.Add(new LotteryOpenHistory
                        {
                            OpenNumber = win_number,
                            QiHao      = period,
                        });
                    }
                    catch (Exception ex)
                    {
                        log.Error(this.lottery.Name + " GetLotteryOpenNumberFromgdlottery 解析数据失败", ex);
                    }
                }
                lotteries = lotteries.OrderBy(w => w.QiHao).ToList();
                //log.Info("下一期期号:" + this.NextQiHao + this.lottery.Name + ":" + lotteries.Count + " " + JsonConvert.SerializeObject(lotteries));
                using (var db = new OlaEntities())
                {
                    foreach (var lotteryOpen in lotteries)
                    {
                        try
                        {
                            var lotteryOpenTimes = db.LotteryOpenTimes
                                                   .FirstOrDefault(w => w.LotteryId == this.lottery.LotteryId && w.QiHao == lotteryOpen.QiHao);
                            if (lotteryOpenTimes != null)
                            {
                                lotteryOpen.OpenTime = lotteryOpenTimes.OpenTime.ToString("yyyy-MM-dd HH:mm:ss");
                                var history = db.LotteryOpenHistories
                                              .Any(w => w.LotteryId == this.lottery.LotteryId && w.QiHao == lotteryOpen.QiHao);
                                if (!history)
                                {
                                    // 预测
                                    GetForecast(db, lotteryOpen);

                                    lotteryOpen.Id         = Guid.NewGuid();
                                    lotteryOpen.LotteryId  = this.lottery.LotteryId;
                                    lotteryOpen.CreateTime = DateTime.Now;
                                    lotteryOpen.Source     = (int)LotteryOpenNumberSourceEnum.广东体彩网;

                                    // 获取前三期的预测号码
                                    GetPreForecast(db, lotteryOpen);
                                    db.LotteryOpenHistories.Add(lotteryOpen);
                                    db.SaveChanges();
                                    UpdateWebClientLotteryOpenInfo(lotteryOpen.LotteryId);
                                    var nextInfo = db.LotteryOpenTimes.FirstOrDefault(w => w.LotteryId == lotteryOpen.LotteryId && w.QiHao == lotteryOpenTimes.NextQiHao);
                                    if (nextInfo != null)
                                    {
                                        this.NextQiHao     = Convert.ToInt32(nextInfo.QiHao);
                                        this.NextRequestDT = nextInfo.OpenTime;
                                        log.Info("添加:" + this.lottery.Name + " 期号:" + lotteryOpen.QiHao + " 开奖号码:" + lotteryOpen.OpenNumber + " 获取时间: " + DateTime.Now + ":下次获取时间 " + this.NextRequestDT);
                                    }
                                }
                            }
                        }
                        catch (Exception ex)
                        {
                            log.Error(this.lottery.Name + " GetLotteryOpenNumberFromgdlottery 解析数据失败", ex);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                log.Error(this.lottery.Name + " GetLotteryOpenNumberFromgdlottery 获取数据失败", ex);
            }
        }