Пример #1
0
        public void SaveAffinityIndex(AffinityIndexResult result, string userId, string name)
        {
            using (var ms = new MemoryStream())
            {
                var binaryFormatter = new BinaryFormatter();
                binaryFormatter.Serialize(ms, result);
                byte[] rr = ms.GetBuffer();

                var cntx = new BaseDb();
                cntx.VkAffinityIndexResults.Add(new VkAffinityIndexResults
                {
                    UserId         = userId,
                    Name           = name,
                    CollectionDate = DateTime.Now,
                    Result         = rr
                });
                cntx.SaveChanges();
            }
        }
Пример #2
0
        public AffinityIndexResult GetResult(int id)
        {
            var resultDb = _vkDbService.GetAffinityIndexResult(id);

            var result = new AffinityIndexResult();

            try
            {
                var formatter = new BinaryFormatter();
                using (var ms = new MemoryStream(resultDb.Result))
                {
                    result = (AffinityIndexResult)formatter.Deserialize(ms);
                }
            }
            catch (Exception ex)
            {
            }

            return(result);
        }
Пример #3
0
        public void Start(IEnumerable <AffinityIndexOptionsAuditoryModel> audiencesUnderAnalysis, AffinityIndexOptionsAuditoryModel comparativeAudience, string accountId, string clientId, string accessToken, string userId, string name)
        {
            var result = new AffinityIndexResult
            {
                ComparativeAudience = comparativeAudience.Name
            };

            var categories = GetCategories(accessToken);

            categories.ForEach(cat => result.Results.Add(new AffinityIndexCounter
            {
                Category   = cat.Name,
                CategoryId = cat.Id
            }));

            //Сравнительная аудитория
            //Общая кампания для запроса
            var affinityIndexCampaign = CreateCampaign(accountId, clientId, accessToken, "common");

            var allCategories = string.Join(",", categories.Select(c => c.Id));

            var commonСomparativeAd = CreateAd(accountId, accessToken, affinityIndexCampaign.Id,
                                               comparativeAudience.Gender, comparativeAudience.AgesFrom, comparativeAudience.AgesUpTo, comparativeAudience.Status, comparativeAudience.InterestGroupIds,
                                               comparativeAudience.ExcludeInterestGroupIds, allCategories, comparativeAudience.Country, comparativeAudience.Cities, comparativeAudience.ExcludeCities,
                                               comparativeAudience.RetargetGroupIds, comparativeAudience.ExcludeRetargetGroupIds);

            var commonСomparativeTargeting = GetAdTarget(accountId, clientId, string.Format("[{0}]", commonСomparativeAd.Id), accessToken);

            if (!string.IsNullOrEmpty(commonСomparativeTargeting.ErrorDesc))
            {
                result.ErrorMessage =
                    string.Format(
                        "Выбранные Вами параметры настроек для аудитории {0} содержат в себе слишком мало людей для анализа.", comparativeAudience.Name);
            }

            //Анализируемые аудтиории

            if (string.IsNullOrEmpty(result.ErrorMessage))
            {
                foreach (var audience in audiencesUnderAnalysis)
                {
                    result.Audience = audience.Name;

                    var commonAd = CreateAd(accountId, accessToken, affinityIndexCampaign.Id,
                                            audience.Gender, audience.AgesFrom, audience.AgesUpTo, audience.Status, audience.InterestGroupIds,
                                            audience.ExcludeInterestGroupIds, allCategories, audience.Country, audience.Cities, audience.ExcludeCities,
                                            audience.RetargetGroupIds, audience.ExcludeRetargetGroupIds);

                    var commonTargeting = GetAdTarget(accountId, clientId, string.Format("[{0}]", commonAd.Id), accessToken);
                    if (!string.IsNullOrEmpty(commonTargeting.ErrorDesc))
                    {
                        continue;
                    }

                    foreach (var category in categories)
                    {
                        var categoryAd = CreateAd(accountId, accessToken, affinityIndexCampaign.Id,
                                                  audience.Gender, audience.AgesFrom, audience.AgesUpTo, audience.Status, audience.InterestGroupIds,
                                                  audience.ExcludeInterestGroupIds, category.Id.ToString(), audience.Country, audience.Cities, audience.ExcludeCities,
                                                  audience.RetargetGroupIds, audience.ExcludeRetargetGroupIds);

                        if (!string.IsNullOrEmpty(categoryAd.ErrorDesc))
                        {
                            continue;
                        }

                        var categoryTargeting = GetAdTarget(accountId, clientId, string.Format("[{0}]", categoryAd.Id), accessToken);

                        result.Results.First(f => f.CategoryId == category.Id).Audience1Abs    = categoryTargeting.Count;
                        result.Results.First(f => f.CategoryId == category.Id).Audience1Result =
                            (decimal)categoryTargeting.Count / (decimal)commonTargeting.Count;
                    }
                }

                //Выгрузка категорий сравнительной аудитории
                foreach (var category in categories)
                {
                    if (result.Results.All(f => f.Audience1Result == 0))
                    {
                        continue;
                    }

                    var categoryAd = CreateAd(accountId, accessToken, affinityIndexCampaign.Id,
                                              comparativeAudience.Gender, comparativeAudience.AgesFrom, comparativeAudience.AgesUpTo, comparativeAudience.Status, comparativeAudience.InterestGroupIds,
                                              comparativeAudience.ExcludeInterestGroupIds, category.Id.ToString(), comparativeAudience.Country, comparativeAudience.Cities, comparativeAudience.ExcludeCities,
                                              comparativeAudience.RetargetGroupIds, comparativeAudience.ExcludeRetargetGroupIds);

                    if (!string.IsNullOrEmpty(categoryAd.ErrorDesc))
                    {
                        continue;
                    }

                    var categoryTargeting = GetAdTarget(accountId, clientId, string.Format("[{0}]", categoryAd.Id), accessToken);

                    result.Results.First(f => f.CategoryId == category.Id).Audience2Abs    = categoryTargeting.Count;
                    result.Results.First(f => f.CategoryId == category.Id).Audience2Result = (decimal)categoryTargeting.Count / (decimal)commonСomparativeTargeting.Count;
                }

                result.Results.Where(w => w.Audience1Result != 0 && w.Audience2Result != 0).ForEach(f => f.Index = f.Audience1Result / f.Audience2Result);
            }

            result.DateOfCollection = DateTime.Now;

            _vkDbService.SaveAffinityIndex(result, userId, name);
        }