// 특정 웹툰의 상세보기 페이지의 정보를 가져오는 메소드
        public static WebtoonDetailPageInformations?GetSpecificWebtoonDetailPageInformations(string url, int num)
        {
            try
            {
                url += "&no=" + num;

                HttpWebRequest request = ( HttpWebRequest )WebRequest.Create(url);
                request.Method    = "GET";
                request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36";

                using (HttpWebResponse response = ( HttpWebResponse )request.GetResponse( ))
                {
                    using (Stream responseStream = response.GetResponseStream( ))
                    {
                        HtmlDocument document = new HtmlDocument( );
                        document.Load(responseStream, Encoding.UTF8);

                        WebtoonDetailPageInformations data = new WebtoonDetailPageInformations( );

                        foreach (HtmlNode i in document.DocumentNode.SelectNodes("//meta"))
                        {
                            switch (i.GetAttributeValue("property", ""))
                            {
                            case "og:description":                                     // 자세히 보기 페이지에서는 description 노드가 title 이 됨
                                data.title = HttpUtility.HtmlDecode(i.GetAttributeValue("content", ""));
                                break;

                            case "og:image":                                     // 썸네일
                                data.thumbnail = i.GetAttributeValue("content", "");
                                break;
                            }
                        }

                        return(data);
                    }
                }
            }
            catch (Exception ex)
            {
                Util.WriteErrorLog(ex.Message, Util.LogSeverity.EXCEPTION);
                return(null);
            }
        }
示例#2
0
        public static string GetDetailPageInformations(string url)
        {
            try
            {
                HttpWebRequest request = ( HttpWebRequest )WebRequest.Create(url);
                request.Method    = "GET";
                request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36";

                using (HttpWebResponse response = ( HttpWebResponse )request.GetResponse( ))
                {
                    using (Stream responseStream = response.GetResponseStream( ))
                    {
                        //using ( StreamReader reader = new StreamReader( responseStream, Encoding.UTF8 ) )
                        //{
                        //	string html = reader.ReadToEnd( );

                        //<meta property="og:description" content="82화 - 귀영 (3화)">


                        HtmlDocument document = new HtmlDocument( );
                        document.Load(responseStream, Encoding.UTF8);

                        WebtoonDetailPageInformations dataStruct = new WebtoonDetailPageInformations( );

                        HtmlNode webtoonDetailPageTitle        = document.DocumentNode.SelectSingleNode("//meta[@property=\"og:title\"]");                    // 웹툰 화 제목 찾기 -> title
                        HtmlNode webtoonDetailPageThumbnail    = document.DocumentNode.SelectSingleNode("//meta[@property=\"og:image\"]");                    // 웹툰 썸네일 찾기 -> thumbnail
                        HtmlNode webtoonDetailContentImagesDIV = document.DocumentNode.SelectSingleNode("//div[@class=\"wt_viewer\"]");                       // 웹툰 이미지 콘텐츠 찾기 -> contents
                        HtmlNode webtoonCommentByAuthorDIV     = document.DocumentNode.SelectSingleNode("//div[@class=\"writer_info\"]");                     // 작가의 말 찾기 -> commentByAuthor

                        if (webtoonDetailPageTitle != null)
                        {
                            Console.WriteLine(webtoonDetailPageTitle.GetAttributeValue("content", ""));
                            dataStruct.title = webtoonDetailPageTitle.GetAttributeValue("content", "").Trim( );
                        }

                        if (webtoonDetailPageThumbnail != null)
                        {
                            Console.WriteLine(webtoonDetailPageThumbnail.GetAttributeValue("content", ""));
                            dataStruct.thumbnail = webtoonDetailPageThumbnail.GetAttributeValue("content", "").Trim( );
                        }

                        if (webtoonDetailContentImagesDIV != null)
                        {
                            dataStruct.contents = new List <string>( );

                            foreach (HtmlNode i in webtoonDetailContentImagesDIV.ChildNodes)
                            {
                                if (i.Name == "img")
                                {
                                    Console.WriteLine(i.GetAttributeValue("src", ""));
                                    dataStruct.contents.Add(i.GetAttributeValue("src", "").Trim( ));
                                    //break;
                                }
                            }
                        }


                        if (webtoonCommentByAuthorDIV != null)
                        {
                            foreach (HtmlNode i in webtoonCommentByAuthorDIV.ChildNodes)
                            {
                                if (i.Name == "p")
                                {
                                    Console.WriteLine(i.InnerText);
                                    dataStruct.commentByAuthor = i.InnerText.Trim( );
                                    break;
                                }
                            }
                        }

                        return("");
                        //}
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex);
                return("");
            }
        }