コード例 #1
0
        public void Sync(Guid domainId, string appId, MovieTimesBundle bundle)
        {
            if (bundle == null)
            {
                return;
            }

            List <CommandParameter> parameterList = new List <CommandParameter>();

            parameterList.Add(new CommandParameter("@domainId", domainId));
            parameterList.Add(new CommandParameter("@appId", appId));

            _dataBase.ExecuteNonQuery(
                "UPDATE [MovieSettings] SET [SyncTime] = GETDATE() WHERE [Domain] = @domainId AND [AppId] = @appId",
                parameterList);

            parameterList = new List <CommandParameter>();
            parameterList.Add(new CommandParameter("@domainId", domainId));
            parameterList.Add(new CommandParameter("@appId", appId));
            parameterList.Add(new CommandParameter("@date", bundle.Date));
            _dataBase.ExecuteNonQuery(
                "DELETE FROM [MoviePlan] WHERE [Domain] = @domainId AND [AppId] = @appId AND [Date] = @date",
                parameterList);

            _dataBase.ExecuteNonQuery(
                "DELETE FROM [MovieTimes] WHERE [Domain] = @domainId AND [AppId] = @appId AND CONVERT(VARCHAR(10),[Time],120) = CONVERT(VARCHAR(10),@date,120)",
                parameterList);

            int i = 0;

            foreach (MovieEntity movie in bundle.MovieList)
            {
                i++;

                parameterList = new List <CommandParameter>();
                parameterList.Add(new CommandParameter("@mtimeId", movie.MtimeId));

                List <MovieEntity> movieList = _dataBase.Select <MovieEntity>(
                    "SELECT * FROM [Movie] WHERE [MtimeId] = @mtimeId", parameterList);
                if (movieList.Count == 0)
                {
                    _dataBase.Insert(movie);
                }
                else
                {
                    movie.Id = movieList[0].Id;
                }

                MoviePlanEntity plan = new MoviePlanEntity();
                plan.Domain = domainId;
                plan.AppId  = appId;
                plan.Date   = bundle.Date;
                plan.Movie  = movie.Id;
                plan.Sort   = i;
                _dataBase.Insert(plan);

                foreach (MovieTimesEntity item in movie.TimesList)
                {
                    item.Domain = domainId;
                    item.AppId  = appId;
                    item.Movie  = movie.Id;
                    _dataBase.Insert(item);
                }
            }
        }
コード例 #2
0
        private void _webBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
            _count--;

            if (_count > 0)
            {
                return;
            }

            try
            {
                //mshtml.IHTMLDocument2 htmlDoc = _webBrowser.Document as mshtml.IHTMLDocument2;
                HtmlDocument doc = _webBrowser.Document;
                HtmlElement  movieItemListRegion = doc.GetElementById("movieItemListRegion");
                if (movieItemListRegion == null)
                {
                    return;
                }

                MovieTimesBundle bundle = new MovieTimesBundle();

                _nextDate = null;

                HtmlElement           valueDateRegion  = doc.GetElementById("valueDateRegion");
                HtmlElementCollection dateLiCollection = valueDateRegion.GetElementsByTagName("li");
                for (int i = 0; i < dateLiCollection.Count; i++)
                {
                    HtmlElement dateLiItem = dateLiCollection[i];
                    if (dateLiItem.OuterHtml.Contains("class=curr"))
                    {
                        //20160304
                        string dateStr = dateLiItem.GetAttribute("_date");
                        if (_dateList.Contains(dateStr))
                        {
                            return;
                        }

                        _dateList.Add(dateStr);

                        bundle.Date = new DateTime(
                            int.Parse(dateStr.Substring(0, 4)), int.Parse(dateStr.Substring(4, 2)), int.Parse(dateStr.Substring(6, 2)));

                        if (i < dateLiCollection.Count - 1)
                        {
                            _nextDate = dateLiCollection[i + 1].GetElementsByTagName("a")[0].GetAttribute("href");
                        }
                        break;
                    }
                }

                HtmlElementCollection listBCollection = movieItemListRegion.GetElementsByTagName("b");
                foreach (HtmlElement listBItem in listBCollection)
                {
                    MovieEntity movie = new MovieEntity();
                    movie.MtimeId = int.Parse(listBItem.GetAttribute("_movieid"));
                    movie.Name    = listBItem.GetElementsByTagName("a")[0].GetAttribute("title");
                    movie.Image   = listBItem.GetElementsByTagName("img")[0].GetAttribute("src");

                    //模拟点击
                    mshtml.IHTMLElement movieItem = (mshtml.IHTMLElement)listBItem.DomElement;
                    movieItem.click();

                    //详情
                    HtmlElement           movieDetailRegion = doc.GetElementById("movieDetailRegion");
                    HtmlElementCollection detailPCollection = movieDetailRegion.GetElementsByTagName("p");

                    HtmlElementCollection detailSpan = detailPCollection[0].GetElementsByTagName("span");
                    if (detailSpan.Count == 1)
                    {
                        movie.Director = detailSpan[0].InnerText.Replace("导演:", "");
                    }
                    else if (detailSpan.Count == 2)
                    {
                        movie.Director = detailSpan[0].InnerText.Replace("导演:", "");
                        movie.Actor    = detailSpan[1].InnerText.Replace("主演:", ""); //主演有可能没有,如动画片
                    }

                    detailSpan = detailPCollection[1].GetElementsByTagName("span");
                    if (detailSpan.Count == 1)
                    {
                        movie.Type = detailSpan[0].InnerText.Replace("类型:", "");
                    }
                    else if (detailSpan.Count == 2)
                    {
                        movie.Time = detailSpan[0].InnerText.Replace("时长:", ""); //时长有可能没有
                        movie.Type = detailSpan[1].InnerText.Replace("类型:", "");
                    }

                    //场次
                    HtmlElement           showtimesRegion      = doc.GetElementById("showtimesRegion");
                    HtmlElementCollection showtimeTRCollection =
                        showtimesRegion.GetElementsByTagName("tr");
                    foreach (HtmlElement trItem in showtimeTRCollection)
                    {
                        MovieTimesEntity timesEntity = new MovieTimesEntity();
                        timesEntity.Movie = movie.Id;

                        HtmlElementCollection tdList = trItem.GetElementsByTagName("td");

                        HtmlElementCollection pList = tdList[0].GetElementsByTagName("p");

                        //0点首映的片子,排片表第一行是“次日场”三个字
                        if (pList.Count == 0)
                        {
                            continue;
                        }

                        timesEntity.Time    = DateTime.Parse(bundle.Date.ToShortDateString() + " " + pList[0].InnerText);
                        timesEntity.EndTime = pList[1].InnerText;

                        pList = tdList[1].GetElementsByTagName("p");
                        timesEntity.ShowType = pList[0].InnerText;
                        timesEntity.Language = pList[1].InnerText;

                        pList = tdList[2].GetElementsByTagName("p");
                        timesEntity.ScreeningRoom = pList[0].InnerText;

                        movie.TimesList.Add(timesEntity);
                    }

                    bundle.MovieList.Add(movie);
                }

                _bundleList.Add(bundle);
            }
            catch (Exception ex)
            {
                _exceptionHandling.HandleException(ex);
                return;
            }

            if (String.IsNullOrEmpty(_nextDate) == false)
            {
                _webBrowser.Navigate(_nextDate);
            }
            else
            {
                _webBrowser.DocumentCompleted -= _webBrowser_DocumentCompleted;

                if (Complete != null)
                {
                    CinemaSpiderCompleteEventArgs args = new CinemaSpiderCompleteEventArgs()
                    {
                        Settings             = _settings,
                        MovieTimesBundleList = _bundleList
                    };
                    Complete(this, args);
                }
            }
        }