/// <summary> /// Добавляет недостающие проекты. /// </summary> /// <param name="projects"></param> /// <returns></returns> public int AddGroups(IEnumerable <XmlProject> projects) { var syncProjects = GetSyncProjectGroups(projects); int counter = 0; foreach (var proj in syncProjects) { var createGroups = SyncHelper.GetItemsForCreate( proj.XmlObjects, proj.ApiObjects, g => GetGroupNameKey(g.Name), g => GetGroupNameKey(g.GroupName)); foreach (var group in createGroups) { var request = _requestBuilder.GetAddKeywordGroupRequest( proj.ParentId, group.Name, group.Enabled); var groupId = _client.GetMessageResult(request); var newGroup = new SyncKeywordGroup( proj.ParentId, groupId, group.Name, group.Enabled); _apiGroups.Add(newGroup); ++counter; } } return(counter); }
/// <summary> /// Добавляет недостающие фразы. /// </summary> /// <param name="projects"></param> /// <returns></returns> public int AddKeywords(IEnumerable <XmlProject> projects) { var syncGroupPair = GetSyncGroupsPair(projects); int counter = 0; foreach (var groupPair in syncGroupPair) { var apiGroup = groupPair.Item2; var createWords = SyncHelper.GetItemsForCreate( groupPair.Item1.Keywords.Where(k => !string.IsNullOrEmpty(k.Phrase)), apiGroup.Keywords, w => GetPhraseKey(w.Phrase), w => GetPhraseKey(w.Phrase)); // пакетное добавление фраз без таргета var addKeywords = createWords .Where(k => string.IsNullOrEmpty(k.TargetUrl)) .ToList(); if (addKeywords.Count > 0) { var request = _requestBuilder.GetAddKeywordsRequest( apiGroup.ProjectId, addKeywords.Select(p => p.Phrase), apiGroup.Id); var res = _client.GetMessageResult(request); foreach (var word in addKeywords) { apiGroup.AddKeyword(word.Phrase); } counter += addKeywords.Count; } // добавление по одной фразе с таргетом, чтобы получать их id addKeywords = createWords .Where(k => !string.IsNullOrEmpty(k.TargetUrl)) .ToList(); foreach (var word in addKeywords) { var request = _requestBuilder.GetAddKeywordRequest( apiGroup.ProjectId, word.Phrase, apiGroup.Id); var phraseId = _client.GetMessageResult(request); var keyword = apiGroup.AddKeyword(word.Phrase); keyword.Id = phraseId; ++counter; } } return(counter); }
/// <summary> /// Добавляет недостающие проекты. /// </summary> /// <param name="projects"></param> /// <returns></returns> public int AddProjects(IEnumerable <XmlProject> projects) { var createProjects = SyncHelper.GetItemsForCreate( projects, _apiProjects, p => GetSiteKey(p.Site), p => GetSiteKey(p.Site)) .ToList(); foreach (var proj in createProjects) { var request = _requestBuilder.GetAddProjectRequest(proj.Site); var projectId = _client.GetMessageResult(request); var newProject = new ApiProject() { Id = projectId, Site = proj.Site, On = 0 }; _apiProjects.Add(newProject); } return(createProjects.Count); }