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