반응형
✅ 구성 목표
기능 | 설명 |
📡 RSS 피드 입력 | 사용자가 직접 RSS URL 입력 |
📥 뉴스 가져오기 | RSS 피드의 제목, 요약, 링크를 화면에 표시 |
🔍 키워드 추출 | 제목/요약에서 자동으로 상위 키워드 추출 |
💾 엑셀(CSV) 저장 | 버튼 클릭으로 파일 저장 |
🛠 1. 프로젝트 생성
- Visual Studio → 새 프로젝트 → Windows Forms App (.NET Framework)
- 이름: WinFormsRssNewsCollector
- Form1.vb 디자인 구성:
컨트롤 | 이름 | 속성 |
TextBox | txtRssUrl | 기본값: https://rss.nytimes.com/services/xml/rss/nyt/Technology.xml |
Button | btnFetch | 텍스트: "뉴스 가져오기" |
Button | btnExport | 텍스트: "엑셀로 저장" |
ListBox | lstFeed | 여러 뉴스 항목 표시 |
ListBox | lstKeywords | 키워드 목록 표시 |
Label | lblStatus | 상태 표시용 |

🧠 2. 전체 코드 (Form1.vb)
vb.net
Imports System.Xml
Imports System.ServiceModel.Syndication
Imports System.IO
Public Class Form1
Dim feedItems As New List(Of SyndicationItem)
Private Sub btnFetch_Click(sender As Object, e As EventArgs) Handles btnFetch.Click
Try
lstFeed.Items.Clear()
lstKeywords.Items.Clear()
lblStatus.Text = "피드 불러오는 중..."
Dim reader As XmlReader = XmlReader.Create(txtRssUrl.Text)
Dim feed As SyndicationFeed = SyndicationFeed.Load(reader)
reader.Close()
feedItems = feed.Items.ToList()
For Each item As SyndicationItem In feedItems
lstFeed.Items.Add(item.Title.Text)
Next
' 키워드 추출
Dim combinedText As String = String.Join(" ", feedItems.Select(Function(i) i.Title.Text & " " & If(i.Summary IsNot Nothing, i.Summary.Text, "")))
Dim keywords = ExtractKeywords(combinedText)
For Each kw In keywords
lstKeywords.Items.Add("🔍 " & kw)
Next
lblStatus.Text = "✅ 완료!"
Catch ex As Exception
lblStatus.Text = "❌ 오류: " & ex.Message
End Try
End Sub
Private Sub btnExport_Click(sender As Object, e As EventArgs) Handles btnExport.Click
Try
Dim filePath As String = $"rss_export_{Now.ToString("yyyyMMdd_HHmmss")}.csv"
Using writer As New StreamWriter(filePath, False, System.Text.Encoding.UTF8)
writer.WriteLine("제목,링크,요약")
For Each item As SyndicationItem In feedItems
Dim title = CleanForCsv(item.Title.Text)
Dim link = item.Links(0).Uri.ToString()
Dim summary = If(item.Summary IsNot Nothing, CleanForCsv(item.Summary.Text), "")
writer.WriteLine($"{title},{link},{summary}")
Next
End Using
lblStatus.Text = $"💾 저장 완료: {filePath}"
Catch ex As Exception
lblStatus.Text = "❌ 저장 실패: " & ex.Message
End Try
End Sub
Function CleanForCsv(text As String) As String
If String.IsNullOrEmpty(text) Then Return ""
text = text.Replace(vbCrLf, " ").Replace(vbLf, " ").Trim()
If text.Contains(",") Or text.Contains("""") Then
text = """" & text.Replace("""", """""") & """"
End If
Return text
End Function
Function ExtractKeywords(text As String) As List(Of String)
Dim stopWords = {"the", "and", "of", "to", "in", "is", "a", "for", "on"}
Dim wordCount As New Dictionary(Of String, Integer)
Dim words = text.ToLower().Split({" "c, ","c, "."c, ":"c}, StringSplitOptions.RemoveEmptyEntries)
For Each word In words
If Not stopWords.Contains(word) AndAlso word.Length > 2 Then
If wordCount.ContainsKey(word) Then
wordCount(word) += 1
Else
wordCount.Add(word, 1)
End If
End If
Next
Return wordCount.OrderByDescending(Function(k) k.Value).Take(10).Select(Function(k) k.Key).ToList()
End Function
End Class
📊 실행 결과
- URL 입력 → [뉴스 가져오기] 클릭 → 리스트에 제목들 표시
- 우측에 상위 키워드 자동 추출
- [엑셀로 저장] 누르면 .csv로 저장됨
✅ 다음 확장도 가능합니다
확장기능 | 설명 |
⏰ 자동 스케줄링 | 매일 특정 시간에 뉴스 수집 |
📈 키워드 변화 추적 | 시간별 키워드 통계 누적 |
🖼 UI 테마 | 다크모드, 아이콘, 로딩 애니메이션 등 추가 |
☁ Google Sheets 연동 | 클라우드에 직접 저장 가능 |
❌ Imports System.ServiceModel.Syndication 에서 "ServiceModel.Syndication을 찾을 수 없습니다" 오류가 나는 경우
✅ 원인 요약
System.ServiceModel.Syndication 네임스페이스는 .NET Framework 기본 라이브러리에는 일부 포함되어 있지만, 명시적으로 참조 추가가 필요할 수 있습니다.
✅ 해결 방법 (VB.NET WinForms 또는 콘솔 기준)
✔ 방법 1. 참조 수동 추가 (Visual Studio)
- 솔루션 탐색기 → 프로젝트 마우스 우클릭 → [참조 추가]
- 왼쪽에서 어셈블리 > 프레임워크 선택
- 아래 항목을 찾아서 체크합니다:
✔ System.ServiceModel
✔ System.Xml
- 확인 → 빌드 다시 실행
✔ 방법 2. NuGet으로 설치 (권장)
NuGet을 사용하면 더 최신 .NET에서도 호환됩니다.
▶ NuGet 패키지 설치 방법:
- 메뉴 상단: 도구 > NuGet 패키지 관리자 > 패키지 관리자 콘솔
- 아래 명령 입력 후 Enter:
Install-Package System.ServiceModel.Syndication -Version 4.5.0
또는 NuGet 패키지 관리자 UI에서 직접 "System.ServiceModel.Syndication" 검색 → 설치
설치 후 다시 빌드하면 Imports System.ServiceModel.Syndication 오류가 사라집니다.
✅ 주의사항
항목 | 설명 |
.NET Framework 4.5 이상 권장 | Syndication은 일부 버전에서만 작동합니다 |
Visual Studio 2019 이상 권장 | NuGet 최신 버전 안정성 향상 |
반응형