/// <summary> /// Получаем контент первой страници /// </summary> /// <param name="url"></param> /// <param name="queryId"></param> /// <returns></returns> async Task <InstagramLoadViewModel> IInstagramService.InstagramLoadAsync(string url) { var json = await GetInstagramJsonAsync(url); var instagram = _jsonService.JsonConvertDeserializeObject <Models.Instagram.Instagram>(json); var profiles = instagram?.EntryData?.ProfilePage; if (profiles == null) { return(null); } var token = profiles.FirstOrDefault()?.User?.Media?.PageInfo?.EndCursor; if (string.IsNullOrWhiteSpace(token)) { return(null); } var owner = profiles.FirstOrDefault()? .User?.Media?.Nodes?.FirstOrDefault()?.Owner?.Id; if (string.IsNullOrWhiteSpace(owner)) { return(null); } var vkItemViewModels = profiles.SelectMany(prof => prof?.User?.Media?.Nodes?.Select(node => new VkItemViewModel { Likes = node?.EdgeMediaPreviewLike?.Count ?? node?.Likes.Count, Coments = node?.EdgeMediaToComment?.Count ?? node.Comments?.Count, Text = string.Join("\n", node?.EdgeMediaToCaption?.Edges?.Select(o => o?.Node?.Text) ?? new List <string> { node?.Caption }), Photo = new List <string> { node?.DisplaySrc }, Date = node?.Date ?? node?.TakenAtTimestamp })) .ToList(); var result = new InstagramLoadViewModel { Token = token, Owner = owner, VkItemViewModels = vkItemViewModels }; return(result); }
private async Task <IViewComponentResult> VkLoadAsync(VkUser vkUser, VkGroup vkGroup, Models.User user, Models.Order order, string photo, bool isPremium, string groupId, string isLoad) { try { var toLoad = true; if (!isPremium) { var firstId = (await _context.VkGroupSet .FirstOrDefaultAsync(id => id.VkUserId == vkUser.VkUserId)).VkGroupId; toLoad = vkGroup.VkGroupId == firstId; } // Не грузить левые группы, для непремиум if (toLoad) { var vkGroupFrom = await _context.VkGroupFromSet .Include(inf => inf.GroupInfo) .Include(set => set.Filter) .Where(g => g.VkGroupId == vkGroup.VkGroupId) .Take(isPremium ? 20 : 10) .AsNoTracking() .ToListAsync(); if (isLoad == "true" && vkGroupFrom != null && vkGroupFrom.Count > 0) { Stopwatch sw = Stopwatch.StartNew(); var oldItem = await _context.VkGroupSet .Where(g => g.VkGroupId == groupId) .SelectMany(g => g.VkGroupsFrom .SelectMany(gr => gr.WallGets .SelectMany(wall => wall.Items.Select(item => new VkItemViewModel { Text = item.Text, Date = item.Date })))) .AsNoTracking() .ToListAsync(); var count = vkGroup.MaxFrom ?? (TAKE / vkGroupFrom.Count) * 2; var responses = new List <WallGet>(vkGroupFrom.Count); if (vkUser != null) { foreach (var group in vkGroupFrom) { var onlyGroup = vkGroup.Filter?.GetOnlyGroupPost == true || group.Filter?.GetOnlyGroupPost == true; var result = await _vkService.WallGetAsync(vkUser.AccessToken, $"{count}", "0", $"-{group.GroupId}", group.Domain, onlyGroup); if (!result.Contains("error_code")) { WallGet wallGetResponse = _jsonService.JsonConvertDeserializeObject <WallGetResponse>(result)? .Response; if (wallGetResponse != null) { wallGetResponse = await _textService.SortedTextAsync(wallGetResponse, oldItem); for (int i = 0; i < wallGetResponse.Items.Count; i++) { var item = wallGetResponse.Items[i]; var tag = $"{group.Atribute} {vkGroup.Atribute}".Trim(' '); item.Text = await _textService.TextFilterAsync(item.Text, vkGroup.Filter, group.Filter); item.Text = _textService.AddTag(item.Text, tag); } wallGetResponse.VkGroupFromId = group.VkGroupFromId; responses.Add(wallGetResponse); } } else { await _telegramService.SendMessage(result); } } } await _context.AddRangeAsync(responses); await _context.SaveChangesAsync(); sw.Stop(); await _telegramService.SendMessage($"time1: {sw.Elapsed.TotalMilliseconds}"); sw = Stopwatch.StartNew(); DateTime dateNow = DateTime.Now; long unixTime = ((DateTimeOffset)dateNow).ToUnixTimeSeconds() - 30 * 60; var date = DateTime.Now; var take = vkGroup.MaxLoad ?? TAKE; var vkItem = (await _context.VkGroupSet .Where(g => g.VkGroupId == groupId) .SelectMany(g => g.VkGroupsFrom .SelectMany(gr => gr.WallGets .SelectMany(wall => wall.Items .Where(st => string.IsNullOrWhiteSpace(st.Statuse) || (st.Statuse == "Selected" && st.AddedTime < unixTime) )))) .OrderByDescending(ch => ch.Statuse == "Selected") .Take(take) .Select(item => new { Filter = item.WallGet.VkGroupFrom.Filter, Atribute = item.WallGet.VkGroupFrom.Atribute, Statuse = item.Statuse, GroupInfo = item.WallGet.VkGroupFrom.GroupInfo, ItemId = item.ItemId, Likes = item.Likes.Count, Reposts = item.Reposts.Count, Views = item.Views.Count, Date = item.Date, GifPrew = item.Attachments.Select(doc => new { Gif = doc.Doc.Url, DocExt = doc.Doc.Ext, Preview = doc.Doc.Preview.Photo.Sizes }), Photo = item.Attachments.Select(ph => ph.Photo.Photo604), Text = item.Text }) .AsNoTracking() .ToListAsync()) .Select(item => new VkItemViewModel { Filter = item.Filter, Atribute = item.Atribute, Statuse = item.Statuse, GroupInfo = item.GroupInfo, ItemId = item.ItemId, Likes = item.Likes, Reposts = item.Reposts, Views = item.Views, Date = item.Date, GifPrew = item.GifPrew.Select(doc => new GifPreviewViewModel { Gif = doc.Gif, DocExt = doc.DocExt, PreviewPhoto = doc.Preview.ToList() }).ToList(), Photo = item.Photo.ToList(), Text = item.Text }); vkItem = await _textService.SortingItemAsync(vkItem, vkGroup.Filter); sw.Stop(); await _telegramService.SendMessage($"time2: {sw.Elapsed.TotalMilliseconds}"); return(View(new VkResponseAndGroupVk { Responses = vkItem.OrderByDescending(ch => Tuple.Create(ch.Statuse == "Selected", ch.Likes + ch.Reposts, ch.Likes, ch.Reposts, ch.Views)), VkGroupViewModel = new VkGroupViewModel { VkGroupId = groupId, VkGroupsFrom = vkGroupFrom, Photo = photo, Domain = vkGroup?.GroupInfo?.ScreenName ?? vkGroup?.Domain, GroupName = vkGroup?.GroupInfo.Name }, AttributeAll = vkGroup.Atribute, })); } return(View(new VkResponseAndGroupVk { VkGroupViewModel = new VkGroupViewModel { VkGroupId = groupId, VkGroupsFrom = vkGroupFrom, Photo = photo, Domain = vkGroup?.GroupInfo?.ScreenName ?? vkGroup?.Domain, GroupName = vkGroup?.GroupInfo.Name }, AttributeAll = vkGroup.Atribute })); } } catch (Exception ex) { await _telegramService.SendMessageExceptionAsync(ex); } return(View()); }
public async Task <IViewComponentResult> InvokeAsync() { if (_context != null && _signInManager.IsSignedIn(HttpContext.User)) { try { var user = await _userManager.GetUserAsync(HttpContext.User); var order = await _context.Orders .FirstOrDefaultAsync(id => user.OrderId == id.OrderId); var isPremium = order?.DateEnd > DateTime.Now; var vkUser = await _context .VkUserSet? .AsNoTracking() .FirstOrDefaultAsync(id => id.VkUserId == user.VkUserId); List <VkGroup> vkGroups = null; if (isPremium) { vkGroups = await _context .VkGroupSet .Where(id => id.VkUserId == vkUser.VkUserId) .Include(gr => gr.GroupInfo) .AsNoTracking() .ToListAsync(); } else { vkGroups = new List <VkGroup> { await _context .VkGroupSet .Where(id => id.VkUserId == vkUser.VkUserId) .Include(gr => gr.GroupInfo) .AsNoTracking().FirstOrDefaultAsync() }; } var result = await _vkService.GetProfilesAsync(vkUser); var profile = _jsonService.JsonConvertDeserializeObject <GetProfiles>(result)? .Profile?.FirstOrDefault(); VkProfileViewModel vkProfile = new VkProfileViewModel(); if (profile != null) { vkProfile = new VkProfileViewModel { FirstName = profile.FirstName, LastName = profile.LastName, AccessToken = vkUser.AccessToken, VkGroups = vkGroups, UserVkId = vkUser.UserVkId, IsOrdered = isPremium, Order = order }; if (profile.HasPhoto != 0) { vkProfile.Photo = profile.PhotoMax ?? profile.Photo200Orig ?? profile.Photo200 ?? profile.Photo100 ?? profile.Photo50; } } return(View(vkProfile)); } catch (Exception ex) { await _telegramService.SendMessageExceptionAsync(ex); } } return(View()); }