예제 #1
0
        /// <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);
        }
예제 #2
0
        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());
        }
예제 #3
0
        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());
        }