public async Task <string> setJsonData(string json, string namePage, string key, string nameData) { if (string.IsNullOrEmpty(json)) { return("Não recebemos o valor dos insigths."); } if (string.IsNullOrEmpty(namePage) && string.IsNullOrEmpty(key)) { return("usuario e chave não encontrados."); } try { InfluencersMetrics.MongoRep repMongo = new InfluencersMetrics.MongoRep("MetricasInsights", _settings, key); if (nameData == "Usuario") { var js = JsonConvert.DeserializeObject <webMetrics.Models.Graph.Usuario>(json); await repMongo.GravarOne <webMetrics.Models.Graph.Usuario>(js); } if (nameData == "Media") { var js = JsonConvert.DeserializeObject <webMetrics.Models.Graph.Media>(json); await repMongo.GravarOne <webMetrics.Models.Graph.Media>(js); } if (nameData == "tags") { var js = JsonConvert.DeserializeObject <webMetrics.Models.Graph.Tags>(json); await repMongo.GravarOne <webMetrics.Models.Graph.Tags>(js); } if (nameData == "Stories") { var js = JsonConvert.DeserializeObject <webMetrics.Models.Graph.Stories>(json); await repMongo.GravarOne <webMetrics.Models.Graph.Stories>(js); } if (nameData == "dataStories") { var js = JsonConvert.DeserializeObject <webMetrics.Models.DTO.InsigthStory>(json); await repMongo.GravarOne <webMetrics.Models.DTO.InsigthStory>(js); } if (nameData == "UserInsights") { var js = JsonConvert.DeserializeObject <InfluencersMetricsService.Model.UserInsights>(json); await repMongo.GravarOne <InfluencersMetricsService.Model.UserInsights>(js); } if (nameData == "Growth") { var js = JsonConvert.DeserializeObject <InfluencersMetricsService.Model.UserInsights>(json); await repMongo.GravarOne <InfluencersMetricsService.Model.UserInsights>(js); } if (nameData == "InsightsCity") { var js = JsonConvert.DeserializeObject <webMetrics.Models.Graph.InsightsGenderAge>(json); await repMongo.GravarOne <webMetrics.Models.Graph.InsightsGenderAge>(js); } if (nameData == "InsightsGenderAge") { var js = JsonConvert.DeserializeObject <webMetrics.Models.DTO.Insigth>(json); var lstIns = new List <webMetrics.Models.DTO.InsigthDTO>(); js.data.ForEach(f => { lstIns.Add(new webMetrics.Models.DTO.InsigthDTO() { data = new List <webMetrics.Models.DTO.DatumDTO>() { new webMetrics.Models.DTO.DatumDTO() { description = f.description, id = f.id, name = f.name, period = f.period, title = f.title, values = f.values.Select(s => new webMetrics.Models.DTO.ValueDTO() { end_time = s.end_time, value = s.value.Select(sv => new webMetrics.Models.DTO.ValueName() { name = sv.Key, valor = sv.Value.ToString() }).ToList() }).ToList() } } }); }); await repMongo.GravarOne <webMetrics.Models.DTO.InsigthDTO>(lstIns.FirstOrDefault()); } return(""); } catch (Exception) { return("Error#" + nameData); } }
private async Task MakeBestHourAsync(List <Response <string> > listTokensUser, IEnumerable <string> listTokenUserDistinct) { DateTime dtInicio = DateTime.Now; setSetting(); InfluencersMetrics.MongoRep repMongo = new InfluencersMetrics.MongoRep("ROBO", _settings); await repMongo.LimparBestHour(); var lstInsightsFull = await repMongo.ListarGraphStoryId(); foreach (var _access_token in listTokenUserDistinct) { try { if (!access_token_suspensos.Exists(e => e.AccessToken == _access_token)) { var lstUsers = listTokensUser.Where(w => w.access_token == _access_token).Select(s => s.userId).ToList(); var lstStories = await repMongo.GetStoriesPending(lstUsers); var lstStoryBestHour = new List <InfluencersMetricsService.Model.StoryBestHour>(); var lstStoryBestHourC = new ConcurrentBag <InfluencersMetricsService.Model.StoryBestHour>(); var lstStoryId = new List <string>(); var usuarioIdFirst = listTokensUser.Where(w => w.access_token == _access_token).FirstOrDefault().userId; var lstInsightsByUser = lstInsightsFull.Where(e => e.Obj != null && ((e.Obj.data != null) && (lstUsers.Contains(e.UsuarioId)))).ToList(); try { foreach (var itemStory in lstStories) { if (itemStory.Obj != null && (itemStory.Obj.data != null)) { itemStory.Obj.data.ForEach(s => { lstStoryId.Add(s.id.Replace("/insights/reach/lifetime", "").ToString()); }); } } } catch (Exception ex) { } var lstStoryIdEnumerable = lstStoryId.Distinct(); try { var lstInsights = lstInsightsByUser.Where(e => e.Obj != null && ((e.Obj.data != null) && (e.Obj.data.Exists(x => lstStoryIdEnumerable.Select(ds => ds + "/insights/reach/lifetime").ToList().Contains(x.id))))).ToList(); Parallel.ForEach(lstInsights, (f) => //lstInsights.AsParallel(f => { if (f.Obj != null && (f.Obj.data != null)) { var hour = new InfluencersMetricsService.Model.StoryBestHour { UsuarioId = "", idStory = f.Obj.data.Where(w => w.name == "reach").FirstOrDefault().id.Replace("/insights/reach/lifetime", ""), DateCreation = Convert.ToDateTime(new DateTime(01, 01, 01, 0, 0, 0).Add(f.timeSpan)), Hour = Convert.ToDateTime(new DateTime(01, 01, 01, 0, 0, 0).Add(f.timeSpan)).Hour, ValorReach = f.Obj.data.Where(w => w.name == "reach").FirstOrDefault().values.FirstOrDefault().value, DiaDaSemana = Convert.ToDateTime(new DateTime(01, 01, 01, 0, 0, 0).Add(f.timeSpan)).DayOfWeek }; lstStoryBestHourC.Add(hour); } }); lstStoryBestHour = lstStoryBestHourC.Select(s => (StoryBestHour)(s)).ToList(); } catch (Exception ex) { //break; } if (lstStoryBestHour.Count() > 0) { foreach (var _item in lstUsers) { await repMongo.GravarStoryBestHour <List <InfluencersMetricsService.Model.StoryBestHour> >(lstStoryBestHour, _item); } lstStoryBestHour = new List <StoryBestHour>(); } } } catch (Exception ex) { //TODO: Gerar log } } DateTime dtFinal = DateTime.Now; }
private async Task <bool> MakeInfluencersInc() { var linhaerro = 0; setSetting(); try { InfluencersMetrics.MongoRep repMongoU = new InfluencersMetrics.MongoRep("ROBO", _settings); var lstUsuarioPendentes = await repMongoU.ListarUsuariosPorTipo("5"); foreach (var it in lstUsuarioPendentes) { var _id = it._id.ToString(); var usuario = await repMongoU.ListarById <webMetrics.Models.Usuario>(it._id.AsObjectId); if (usuario == null) { break; } var access_token = usuario.FirstOrDefault().Obj.access_token_page; var _instagram_business_account = usuario.FirstOrDefault().Obj.UsuarioInstagram; var _UserId = _id;// HttpContext.Session.GetString("UserId"); InfluencersMetrics.MongoRep repMongo = new InfluencersMetrics.MongoRep(_UserId, _settings, _id); var resultUsuario = await GetDataGraphAsync <webMetrics.Models.Graph.Usuario>(access_token, _instagram_business_account + "?fields=biography,id,ig_id,followers_count,follows_count,media_count,name,profile_picture_url,username,website"); if (resultUsuario != null) { var resultUsuarioData = await setJsonData(JsonConvert.SerializeObject(resultUsuario), "novaconsulta", _id, "Usuario"); var user = usuario.FirstOrDefault().Obj; user.Tipo = "4"; user.AgenciaUserId = "5cd38b8c8daa4f1cc82752c2"; user.Nome = resultUsuario.name; user.name_page = resultUsuario.name; if (await repMongoU.SalvarAlteracoesUsuario(user, usuario.FirstOrDefault()._id.AsObjectId)) { var resultMedia = await GetDataGraphAsync <webMetrics.Models.Graph.Media>(access_token, _instagram_business_account + "/media?fields=caption,children,comments{username,text,id},comments_count,id,ig_id,is_comment_enabled,like_count,media_type,media_url,owner,permalink,shortcode,thumbnail_url,timestamp,username"); var resultMediaData = await setJsonData(JsonConvert.SerializeObject(resultMedia), "novaconsulta", _id, "Media"); var resultTags = await GetDataGraphAsync <webMetrics.Models.Graph.Tags>(access_token, _instagram_business_account + "/tags?fields=caption,owner,username,media_url,comments_count,like_count&limit=25"); var resultTagsData = await setJsonData(JsonConvert.SerializeObject(resultTags), "novaconsulta", _id, "tags"); var resultInsightsAge = await GetDataGraphAsync <webMetrics.Models.DTO.Insigth>(access_token, _instagram_business_account + "/insights?metric=audience_gender_age&period=lifetime"); var resultInsightsAgeData = await setJsonData(JsonConvert.SerializeObject(resultInsightsAge), "novaconsulta", _id, "InsightsGenderAge"); var resultInsightsCity = await GetDataGraphAsync <webMetrics.Models.Graph.InsightsGenderAge>(access_token, _instagram_business_account + "/insights?metric=audience_city&period=lifetime"); var resultInsightsCityData = await setJsonData(JsonConvert.SerializeObject(resultInsightsCity), "novaconsulta", _id, "InsightsCity"); var resultInsightsUserPro = await GetDataGraphAsync <InfluencersMetricsService.Model.UserInsights>(access_token, _instagram_business_account + "/insights?metric=profile_views&period=day"); var resultInsightsUserProData = await setJsonData(JsonConvert.SerializeObject(resultInsightsUserPro), "novaconsulta", _id, "UserInsights"); var resultInsightsUser = await GetDataGraphAsync <InfluencersMetricsService.Model.UserInsights>(access_token, _instagram_business_account + "/insights?metric=impressions,reach&period=week"); var resultInsightsUserData = await setJsonData(JsonConvert.SerializeObject(resultInsightsUser), "novaconsulta", _id, "UserInsights"); var resultStory = await GetDataGraphAsync <webMetrics.Models.Graph.Stories>(access_token, _instagram_business_account + "/stories?fields=media_url,permalink,username,owner,media_type,shortcode,timestamp"); var resultStoryData = await setJsonData(JsonConvert.SerializeObject(resultStory), "novaconsulta", _id, "Stories"); } } } } catch (Exception ex) { Library.WriteErrorLog("MakeInfluencersInc," + linhaerro + "," + ex.Message.ToString()); } return(true); }
private async Task MakeUserBestHourAsync() { var lst = new List <InfluencersMetricsService.Model.StoryBestHour>(); setSetting(); InfluencersMetrics.MongoRep repMongo = new InfluencersMetrics.MongoRep("ROBO", _settings); var lstStories = await repMongo.ListarStoriesBest(); Library.WriteErrorLog("MakeDiarios - ListarStoriesBest"); lstStories.ForEach(i => { i.Obj.ForEach(f => { f.UsuarioId = i.UsuarioId; }); i.Obj.ForEach(f => { lst.Add(new StoryBestHour() { DateCreation = f.DateCreation, DiaDaSemana = f.DiaDaSemana, Hour = f.Hour, idStory = f.idStory, UsuarioId = f.UsuarioId, ValorReach = f.ValorReach }); }); }); Library.WriteErrorLog("MakeDiarios - lstFull - Antes"); var lstFull = lst .GroupBy(a => new { a.UsuarioId, a.DiaDaSemana, a.idStory, a.Hour }) .Select(a => new InfluencersMetricsService.Model.StoryUserBestHour() { UsuarioId = a.First().UsuarioId, DiaDaSemana = a.First().DiaDaSemana, Hour = a.First().Hour, ValorReach = a.Max(m => m.ValorReach) - a.Min(m => m.ValorReach) } ).ToList(); Library.WriteErrorLog("MakeDiarios - lstFull - Depois"); List <Task> lstTasks = new List <Task>(); lstFull.Select(s => s.UsuarioId).Distinct().ForEach(us => { repMongo = new InfluencersMetrics.MongoRep("ROBO", _settings, us); lstTasks.Add(repMongo.GravarOne <List <StoryUserBestHour> >(lstFull.Where(w => w.UsuarioId == us).ToList())); }); Library.WriteErrorLog("MakeDiarios - foreach repMongo: Task==>" + lstTasks.Count().ToString()); Task.WaitAll(lstTasks.ToArray()); Library.WriteErrorLog("MakeDiarios - foreach repMongo Pronto"); //var lstUsuario = lst.Select(s => s.UsuarioId).Distinct(); //foreach (var us in lstUsuario) //{ // var lstDiaSemana = lst.Where(w => w.UsuarioId == us).Select(s => s.DiaDaSemana).Distinct(); // foreach (var ds in lstDiaSemana) // { // var lstStory = lst.Where(w => w.UsuarioId == us && w.DiaDaSemana == ds).Select(s => s.idStory).Distinct(); // foreach (var stor in lstStory) // { // var lstHour = lst.Where(w => w.UsuarioId == us && w.DiaDaSemana == ds && w.idStory == stor).Select(s => s.Hour).Distinct(); // foreach (var hr in lstHour) // { // var lstItens = lst.Where(w => w.UsuarioId == us && w.DiaDaSemana == ds && w.idStory == stor && w.Hour == hr); // var max = lstItens.Where(w => w.UsuarioId == us && w.DiaDaSemana == ds && w.idStory == stor && w.Hour == hr).Max(m => m.ValorReach); // var min = lstItens.Where(w => w.UsuarioId == us && w.DiaDaSemana == ds && w.idStory == stor && w.Hour == hr).Min(m => m.ValorReach); // var diff = max - min; // lstUserBestHour.Add(new StoryUserBestHour() // { // UsuarioId = us, // DiaDaSemana = ds, // Hour = hr, // ValorReach = diff // }); // } // } // } // repMongo = new InfluencersMetrics.MongoRep("ROBO", _settings, us); // await repMongo.GravarOne<List<StoryUserBestHour>>(lstUserBestHour); // lstUserBestHour = new List<StoryUserBestHour>(); //} }