Ejemplo n.º 1
0
        public string DoOneJob(IPipeline Pipeline)
        {
            SendMsg("暂时不执行回复跟踪任务");
            StopFlag = true;
            int      SuccCount = 0, ErrCount = 0;
            DateTime nextWorkTime = Utilities.Epoch;

            while (!StopFlag)
            {
                if (DateTime.Now > nextWorkTime)
                {
                    Item item = GetNextJob();
                    if (item != null)
                    {
                        try
                        {
                            //最新评论列表
                            List <NetDimension.Weibo.Entities.comment.Entity> result = new List <NetDimension.Weibo.Entities.comment.Entity>();
                            try
                            {
                                WeiboAPI.GetCommentsOfStatus(item, result);
                            }
                            catch (WeiboException ex)
                            {
                                ErrCount++;
                                nextWorkTime = WeiboAPI.rateLimitStatus.ResetTime;
                                SendMsg(ex.ToString());
                            }
                            for (int i = 0; i < result.Count; ++i)
                            {
                                var reply = ItemReplyDBManager.ConvertToItemReply(result[i]);
                                ItemReplyDBManager.InsertItemReply(reply);
                            }

                            item.Tracking.ReplyCount += result.Count;
                            item.Tracking.FollowCount++;
                            if (WeiboUtilities.ShouldKeepFollow(item))
                            {
                                item.Tracking.FollowStatus = Enums.CrawlStatus.Normal;
                            }
                            else
                            {
                                item.Tracking.FollowStatus = Enums.CrawlStatus.Stop;
                            }
                            SuccCount++;
                            continue;
                        }
                        catch (WeiboException ex)
                        {
                            item.Tracking.FollowStatus = Enums.CrawlStatus.Normal;
                            ErrCount++;
                            nextWorkTime = WeiboAPI.rateLimitStatus.ResetTime;
                            SendMsg(ex.ToString());
                        }
                        finally
                        {
                            item.Tracking.FollowNextTime = DateTime.Now.AddMinutes(DefaultSettings.ReplyTrackingInterval.TotalMinutes);
                            ItemDBManager.PushbackReplyTrackingJob(item);
                        }
                    }
                }
                Thread.Sleep(IntervalMS);
            }
            StopFlag = false;
            return(SuccCount == 0 && ErrCount == 0 ? "Nothing to do" : string.Format("OneJob Done. Succ {0} Err {1}", SuccCount, ErrCount));
        }