Пример #1
0
        // 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));
        }
Пример #2
0
        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));
        }
Пример #3
0
        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);
        }