コード例 #1
0
ファイル: NewsController.cs プロジェクト: hmishota/NewsPortal
        public IHttpActionResult PutNew(int id, OneNews @new)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            if (id != @new.Id)
            {
                return(BadRequest());
            }

            db.Entry(@new).State = EntityState.Modified;

            try
            {
                db.SaveChanges();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!NewExists(id))
                {
                    return(NotFound());
                }
                else
                {
                    throw;
                }
            }

            return(StatusCode(HttpStatusCode.NoContent));
        }
コード例 #2
0
        public async Task <Response> DoAsync(Request request)
        {
            var singleNews = new OneNews
            {
                Title   = request.Title,
                Body    = request.Body,
                Created = request.Created,

                Description = request.Description,
                Tags        = request.Tags,
                Category    = request.Category,

                Image = await _fileManager.SaveImageAsync(request.Image)
            };

            if (await _newsManager.CreateOneNews(singleNews) <= 0)
            {
                throw new Exception("Failed to add post!");
            }

            return(new Response
            {
                Id = singleNews.Id,
                Title = singleNews.Title,
                Body = singleNews.Body,
                Image = singleNews.Image,
                Created = singleNews.Created,
                Description = singleNews.Description,
                Tags = singleNews.Tags,
                Category = singleNews.Category,
            });
        }
コード例 #3
0
        public async Task <OneNewsVM> GetOneNews(OneNews oneNews, IMapper mapper)
        {
            HttpClient httpClient = new HttpClient();

            HttpResponseMessage httpResponseMessage = await httpClient.GetAsync(oneNews.Url);

            string source = await httpResponseMessage.Content.ReadAsStringAsync();

            IConfiguration config = Configuration.Default;

            IBrowsingContext context = BrowsingContext.New(config);

            IDocument document = await context.OpenAsync(req => req.Content(source));

            IElement[] textItems = document.All.Where(m => (m.LocalName == "p" && m.ClassList.Contains("box-paragraph__text")) ||
                                                      (m.LocalName == "h2" && m.ClassList.Contains("box-paragraph__subtitle")) ||
                                                      (m.LocalName == "b" && m.ClassList.Contains("box-paragraph__text"))).ToArray();

            OneNewsVM oneNewsViewModel = mapper.Map <OneNewsVM>(oneNews);

            foreach (IElement item in textItems)
            {
                HtmlElement htmlElement = new HtmlElement()
                {
                    Name = item.LocalName, Text = item.Text()
                };

                oneNewsViewModel.HtmlElements.Add(htmlElement);
            }

            return(oneNewsViewModel);
        }
コード例 #4
0
        public async Task <IActionResult> SaveOneNews(OneNews oneNews)
        {
            if (!User.Identity.IsAuthenticated)
            {
                return(BadRequest(new { Message = "Authenticated!" }));
            }

            if (ModelState.IsValid)
            {
                User user = await _context.Users.FirstOrDefaultAsync(u => u.Email == User.Identity.Name);

                SavedNews savedNews = _mapper.Map <SavedNews>(oneNews);

                savedNews.User = user;

                savedNews.UserId = user.Id;

                SavedNews exsistedSavedNews = await _context.SavedNews.FirstOrDefaultAsync(n => n.Title == oneNews.Title && n.UserId == user.Id);

                if (exsistedSavedNews == null)
                {
                    await _context.SavedNews.AddAsync(savedNews);

                    await _context.SaveChangesAsync();

                    return(Ok(new { Message = "Saved!" }));
                }
                else
                {
                    return(BadRequest(new { Message = "Exists!" }));
                }
            }

            return(BadRequest(new { Message = "Error!" }));
        }
コード例 #5
0
ファイル: NewsController.cs プロジェクト: hmishota/NewsPortal
        public IHttpActionResult GetNew(int id)
        {
            OneNews @new = db.News.Find(id);

            if (@new == null)
            {
                return(NotFound());
            }

            return(Ok(@new));
        }
コード例 #6
0
ファイル: NewsController.cs プロジェクト: hmishota/NewsPortal
        public IHttpActionResult PostNew(OneNews @new)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            db.News.Add(@new);
            db.SaveChanges();

            return(CreatedAtRoute("DefaultApi", new { id = @new.Id }, @new));
        }
コード例 #7
0
ファイル: NewsController.cs プロジェクト: hmishota/NewsPortal
        public IHttpActionResult DeleteNew(int id)
        {
            OneNews @new = db.News.Find(id);

            if (@new == null)
            {
                return(NotFound());
            }

            db.News.Remove(@new);
            db.SaveChanges();

            return(Ok(@new));
        }
コード例 #8
0
        public async static Task <OneNews> Parse(string htmlUrl)
        {
            OneNews news = new OneNews();
            TaskCompletionSource <OneNews> tcs = new TaskCompletionSource <OneNews>();

            using (var client = new HttpClient())
            {
                var response = await client.GetAsync(htmlUrl);

                string url = await response.Content.ReadAsStringAsync();

                try
                {
                    HtmlDocument hd = new HtmlDocument();
                    hd.LoadHtml(url);

                    HtmlNode itemDecription = hd.DocumentNode.Descendants("div").Where(d =>
                                                                                       d.Attributes.Contains("class") && d.Attributes["class"].Value.Contains("itemFullText")).ToList()[0];
                    string   descr = itemDecription.InnerText.Trim().Replace("<p>", "").Replace("</p>", "").Replace("\r", "");
                    string[] els   = descr.Split(new string[] { "\n" }, StringSplitOptions.RemoveEmptyEntries);
                    descr = "";
                    foreach (string s in els)
                    {
                        descr = descr + s.Trim().Replace("&quot;", "\"").Replace("&nbsp;", "").Replace("&laquo;", "\"").Replace("&raquo;", "\"").Replace("&ndash;", "–").Replace("&mdash;", "—") + "\n";
                    }
                    news.Description = descr;

                    HtmlNode itemVideo = hd.DocumentNode.Descendants("div").Where(d =>
                                                                                  d.Attributes.Contains("class") && d.Attributes["class"].Value.Contains("avPlayerBlock")).ToList()[0];
                    string videoId = itemVideo.Element("iframe").Attributes["src"].Value.ToString();
                    string temp    = videoId.Substring(0, videoId.IndexOf('?'));
                    news.YouTubeID = temp.Substring(29, temp.Length - 29);

                    tcs.SetResult(news);
                }
                catch (Exception ex)
                {
                    tcs.SetException(ex);
                }
            }
            return(tcs.Task.Result);
        }
コード例 #9
0
 public async void LoadNews(string htmlUrl)
 {
     OneNews = await NewsElementParser.Parse(htmlUrl);
 }
コード例 #10
0
        /// <summary>
        /// Вызывается перед отображением этой страницы во фрейме.
        /// </summary>
        /// <param name="e">Данные события, описывающие, каким образом была достигнута эта страница.
        /// Этот параметр обычно используется для настройки страницы.</param>
        protected async override void OnNavigatedTo(NavigationEventArgs e)
        {
            DisplayInformation.AutoRotationPreferences = DisplayOrientations.Portrait | DisplayOrientations.Landscape | DisplayOrientations.LandscapeFlipped;
            if (e.Parameter != null)
            {
                DisplayInformation.DisplayContentsInvalidated += DisplayInformation_DisplayContentsInvalidated;
                string[] param = (string[])e.Parameter;
                HeaderNews.Text = param[0];
                DateNews.Text   = param[1];
                OneNews oneNews = await NewsElementParser.Parse(param[2]);

                DescrNews.Text = oneNews.Description;

                YouTubeQuality quality = YouTubeQuality.Quality360P;
                if (Settings.Settings.QualityYouTubeVideo != null)
                {
                    switch (Settings.Settings.QualityYouTubeVideo)
                    {
                    case "144p":
                        quality = YouTubeQuality.Quality144P;
                        break;

                    case "240p":
                        quality = YouTubeQuality.Quality240P;
                        break;

                    case "360p":
                        quality = YouTubeQuality.Quality360P;
                        break;

                    case "480p":
                        quality = YouTubeQuality.Quality480P;
                        break;

                    case "720p":
                        quality = YouTubeQuality.Quality720P;
                        break;

                    case "1080p":
                        quality = YouTubeQuality.Quality1080P;
                        break;
                    }
                }
                YouTubeUri videoUri = null;
                bool       error    = false;
                try
                {
                    videoUri = await YouTube.GetVideoUriAsync(oneNews.YouTubeID, quality);
                }
                catch (YouTubeUriNotFoundException)
                {
                    error = true;
                }

                if (!error && videoUri != null)
                {
                    playerYouTube.Source = videoUri.Uri;
                }
                else
                {
                    var dialog = new MessageDialog("Не удалось загрузить видео. \nПопробуйте поменять качество в настройках.");
                    await dialog.ShowAsync();
                }
            }
            else
            {
                if (Frame.CanGoBack)
                {
                    Frame.GoBack();
                }
            }
        }
コード例 #11
0
        public async Task <IActionResult> OneNews(OneNews oneNews)
        {
            OneNewsVM oneNewsVM = await _evilInfoParsing.GetOneNews(oneNews, _mapper);

            return(View(oneNewsVM));
        }