본문 바로가기
Hobby/uwp

uwp에서 rss 피드 읽기 와 파싱 하기 how to read and parsing rss feed by uwp

by ㅁㅜㅅㅣㄱㅈㅐㅇㅣ 2021. 2. 9.
반응형

rss 를 읽고 파싱하는 방법은 많지만, uwp는 C#의 문법이 같기 때문에 C#에서 사용된 소스를 그대로 가져다 사용할 수 있다. 그렇기에 uwp rss 피드 읽기 와 파싱 하기 how to read and parsing rss feed by uwp 를 만들어 봅니다. 마이크로소프트 스토어에서 무료, 유료서비스를 하고자하는 분들이 있다면 rss 피드를 가지고 소식지 앱을 만들어 배포해 보는 것도 괜찮을 거란 생각입니다. 나도 올려야 하는데 읔ㅋㅋ

rss 피드 읽기 와 파싱 방법의 순서는 아래와 같습니다.
1. rss 피드를 하나 얻는다.
2. rss 피드를 읽는다.
3. rss 피드를 파싱한다.
4. 화면에 표시한다.

 

rss 피드를 하나 얻는다.

검색포털에서 rss 피드를 검색하면 언론정보와 국가 정책정보 rss 피드들을 구할 수 있습니다. 여기서는 구글 첫페이지에 나타나는 연합뉴스의 최신뉴스 rss 하나를 가지고 읽어보려고 합니다. 최신뉴스 rss 의 일부를 발췌해 보았습니다. 구조를 보면 어떻게 파싱해야 하는지 알 수 있습니다.

<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" version="2.0">
<channel>
<title>연합뉴스TV :: 대한민국 뉴스의 시작. 채널 23 » 최신</title>
<atom:link href="http://www.yonhapnewstv.co.kr/browse/feed/" rel="self" type="application/rss+xml"/>
<link>http://www.yonhapnewstv.co.kr</link>
<description/>
<lastBuildDate>Tue, 09 Feb 2021 12:24:35 +0900</lastBuildDate>
<language>ko-KR</language>
<sy:updatePeriod>hourly</sy:updatePeriod>
<sy:updateFrequency>1</sy:updateFrequency>
<generator>http://www.yonhapnewstv.co.kr</generator>
<item>
<title>
<![CDATA[ 코로나 걸렸던 멕시코 대통령 복귀…"마스크 안 쓸 것" ]]>
</title>
<link>http://www.yonhapnewstv.co.kr/news/MYH20210209008100038</link>
<comments>http://www.yonhapnewstv.co.kr/news/MYH20210209008100038#comments</comments>
<pubDate>Tue, 09 Feb 2021 12:24:35 +0900</pubDate>
<dc:creator/>
<category>
<![CDATA[ 최신 ]]>
</category>
<guid isPermaLink="false"/>
<description>
<![CDATA[ 코로나 걸렸던 멕시코 대통령 복귀…"마스크 안 쓸 것" 코로나19 확진 판정을 받았던 멕시코 대통령이 보름 만에 복귀했습니다. 로페스 오브라도르 멕시코 대통령 현지시간 8일 기자회견에서 지난달 24일 확진 판정 이후 미열과 몸 통증이 있어 치료를 받았다고 말했습니다. 하지만 그는 여전히 마스크를 착용하지 않은 채 마스크 착용 의무화 계획에 대해서는 개인의 선택이라고 못 박았습니다. 연합뉴스TV 기사문의 및 제보 : 카톡/라인 jebo23 (끝) ]]>
</description>
<content:encoded>
<![CDATA[ 코로나 걸렸던 멕시코 대통령 복귀…"마스크 안 쓸 것" 코로나19 확진 판정을 받았던 멕시코 대통령이 보름 만에 복귀했습니다. 로페스 오브라도르 멕시코 대통령 현지시간 8일 기자회견에서 지난달 24일 확진 판정 이후 미열과 몸 통증이 있어 치료를 받았다고 말했습니다. 하지만 그는 여전히 마스크를 착용하지 않은 채 마스크 착용 의무화 계획에 대해서는 개인의 선택이라고 못 박았습니다. 연합뉴스TV 기사문의 및 제보 : 카톡/라인 jebo23 (끝) ]]>
</content:encoded>
<slash:comments>0</slash:comments>
</item>
<item>
<title>
<![CDATA[ 미국, 3년 만에 유엔 인권이사회 복귀 ]]>
</title>
<link>http://www.yonhapnewstv.co.kr/news/MYH20210209008000038</link>
<comments>http://www.yonhapnewstv.co.kr/news/MYH20210209008000038#comments</comments>
<pubDate>Tue, 09 Feb 2021 12:24:09 +0900</pubDate>
<dc:creator/>
<category>
<![CDATA[ 최신 ]]>
</category>
<guid isPermaLink="false"/>
<description>
<![CDATA[ 미국, 3년 만에 유엔 인권이사회 복귀 미국이 3년 만에 유엔 인권이사회에 복귀하겠다고 밝혔습니다. 토니 블링컨 국무장관은 현지시간 8일 성명을 통해 미국의 탈퇴는 의미 있는 변화를 장려하는 데 아무런 도움이 되지 않았고 미국 리더십의 공백을 초래했다고 말했습니다. 이어 바이든 행정부는 미국을 다시 민주주의와 인권, 평등을 중심으로 하는 외교 정책으로 돌려놨다면서 다자간 도구의 효과적인 사용은 그러한 비전의 중요한 요소라고 덧붙였습니다. ... ]]>
</description>
<content:encoded>
<![CDATA[ 미국, 3년 만에 유엔 인권이사회 복귀 미국이 3년 만에 유엔 인권이사회에 복귀하겠다고 밝혔습니다. 토니 블링컨 국무장관은 현지시간 8일 성명을 통해 미국의 탈퇴는 의미 있는 변화를 장려하는 데 아무런 도움이 되지 않았고 미국 리더십의 공백을 초래했다고 말했습니다. 이어 바이든 행정부는 미국을 다시 민주주의와 인권, 평등을 중심으로 하는 외교 정책으로 돌려놨다면서 다자간 도구의 효과적인 사용은 그러한 비전의 중요한 요소라고 덧붙였습니다. 트럼프 전 행정부는 2018년 6월 유엔 인권위가 이스라엘에 반감을 보이고 미국이 요구하는 개혁을 외면한다며 탈퇴했습니다. 연합뉴스TV 기사문의 및 제보 : 카톡/라인 jebo23 (끝) ]]>
</content:encoded>
<slash:comments>0</slash:comments>
</item>

rss 피드를 읽는다.

C#에서 rss 피드를 읽는 방법은 WebClient, StringReader, XmlDocument 를 사용합니다. StringReader 말고도 StringBuffer를 사용해도 되지만, 이 둘의 차이가 지금 기억이 잘 나지 않는군요. 나중에 한반 다뤄보는 걸로 하고, WebClient를 이용하여 rss 주소를 읽고 문자열로 읽고 StringReader 에 설정합니다. 입력된 문자열을 XmlDocument 로 문서를 만들면 파싱하기 전까지의 rss 피드를 읽는 작업을 할 수 있습니다.

WebClient vWebClient = new WebClient();
wc.Encoding = System.Text.UTF8Encoding.UTF8;
String vReader = wc.DownloadString(p_url);
vWebClient.Dispose();

StringReader vStringReader = new StringReader(vReader);
XmlDocument doc = new XmlDocument();
doc.Load(vStringReader);
vStringReader.Close();

rss 피드를 파싱하기

rss 피드의 뉴스소식은 item 의 집합으로 이루어져 있습니다. 리스트배열 형식의 XmlNodeList 에 item 들의 집합을 넣습니다. 이것을 가지고 foreach 반복을 하여 하나씩 파싱할 수 있습니다. 이것을 가지고 목록데이터에 입력한 후 가공을 하면 됩니다.

XmlNodeList forecastNodes = doc.SelectNodes("rss/channel/item");

String lpTitle = String.Empty, lpDescription = String.Empty, lpContent = String.Empty, lpLink = String.Empty;
foreach (XmlNode lpNode in forecastNodes)
{
  lpTitle = lpNode["title"].InnerText;
  lpDescription = lpNode["description"].InnerText;
  lpContent = lpNode["content:encoded"].InnerText;
  lpLink = lpNode["link"].InnerText;
}

화면에 표시한다.

위의 내용까지 하고 디버그를 한다면 데이터 값을 가져오는 것을 확인할 수 있습니다. 이것을 이용하여 자신의 앱에 rss 피드를 만들어 소식지를 하나 만들 수 있을 것입니다. 이 부분은 사람마다 다르니, 위의 코드는 C# 을 사용한 윈폼에서 만들어도 실행 가능합니다. WPF 도 가능하다고 하는데 , 안해봐서 잘 ㅋ

 

여기까지 uwp에서 rss 피드 읽기 와 파싱하기 를 해 보았습니다.
윈도우 계열 개발자분들이라면 아마도 윈도우앱 서비스를 하기에 가장 쉬우면서도 공부하기 괜찮은 것 중 하나일 것 같다는 생각이 듭니다. 저도 만든 거 하나 업로드 해야 하는데 귀찮군요. ㅋ 안드로이드 앱 업로드 하는 것보다 손이 더 많이 가기 때문이기도 합니다.

반응형

댓글