public string DoOneJob(IPipeline Pipeline) { int SuccCount = 0, ErrCount = 0; DateTime nextWorkTime = Utilities.Epoch; while (!StopFlag) { if (DateTime.Now > nextWorkTime) { Item item = GetNextJob(); if (item != null) { try { #region 获取最新转发列表 List <NetDimension.Weibo.Entities.status.Entity> result = new List <NetDimension.Weibo.Entities.status.Entity>(); try { WeiboAPI.GetRepostOfStatus(item, result); } catch (WeiboException ex) { ErrCount++; nextWorkTime = WeiboAPI.rateLimitStatus.ResetTime; SendMsg(ex.ToString()); } for (int i = 0; i < result.Count; ++i) { var newItem = ItemDBManager.ConvertToItem(result[i], Enums.AuthorSource.TopicTrack, CrawlID); ItemDBManager.InsertOrUpdateItem(newItem); } #endregion #region 更新转发评论数的历史记录 try { var countData = WeiboAPI.GetRepostAndReplyCount(item.ClientItemID); item.CurrentCount.FetchTime = DateTime.Now; item.CurrentCount.ForwardCount = countData.Item1; item.CurrentCount.ReplyCount = countData.Item2; } catch (WeiboException ex) { ErrCount++; nextWorkTime = WeiboAPI.rateLimitStatus.ResetTime; SendMsg(ex.ToString()); } List <ItemCountData> count = null; if (item.CountHistory == null) { count = new List <ItemCountData>(); } else { count = new List <ItemCountData>(item.CountHistory); } count.Add(item.CurrentCount); item.CountHistory = count.ToArray(); #endregion item.Tracking_Forward.FollowCount++; if (WeiboUtilities.ShouldKeepFollow(item)) { item.Tracking_Forward.FollowStatus = Enums.CrawlStatus.Normal; } else { item.Tracking_Forward.FollowStatus = Enums.CrawlStatus.Stop; } SuccCount++; continue; } catch (Exception ex) { item.Tracking_Forward.FollowStatus = Enums.CrawlStatus.Normal; ErrCount++; nextWorkTime = WeiboAPI.rateLimitStatus.ResetTime; SendMsg(ex.ToString()); } finally { item.Tracking_Forward.FollowNextTime = DateTime.Now.AddMinutes(DefaultSettings.RepostTrackingInterval.TotalMinutes); ItemDBManager.PushbackRepostTrackingJob(item); } } } Thread.Sleep(IntervalMS); } StopFlag = false; return(SuccCount == 0 && ErrCount == 0 ? "Nothing to do" : string.Format("OneJob Done. Succ {0} Err {1}", SuccCount, ErrCount)); }