Esempio n. 1
0
        private List <Post> GetPosts(VkWallParametersModel model)
        {
            var posts = new List <Post>();
            var count = model.InnerStep;

            if (model.InnerStep > 100)
            {
                count = 100;
            }

            // получить список всех постов на стене сообщества
            for (var cycleNumber = 0; cycleNumber < model.CyclesCount; cycleNumber++)
            {
                try
                {
                    var requestString    = _vkUrlService.GetWallPosts(cycleNumber * count, count, model.GroupId, AccessToken);
                    var postsJson        = _vkBaseService.GetJsonFromResponse(_vkWallRequestService.Request(requestString));
                    var currentIteration = JsonConvert.DeserializeObject <List <Post> >(postsJson);

                    posts.AddRange(currentIteration);
                }
                catch (Exception exception)
                {
                    Logger.Error("Error in GetPosts: {0}", exception.Message);
                }
            }

            return(posts);
        }
Esempio n. 2
0
        private IEnumerable <XDocument> GetPosts(VkWallParametersModel model)
        {
            var posts = new List <XDocument>();
            var count = model.InnerStep;

            if (model.InnerStep > 100)
            {
                count = 100;
            }

            // получить список всех постов на стене сообщества
            for (var cycleNumber = 0; cycleNumber < model.CyclesCount; cycleNumber++)
            {
                try
                {
                    var currentIteration = RequestService.GetWallPosts(cycleNumber * count, count, model.GroupId, AccessToken);
                    posts.Add(currentIteration);
                }
                catch (Exception exception)
                {
                    Logger.Error("Error in GetPosts: {0}", exception.Message);
                }
            }

            return(posts);
        }
Esempio n. 3
0
        private IEnumerable <string> GetAllGroupUsers(VkWallParametersModel model)
        {
            var users      = new List <string>();
            var userCounts = GetAllGroupUsersCount(model.GroupId);

            var cyclesCount = userCounts / 1000 + 1;

            // получить список всех постов на стене сообщества
            for (var cycleNumber = 0; cycleNumber < cyclesCount; cycleNumber++)
            {
                var tryAgain = true;
                while (tryAgain)
                {
                    try
                    {
                        var currentIteration = RequestService.GetGroupUsers(cycleNumber * 1000, 1000, model.GroupId, AccessToken);
                        var usersList        =
                            currentIteration.Document.Element("response")
                            .Element("users")
                            .Elements("uid")
                            .Select(element => element.Value);
                        users.AddRange(usersList);
                        tryAgain = false;
                        Thread.Sleep(1000);
                    }
                    catch (Exception exception)
                    {
                        Logger.Error("Error in GetAllGroupUsers: {0}", exception.Message);
                    }
                }
            }

            return(users);
        }
Esempio n. 4
0
        private IEnumerable <string> GetExcludeUserList(string groupId, DateTime startDate)
        {
            var maxCount = GetPostsCount(groupId);
            var cc       = (decimal)maxCount / 100;

            var allPostsParametersModel = new VkWallParametersModel()
            {
                InnerStep   = 100,
                OuterStep   = 0,
                GroupId     = groupId,
                CyclesCount = (int)Math.Ceiling((double)cc)
            };

            var allPostsXDoc = GetPosts(allPostsParametersModel); //все посты

            var allRawPosts = GetRawPostsFromXml(allPostsXDoc);

            var allActiveUsers = GetAlreadyActiveUsers(allRawPosts, startDate, groupId).Distinct().ToList();

            return(allActiveUsers);
        }
Esempio n. 5
0
        private VkWallParametersModel PrepareParameters(string groupId, DateTime startDate, DateTime endDate)
        {
            var needToParseCount = (endDate - startDate).Days * 4;

            var parametersModel = new VkWallParametersModel
            {
                // Внутренний шаг для поиска постов, параметр count
                InnerStep = 100,
                // Внешний шаг для пропуска ненужных постов, параметр offset
                OuterStep   = (DateTime.Now - endDate).Days,
                GroupId     = groupId,
                CyclesCount = 1
            };

            if (needToParseCount > 100)
            {
                var cc = (decimal)needToParseCount / 100;
                parametersModel.CyclesCount = (int)Math.Ceiling((double)cc) * 3;
            }

            return(parametersModel);
        }