태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.

Windows Mobile 예제 [13] - 뉴스나 블로그 사이트 Rss Feed 얻어오기Windows Mobile 예제 [13] - 뉴스나 블로그 사이트 Rss Feed 얻어오기

Posted at 2009/12/15 16:18 | Posted in Windows Mobile/Windows Mobile 예제






개발환경
Visual Studio 2008
C#

이번 시간에는 RSS Feed 를 읽어 와서 목록 형태로 보여주는 방법을 알아 보겠습니다.

Rss는 뉴스나 블로그에서 공급자들이 주로 사용하는 표현 방식 입니다.
사용자들은 이를 이용해 빠르게 최신 소식을 받거나 Rss로 받은 정보를 다시 가공해 새로운 컨텐츠를
만들어 내기도 합니다.

참고로 모바일팟의 RSS 는 http://mobilepot.net/rss  입니다.
Rss에 대해 처음 알게된 분들은 대충 어느 형태인지 파악하시면 됩니다.


전체적으로
DataSet, HttpWebRequest, StreamReader 에 대한 이해만 있다면 쉽게 구현 가능 합니다.


디자인은 아래와 같습니다.
이번 예제에서는 웹 브라우저 1개만 사용하겠습니다만
예제를 보시고 각자 취향에 맞게 적용하시면 될거 같습니다.

폼에 웹 브라우저 컨트롤을 가득채워 넣습니다.




소스 코드에서 
이번 예제에서 사용될 StreamReader, List 을 위해
using 선언문을 추가 합니다.

using System.Net;
using System.IO;
using System.Collections;



우선
Rss 데이터의 제목, 본문, 링크, 작성 날짜를 이용하기 위해
클래스를 따로 하나 생성 합니다.


 public class RssData
    {
        public string Title { get; set; }
        public string Description { get; set; }
        public string Link { get; set; }
        public DateTime PublishDate { get; set; }
    }



Rss 데이터를 읽어 오는 부분 입니다.
HttpWebRequest  을 이용 xml 형식으로 데이터를 처리 합니다.

 public static DataSet ReadRssData(string UriString)
        {
            HttpWebRequest feed = HttpWebRequest.Create(UriString) as HttpWebRequest;
            StreamReader streamReader = new StreamReader(feed.GetResponse().GetResponseStream());

            string rssXml = streamReader.ReadToEnd();
            rssXml = rssXml.Replace(@"<?xml version=""1.0"" encoding=""utf-8""?>", string.Empty);

            StringReader stringReader = new StringReader(rssXml);

            DataSet dataSet = new DataSet();
            dataSet.ReadXml(stringReader);

            return dataSet;
        }



읽어온 데이터를
List 에 저장합니다.

  public static List<RssData> GetRssData(DataSet dataSet)
        {
            List<RssData> rsslist = new List<RssData>();

            foreach (DataRow dataRow in dataSet.Tables["item"].Rows)
            {
                RssData rssdata = new RssData();

                rssdata.Title = (string)dataRow["title"];
                rssdata.Description = (string)dataRow["description"];
                rssdata.Link = (string)dataRow["link"];
                rssdata.PublishDate = DateTime.Parse((string)dataRow["pubDate"]);

                rsslist.Add(rssdata);
            }

            return rsslist;
        }




웹 브라우저 컨트롤에 데이터를 표시하는 방법을 설정합니다.
HTML 코드는 각자 취향에 맞게 이용하면 됩니다.

   public static string RssVeiw(List<RssData> events)
        {
            StringBuilder stringBuilder = new StringBuilder();

            stringBuilder.Append(@"<span style=""color: #ffff66;font-weight:bold;"">");
            stringBuilder.AppendFormat(@"<b>Rss Feed 예제 <br/> http://mobilepot.net/rss  </b><br/>");
            stringBuilder.AppendFormat(@"<hr><br/>");
            stringBuilder.Append(@"</span>");

            foreach (RssData rssdata in events)
            {
                 stringBuilder.Append(@"<span style=""color:#FFFFFF;font-weight:bold;"">");
                stringBuilder.AppendFormat(@"<b>{0}</b><br/>", rssdata.PublishDate);
                stringBuilder.AppendFormat(@"<a href=""{0}"" style=""color: #DBB94F;"">{1}</a><br/><br/>", rssdata.Link, rssdata.Title);
                stringBuilder.AppendFormat(@"{0}...<br/><br/>", rssdata.Description.Substring(0, 45));
                stringBuilder.AppendFormat(@"<hr><br/>");    
                stringBuilder.Append(@"</span>");
            }

            return stringBuilder.ToString();
        }



마지막으로 폼이 로드 될때
작성해둔 함수들을 이용 데이터를 받아 웹 브라우저에 뿌리면 됩니다.

      private string RssUri = "http://mobilepot.net/rss";

        private void Form1_Load(object sender, EventArgs e)
        {
            DataSet dataSet = ReadRssData(RssUri);

            List<RssData> rssdata = GetRssData(dataSet);

            string htmlText = RssVeiw(rssdata);
             htmlText = string.Format("<html><body bgcolor=#ff6633>{0}</body></html>", htmlText);
           
            webBrowser.DocumentText = htmlText;

        }




테스트 화면 입니다.
실제 옴니아기기로 테스트 하였습니다.















저작자 표시 비영리 동일 조건 변경 허락
Creative Commons License


  1. 저는왜 링크를 클릭해도 이동이 안될까요;;
    에뮬레이터라 그런가;;

    그리고 에뮬레이터에 가로스크롤도 계속 생기네요
    옆에 아무 내용도 없는데.ㅠㅠ
    • 2010/02/11 09:45 [Edit/Del]
      제가 요즘 업무가 많아서 직접 실행을 못해
      확인을 못해 드리겠네요 죄송합니다.
      다른 주소로도 실행했는데 안대는건가요
      에뮬이라 제한사항이 있나보군요
  2. 아 답변 감사합니다.

    테스트 폰에서 한번 실행해볼게요.

    테스트 폰 가진사람이 언능 와야하는데요

    어제 야근해서 아직 안오시네요~
  3. 질문 한번 더 올리겠습니다.

    다음 지도를 WebBrowser를 이용해서 보여줄려고 하는데요

    소스는 아래와 같구요.
    저걸 string으로 만들어서 webBrowser1.DocumentText 에 넣었더니 나오지 않더군요
    아래 소스를 html로 실행하면 pc 브라우저에서는 제대로 나옵니다.
    저걸 webBrowser1.DocumentText 를 이용해서 나오게 하는 방법이 없을까요?

    <html>
    <head>
    <meta http-equiv='Content-Type' content='text/html; charset=UTF-8'>
    <title>Daum 지도 API</title>
    <script type='text/javascript' src='http://apis.daum.net/maps/maps2.js?apikey=247c8cba06cfefba616ada66fac19f58e5720410' charset='utf-8'></script>
    </head>
    <body>
    <div id='map' style='width:600px;height:400px;'></div>
    <script type='text/javascript'>
    var map = new DMap('map', {point:new DLatLng(37.48879895934866, 127.03130020103005), level:2}
    );
    </script>
    </body>
    </html>
  4. 안녕하세요 명절은 잘 보내셨는지요?

    지도관련해서 다시 한번 질문 드립니다.

    WebBrowser 컨트롤을 통하지 않고 다음이나 네이버, 구글의 지도를 보여주는 방법은 없을가요?

    TRUEMap 이런것도 그렇고 모바일메쉬업에서도 구현한것이 있는걸 보면

    어떤 방법이 있긴 할꺼 같은데

    전혀 모르겠네요.
  5. 김의두
    올려주신 예제대로 따라했는데 저는 하얀 웹브라우져 컨트롤러만 보이네요..ㅠ.ㅠ

    윈모 프로그래밍은 초짜라서 어디서 꼬인지도 잘 모르겠습니다.

    가능하시다면 예제파일을 받을 수 있을까요?

    메일주소는 euidoo@naver.com 입니다.
  6. 김의두
    디바이스로 연결해서 하니 잘 되네요 ^^

    아직 에뮬레이터에서 네트워크설정하는 방법은 잘안되서
    디바이스로 확인하고 있습니다. ㅎ;;

    다만 RSS Feed를 얻어와서 페이지가 표시되기는 하는데
    링크를 클릭하면 넘어가질 않네요;;;
    무슨 별도의 설정이 필요한가요?

Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

1 ... 36 37 38 39 40 41 42 43 44 ... 79