Beispiel #1
0
        public void UpdateLastTweetDate(TwittData data)
        {
            if (data == null)
            {
                throw new ArgumentNullException(nameof(data));
            }

            if (data.Page == null)
            {
                throw new ArgumentNullException(nameof(data), "data.Page==null");
            }

            var page = data.Page;

            var now = _DateSupply.Now;

            page.TweetDate = now;

            //обновить пост в базе...
            _SitePageTweetDateUpdater.UpdateTweetDateForPage(page, now);

            //если было использовано изображение
            var img = data.Image;

            if (img != null)
            {
                img.TweetDate = now;

                //обновить в базе изображений...
                _AnimatedTweetDateUpdater.UpdateTweetDateForBlob(img, now);
            }
        }
Beispiel #2
0
        public async Task <TwittData> GetPageForTwitting()
        {
            //В базе есть страницы для всех постов сайта. В некоторых случаях (но не всегда) к посту может быть дополнительно
            //доступны N gif-анимированных изображений (они в отдельной коллекции)

            //Мы будем твитить тех, кого "ни разу", в первую очередь, но только если они не блокированы и не принадлежат к спец-ивенту
            //Спец.ивент - это Рождество (новогодние посты), и Хеллоуин - их твитить надо строго в опред.диапазоне времени

            //Первая часть логики - "Если пост новый, то без вариантов твитим его, изображение берем из него же" (никаких внешних аним.гифок)
            SitePage page = await _PageSelectorForNewPages.GetPageForTwitting();

            if (page != null)
            {
                _Log.Log("_PageSelectorForNewPages.GetPageForTwitting done {0}", DateTime.Now);

                TwittData result = new TwittData
                {
                    Page = page
                };
                return(result);
            }

            //на этом этапе у нас все новые страницы и уже твитились
            //В этом случае начинает работать схема - "выбрать только пост, а потом уточнить если есть у него гифки, то случайно решить то ли изображение из поста, то ли гифка"
            //Здесь селектор должен быть умен в плане предлагать вначале более "старо-твиченные посты"
            SitePage pageSelected = await _PageSelectorForAnyPages.GetPageForTwitting();

            if (pageSelected == null)
            {
                throw new ApplicationException("No page found for twitting");                   //это правда необычно..скорее ошибка т.к. база ведь не пустая
            }

            //теперь решаем: то ли просто страница , то ли используем аним.изображение (для этой страницы, если конечно они есть)
            if (_PageOrExternalImageSelector.UseExternalAnimatedImage)
            {
                //Пробуем использовать аним.изображение, но это ЕСЛИ оно найдется для этой страницы (бывают страницы без них вообще)

                string        url     = pageSelected.URL;
                AnimatedImage animImg = null;

                AnimatedImage[] imgsNew = await _FindNewAnimatedByPage.GetAnimatedImagesForPage(url);

                if (imgsNew != null)
                {
                    //берем первую что нашли - эти гифки не твитили ни разу (скорее всего она будет одна в результате-ответе)
                    animImg = imgsNew[0];
                }
                else
                {
                    //новых нет, но может есть "не новые" гиф-файлы?
                    AnimatedImage[] imgsForPage = await _FindAnimatedByPage.GetAnimatedImagesForPage(url);

                    if (imgsForPage != null && imgsForPage.Length > 0)
                    {
                        //выбираем случайно аним.гифку, кроме той которую твитили последний раз (если их более чем одна)
                        animImg = _AnimatedSelectorWithExcludeLast.SelectImage(imgsForPage);
                    }
                }

                if (animImg != null)
                {
                    TwittData result = new TwittData
                    {
                        Image = animImg,
                        Page  = pageSelected
                    };
                    return(result);
                }
            }

            //просто страницу
            TwittData resultData = new TwittData
            {
                Page = pageSelected
            };

            return(resultData);
        }        //GetPageForTwitting