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); } } }
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); } } }