Esempio n. 1
0
        /// <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);
        }
Esempio n. 2
0
        /// <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);
        }
Esempio n. 3
0
        /// <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);
        }