// GET: Posts/Details/5 public ActionResult Details(int?id) { ApplicationDbContext Context = new ApplicationDbContext(); if (id == null) { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest)); } Post post = db.Posts.Find(id); List <AComment> comments = new List <AComment>(); foreach (var item in post.Comments) { AComment aComment = new AComment { CommentId = item.CommentId, CommentContent = item.CommentContent, CommentDate = item.CommentDate, PostId = item.PostId }; if (item.UserId != null) { aComment.UserName = Context.Users.Find(item.UserId).UserName; } else { aComment.UserName = "******"; } comments.Add(aComment); } comments.Reverse(); APost postComments = new APost { PostId = post.PostId, PostHeading = post.PostHeading, UserId = post.UserId, UserName = Context.Users.Find(post.UserId).UserName, PostDate = post.PostDate, PostContent = post.PostContent, Comments = comments }; if (post == null) { return(HttpNotFound()); } return(View(postComments)); }
public ActionResult Index() { List <APost> posts = new List <APost>(); ApplicationDbContext Context = new ApplicationDbContext(); foreach (Post post in db.Posts) { APost aPost = new APost { PostId = post.PostId, PostHeading = post.PostHeading, UserId = post.UserId, UserName = Context.Users.Find(post.UserId).UserName, PostDate = post.PostDate, PostContent = post.PostContent }; posts.Add(aPost); } posts.Reverse(); return(View(posts)); }
public APagePosts GetNewPostListByBoardName(string boardName, int page = 1) { var boardInfo = webDB.BoardInfo.SingleOrDefault(p => p.Board == boardName); if (boardInfo == null) { return(null); } var pagePosts = new APagePosts { BoardInfo = new Board { Name = boardInfo.Board, Href = $"/bbs/{boardInfo.Board}/index.html", Nuser = boardInfo.OnlineUser.ToString(), Class = "", Title = boardInfo.ChineseDes, MaxSize = GetPageSize(boardName) } }; pagePosts.Page = page; log.Info($"{MethodBase.GetCurrentMethod().Name}[boardName]:{boardName}"); string text = string.Empty; string strPage = GetPageNo(page, pagePosts.BoardInfo.MaxSize); string url = $"https://www.ptt.cc/bbs/{boardName}/index{strPage}.html"; MyWebClient client = new MyWebClient(); client.Encoding = Encoding.UTF8; // 設定Webclient.Encoding string html = "未知"; try { html = client.DownloadString(url); Dictionary <int, APost> dicRow = new Dictionary <int, APost>(); HtmlDocument doc = new HtmlDocument(); doc.LoadHtml(html); HtmlDocument doctag = new HtmlDocument(); int i = 1; int iwide = 0; var metaTags = doc.DocumentNode.SelectNodes("//div"); if (metaTags != null) { foreach (var tag in metaTags) { if (tag.Attributes["class"] != null) { if (tag.Attributes["class"].Value == "btn-group btn-group-paging") { doctag.LoadHtml(tag.OuterHtml); HtmlNodeCollection htmlNodes = doctag.DocumentNode.SelectNodes("//a[@class='btn wide']"); foreach (var N in htmlNodes) { iwide = N.OuterHtml.IndexOf("/index"); if (iwide > 0) { text = N.OuterHtml.Substring(iwide, N.OuterHtml.Length - iwide); text = Regex.Replace(text, "[^0-9]", ""); //僅保留數字 int.TryParse(text, out iwide); if (pagePosts.BoardInfo.MaxSize < iwide) { pagePosts.BoardInfo.MaxSize = iwide; } } } } if (tag.Attributes["class"].Value == "r-ent") { ////class="title" class="author" class="date" doctag.LoadHtml(tag.OuterHtml); APost row = new APost(); HtmlNode bodyNodes = doctag.DocumentNode.SelectSingleNode("//div[@class='title']/a[@href]"); if (bodyNodes == null) { continue; } row.Href = bodyNodes.Attributes["href"].Value; row.Title = bodyNodes.InnerText; HtmlNode authorNode = doctag.DocumentNode.SelectSingleNode("//div[@class='author']"); row.Author = authorNode.InnerText; HtmlNode dateNode = doctag.DocumentNode.SelectSingleNode("//div[@class='date']"); row.Date = dateNode.InnerText; //--AidConverter row.AID = AidConverter.urlToAid(row.Href); row.Board = boardName; List <PostRank> postRanks = webDB.PostRank.AsNoTracking().Where(x => x.Board == boardName && x.Aid == row.AID).ToList(); if (postRanks.Count > 0) { row.Goup = postRanks.Count(x => x.Rank == 1); row.Down = postRanks.Count(x => x.Rank == -1); } //-- dicRow.Add(i, row); i++; } else if (tag.Attributes["class"].Value == "r-list-sep") { break; } } } } pagePosts.PostList = dicRow.Values.ToList(); } catch (Exception ex) { pagePosts.Message = new Message { Error = $"{ex.Message}.{ex.StackTrace}" }; log.Debug($"GetNewPostListByBoardName[Exception]:{ex.Message}"); log.Debug(ex.StackTrace); } return(pagePosts); }