Example #1
0
        public async Task <int> Like()
        {
            int counter = 0; // Счётчик для подсчета поставленных лайков

            foreach (string group in Groups)
            {
                WallGet posts = await getPosts(group, rand.Next(postsOffset), postsCount); // получаем рандомные postsCount постов

                foreach (var post in posts.response.items)
                {
                    if (commentsCount > post.comments.count)
                    {
                        commentsCount = post.comments.count;
                    }
                    // Получаем рандомные комментарии поста
                    WallGetComments comments = await getComments(group, post.id.ToString(), commentsCount);

                    foreach (var item in comments.response.items)
                    {
                        if (await pressLike(group, item.id.ToString())) // Жмакаем "лайк"
                        {
                            counter++;
                        }

                        await Task.Delay(350); // "Too many requests per second ©"
                    }
                }
            }
            return(counter);
        }
Example #2
0
        public void addPosts()
        {
            int         loaded = 0;
            List <Item> items  = new List <Item>();

            if (postCapasity <= 99)
            {
                WallGet response = WallGet.FromJson(API.getResponse("wall.get", "owner_id=-" + id + ",offset=2" + ",count=" + postCapasity.ToString()));
                foreach (Item item in response.Response.Items)
                {
                    items.Add(item);
                }
            }
            else
            {
                while (postCapasity - loaded > 99)
                {
                    WallGet response1 = WallGet.FromJson(API.getResponse("wall.get", "owner_id=-" + id + ",offset=" + loaded.ToString() + ",count=99"));
                    loaded = loaded + 99;
                    foreach (Item item in response1.Response.Items)
                    {
                        items.Add(item);
                    }
                    if (response1.Response.Items.Length < 99)
                    {
                        goto GA;
                    }
                }
                WallGet response = WallGet.FromJson(API.getResponse("wall.get", "owner_id=-" + id + ",offset=" + loaded.ToString() + ",count=" + (postCapasity - loaded).ToString()));
                foreach (Item item in response.Response.Items)
                {
                    items.Add(item);
                }
            }
GA:
            foreach (Item item in items)
            {
                try
                {
                    Post post = new Post();
                    post.id             = item.Id.ToString();
                    post.item           = item;
                    post.already_posted = false;

                    post.hist = new Queue <HistoryPoint>(historyVolume);
                    HistoryPoint point = new HistoryPoint();
                    point.likes   = Convert.ToInt32(item.Likes.Count);
                    point.reposts = Convert.ToInt32(item.Reposts.Count);
                    point.views   = Convert.ToInt32(item.Views.Count);
                    point.time    = Convert.ToInt32(item.Date);
                    post.hist.Enqueue(point);
                    post         = setFirstPoints(post);
                    post.domain  = domain;
                    post.groupId = id;
                    posts.Enqueue(post);
                }
                catch { }
            }
        }
Example #3
0
        public bool check_for_repeat(Post post)
        {
            if (post.item.PostType.ToString() == "Photo")
            {
                string url = post.item.getImageUrl();
                pictureBox1.Load(url);

                using (WebClient client = new WebClient())
                {
                    client.DownloadFile(url, "temp1.jpg");
                }
                Image img1 = Image.FromFile("temp1.jpg");
                try
                {
                    WallGet response = WallGet.FromJson(API.getResponse("wall.get", "owner_id=-165233859" + ",count=20"));
                    foreach (Item item in response.Response.Items)
                    {
                        if (post.item.PostType == item.PostType)
                        {
                            url = item.getImageUrl();
                            using (WebClient client = new WebClient())
                            {
                                client.DownloadFile(url, "temp2.jpg");
                            }
                            Image img2 = Image.FromFile("temp2.jpg");

                            var points = new Color[3, 3];

                            int    count = 0;
                            Bitmap BM1   = new Bitmap(img1);
                            Bitmap BM2   = new Bitmap(img2);

                            int incI = 0;
                            int incJ = 0;
                            for (int i = BM1.Width / 6; i < BM1.Width; i = i + BM1.Width / 3)
                            {
                                incJ = 0;
                                for (int j = BM1.Height / 6; j < BM1.Height; j = j + BM1.Height / 3)
                                {
                                    if (BM1.GetPixel(i, j) == BM2.GetPixel(i, j))
                                    {
                                        count++;
                                    }
                                    incJ++;
                                }
                                incI++;
                            }
                            if (count > 8)
                            {
                                return(true);
                            }
                        }
                    }
                }
                catch { }
            }
            return(false);
        }
Example #4
0
        public string getGroupIdByDomain(string domain)
        {
            WallGet WallGet;

            if (domain.Contains("public"))
            {
                WallGet = WallGet.FromJson(getResponse("wall.get", "owner_id=-" + domain.Replace("public", "") + ",count=2"));
            }
            else
            {
                WallGet = WallGet.FromJson(getResponse("wall.get", "domain=" + domain + ",count=2"));
            }
            return(WallGet.Response.Items[0].FromId.ToString().Remove(0, 1));
        }
 public VkPostponedContentPullerStrategy(WallGet wallGet)
 {
     _wallGet = wallGet;
 }
Example #6
0
        public void updatePosts()
        {
            try
            {
                WallGet response = WallGet.FromJson(API.getResponse("wall.get", "owner_id=-" + id + ",count=" + postCapasity.ToString()));
                foreach (Item item in response.Response.Items)
                {
                    for (int i = 0; i < posts.Count; i++)
                    {
                        if (posts.ElementAt(i).id == item.Id.ToString())
                        {
                            HistoryPoint point = new HistoryPoint();
                            point.likes   = Convert.ToInt32(item.Likes.Count);
                            point.reposts = Convert.ToInt32(item.Reposts.Count);
                            if (item.Views == null)
                            {
                                point.views = 0;
                            }
                            else
                            {
                                point.views = Convert.ToInt32(item.Views.Count);
                            }
                            point.time = Convert.ToInt32(item.Date);
                            posts.ElementAt(i).hist.Enqueue(point);
                            setFirstPoints(posts.ElementAt(i));
                            if (posts.ElementAt(i).hist.Count > historyVolume)
                            {
                                posts.ElementAt(i).hist.Dequeue();
                            }
                        }
                    }
                }
                foreach (Item item in response.Response.Items)
                {
                    bool is_new = true;
                    for (int i = 0; i < posts.Count; i++)
                    {
                        if (posts.ElementAt(i).id == item.Id.ToString())
                        {
                            is_new = false;
                        }
                    }
                    if (is_new)
                    {
                        new_post = true;
                        Post post = new Post();
                        post.id             = item.Id.ToString();
                        post.item           = item;
                        post.already_posted = false;

                        HistoryPoint point = new HistoryPoint();
                        point.likes   = Convert.ToInt32(item.Likes.Count);
                        point.reposts = Convert.ToInt32(item.Reposts.Count);

                        if (item.Views == null)
                        {
                            point.views = 0;
                        }
                        else
                        {
                            point.views = Convert.ToInt32(item.Views.Count);
                        }
                        point.time = Convert.ToInt32(item.Date);
                        post.hist  = new Queue <HistoryPoint>(historyVolume);
                        post.hist.Enqueue(point);
                        post         = setFirstPoints(post);
                        post.domain  = domain;
                        post.groupId = id;
                        posts.Enqueue(post);
                        posts.Dequeue();
                    }
                }
            }
            catch { }
        }
        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());
        }
Example #8
0
 public VkActualTimePeriodContentPullerStrategy(WallGet wallGet)
 {
     _wallGet = wallGet;
 }
 public VkActualContentPullerStrategy(WallGet wallGet)
 {
     _wallGet = wallGet;
 }
Example #10
0
        /* void updateGraphs(Post post)
         * {
         *   var points = post.hist;
         *
         *   GraphPane likesPane = graf.GraphPane;
         *   GraphPane repostsPane = zedGraphControl1.GraphPane;
         *   GraphPane viewsPane = zedGraphControl2.GraphPane;
         *   PointPairList likesList = new PointPairList();
         *   PointPairList repostsList = new PointPairList();
         *   PointPairList viewsList = new PointPairList();
         *   likesPane.CurveList.Clear();
         *   repostsPane.CurveList.Clear();
         *   viewsPane.CurveList.Clear();
         *   int inc = 0;
         *   for (int i = 0; i < points.Count; i++)
         *   {
         *       likesList.Add(inc, points.ElementAt(i).likes);
         *       repostsList.Add(inc, points.ElementAt(i).reposts);
         *       viewsList.Add(inc, points.ElementAt(i).views);
         *       inc++;
         *   }
         *
         *   LineItem myCurve = likesPane.AddCurve("likes", likesList, Color.Green, SymbolType.None);
         *   LineItem myCurve1 = repostsPane.AddCurve("reposts", repostsList, Color.Red, SymbolType.None);
         *   LineItem myCurve2 = viewsPane.AddCurve("views", viewsList, Color.Blue, SymbolType.None);
         *   graf.AxisChange();
         *   graf.Invalidate();
         *   zedGraphControl1.AxisChange();
         *   zedGraphControl1.Invalidate();
         *   zedGraphControl2.AxisChange();
         *   zedGraphControl2.Invalidate();
         * }     */
        private void set_Wl(object sender, EventArgs e)
        {
            delegatelog("SET Wl...", Color.Cyan);
            WallGet response = WallGet.FromJson(API.getResponse("wall.get", "owner_id=-165233859" + ",count=10"));
            int     max      = 0;
            int     min      = 999999;
            var     now      = new DateTimeOffset(DateTime.Now);

            foreach (Item item in response.Response.Items)
            {
                if (now.ToUnixTimeSeconds() - item.Date < 60 * 60 * 24 * 7)
                {
                    if (item.Likes.Count < min)
                    {
                        min = Convert.ToInt32(item.Likes.Count);
                    }
                    if (item.Likes.Count > max)
                    {
                        max = Convert.ToInt32(item.Likes.Count);
                    }
                }
            }
            foreach (Item item in response.Response.Items)
            {
                if (now.ToUnixTimeSeconds() - item.Date < 60 * 60 * 24)
                {
                    foreach (string line in API.alredyPosted)
                    {
                        if (line.Split('=')[1] == item.Id.ToString())
                        {
                            for (int i = 0; i < groupList.Count; i++)
                            {
                                if (line.Split('=')[0].Split('_')[0] == groupList[i].id)
                                {
                                    double old = groupList[i].Wl;
                                    double G;
                                    if (min == max && max == 0)
                                    {
                                        G = 0.25;
                                    }
                                    else if (min == max && max != 0)
                                    {
                                        G = 0.5;
                                    }
                                    else
                                    {
                                        G = (Convert.ToDouble(item.Likes.Count) - Convert.ToDouble(min)) / (Convert.ToDouble(max) - Convert.ToDouble(min));
                                    }

                                    if (G > 0.5)
                                    {
                                        G = G + (G - 0.5) / 2;
                                    }

                                    if (groupList[i].Wl <= 1)
                                    {
                                        if (!(groupList[i].Wl + (G - 0.5) / Kgi < 0.5))
                                        {
                                            double mew = groupList[i].Wl + (G - 0.5) / Kgi;
                                            groupList[i].Wl = groupList[i].Wl + (G - 0.5) / Kgi;
                                        }
                                    }
                                    else
                                    {
                                        if (!(groupList[i].Wl + (G - 0.5) * 2 / Kgi > 2))
                                        {
                                            double mew = groupList[i].Wl + (G - 0.5) * 2 / Kgi;
                                            groupList[i].Wl = groupList[i].Wl + (G - 0.5) * 2 / Kgi;
                                        }
                                    }
                                    if (item.Likes.Count > 0)
                                    {
                                        old = groupList[i].Wl;
                                    }
                                    else
                                    {
                                        old = groupList[i].Wl;
                                    }
                                }
                            }
                        }
                    }
                }
            }
            //write Wl changing

            /*  string s = "";
             * if (File.ReadAllLines("Gl.txt").Length == 0)
             * {
             *    s = "";
             *    for (int i = 0; i < groupList.Count; i++)
             *    { s = s + groupList[i].domain + ';'; }
             *    File.WriteAllText("Gl.txt", s + '\r' + '\n');
             * }
             * s = "";
             * for (int i = 0; i < groupList.Count; i++)
             * {
             *    s = s + groupList[i].Wl + ';';
             * }
             * File.AppendAllText("Gl.txt", s + '\r' + '\n');
             * delegatelog("Success", Color.Cyan);   */
            string[] s    = new string[groupList.Count];
            var      file = File.ReadAllLines(pathPrefics + "Gl.txt");

            if (file.Length == 0)
            {
                for (int i = 0; i < groupList.Count; i++)
                {
                    s[i] = groupList[i].domain + ';';
                }
                File.WriteAllLines(pathPrefics + "Gl.txt", s);

                for (int i = 0; i < groupList.Count; i++)
                {
                    s[i] = s[i] + groupList[i].Wl + ';';
                }
                File.WriteAllLines(pathPrefics + "Gl.txt", s);
            }
            else
            {
                for (int j = 0; j < file.Length; j++)
                {
                    for (int i = 0; i < groupList.Count; i++)
                    {
                        if (file[j].Split(';')[0] == groupList[i].domain)
                        {
                            file[j] = file[j] + groupList[i].Wl + ';';
                            break;
                        }
                    }
                }
                File.WriteAllLines(pathPrefics + "Gl.txt", file);
            }



            delegatelog("Success", Color.Cyan);
        }
Example #11
0
        /// <summary>
        /// Сравнение текстов
        /// </summary>
        /// <param name="wallGetResponse"></param>
        /// <param name="getKey"></param>
        async Task<WallGet> ITextService.SortedTextAsync(WallGet wallGetResponse, List<VkItemViewModel> oldItems)
        {
            try
            {
                if (wallGetResponse != null && oldItems != null)
                {
                    var itemCount = wallGetResponse.Items.Count;
                    List<Item> newItems = new List<Item>(itemCount);
                    for (int i = 0; i < itemCount; i++)
                    {
                        var item = wallGetResponse.Items[i];
                        var itemDate = item.Date;

                        var isContains = false;
                        for (int j = 0; j < oldItems.Count; j++)
                        {
                            var oldItemDate = oldItems[j].Date;

                            if (oldItemDate - 120 < itemDate && itemDate < oldItemDate + 120)
                            {
                                isContains = true;
                                break;
                            }
                        }

                        if (!isContains)
                        {
                            var itemKey = GetKey(item.Text ?? string.Empty);

                            if (itemKey.Length > 2)
                            {
                                for (int j = 0; j < oldItems.Count; j++)
                                {
                                    var oldKey = GetKey(oldItems[j].Text ?? string.Empty);
                                    var exNOCount = itemKey.Except(oldKey).Count();
                                    var exONCount = oldKey.Except(itemKey).Count();

                                    var newLength = itemKey.Length;
                                    var oldLength = oldKey.Length;

                                    double middle = 0d;
                                    if (newLength != 0 && oldLength != 0)
                                    {
                                        middle = (double)(exNOCount / newLength
                                           + exONCount / oldLength) / 2;
                                    }

                                    var add = false;

                                    if (itemKey.Length < 5)
                                    {
                                        add = oldItems[j].Text != item.Text;

                                        if (!add)
                                        {
                                            add = (1 - middle) < 0.95;
                                        }
                                    }
                                    else
                                    {
                                        add = (1 - middle) < 0.85;
                                    }

                                    if (add)
                                    {
                                        newItems.Add(item);
                                        break;
                                    }
                                }
                            }
                            else
                            {
                                newItems.Add(item);
                            }
                        }
                    }

                    wallGetResponse.Items = newItems;
                }
            }
            catch (Exception ex)
            {
                await _telegramService.SendMessageExceptionAsync(ex);
            }

            return wallGetResponse;
        }