텔레그렘 뉴스 크롤링 봇 만들기 3회차입니다. 기본틀은 2회차까지 완성 되었고 이제는 부수적인 기능들을 만들고 실시간으로 운영 될 수 있게 셋팅하는 단계만 남았습니다. 어떤 기능들을 넣으면 좋을까? 지선생님과 대화하며 몇 가지만 넣어 보기로 했습니다. (개발프로세스 참고)
1. 개발프로세스
① 다수의 RSS피드 등록 설계
② 키워드 필터 설정 및 전송 시간대 설정
③ 전체 RSS 순회 및 전송 시간 설정
④ 일간 주간 뉴스 통계 리포트 설정
2. 다수의 RSS피드 등록 설계
📌 RSS 피드란?
RSS(Really Simple Syndication)는 웹사이트의 콘텐츠를 실시간으로 구독할 수 있도록 해주는 기술입니다.
뉴스, 블로그, 정부 발표 등 다양한 콘텐츠를 한곳에서 모아볼 수 있기 때문에 정보 수집의 효율성을 극대화할 수 있습니다.
현대 사회는 ‘정보 과잉’이라는 말이 어울릴 정도로, 수많은 매체들이 실시간으로 뉴스를 쏟아내고 있습니다. 정부기관, 언론사, 블로그, 유튜브 등 정보의 출처는 너무도 다양하고 방대합니다.
그렇다면 우리는 어떻게 이 무한한 정보 속에서 ‘필요한 정보’만을 골라낼 수 있을까요?
바로 다수의 RSS 피드를 등록하고 내가 원하는 정보만 얻어오는 방법으로 체계적으로 관리하는 것이 핵심입니다.
# 📌 [2] 다수의 RSS 피드 목록
RSS_FEEDS = [
'https://www.korea.kr/rss/policy.xml',
'https://www.yonhapnewstv.co.kr/browse/feed/',
'https://rss.donga.com/politics.xml',
'https://www.hani.co.kr/rss/lead/',
'https://www.mk.co.kr/rss/society.xml'
]
코드 목록에 내가 원하는 RSS 주소를 언제든 추가 할 수 있도록 코딩 해서 테스트 후 필요 없는 정보들을 필터링해서 제외 시키는 작업을 할 예정입니다.
💡 왜 다수의 RSS 피드 등록이 중요한가?
- 정보 편향 방지
- 하나의 언론사만 구독할 경우, 정보의 시각이 편향될 수 있습니다. 다양한 소스를 등록하면 균형 잡힌 시각 확보에 도움이 됩니다.
- 속보와 분석을 동시에
- 속보는 연합뉴스, 분석은 한겨레, 정책은 대한민국 정책브리핑 등 각각의 강점을 지닌 채널을 분리해 수집할 수 있습니다.
- 필터링을 통한 맞춤형 정보화
- 키워드 기반 필터링, 시간대 설정 등으로 원하는 정보만 받아볼 수 있는 구조를 만들 수 있습니다.
3. 키워드 필터 설정 및 전송 시간대 설정
# 📌 [4] 키워드 필터 및 허용 시간대 설정
KEYWORDS = ['정책', '정부', '경제', '안보', '복지', '기업', '주식', '산업']
SEND_HOURS = range(7, 22) # 오전 7시 ~ 오후 10시 사이에만 전송
🔍 키워드 필터 설정 – 관심 주제만 콕 집어 받기
키워드 필터는 내가 원하는 정보만 골라낼 수 있는 기능입니다. 예를 들어:
- "정책", "정부", "경제", "복지", "주식", "기업" 등 특정 단어가 포함된 기사만 추출
- 불필요한 키워드(예: 연예, 스포츠 등)는 제외 처리
이를 통해 정보의 밀도는 높이고, 잡음은 줄일 수 있습니다.
⏰ 전송 시간대 설정 – 타이밍을 전략적으로 설정하기
단순히 정보를 수집하는 것을 넘어, 언제 정보를 전송받을지도 매우 중요합니다.
- 🕗 출근 전 오전 8시: 하루 시작을 위한 핵심 정보 수신
- 🕛 점심 12시: 오전 뉴스 요약 및 속보 체크
- 🕕 오후 6시: 하루 정리 뉴스 및 이슈 확인
이렇게 시간대를 나누면 불필요한 알림 피로도 줄이면서, 중요한 순간에 핵심 뉴스만 받아볼 수 있습니다.
4.전체 RSS 순회 및 전송 시간 설정
# 📌 [8] 전체 RSS 순회 및 전송
async def send_all_rss_news():
bot = Bot(token=TELEGRAM_TOKEN)
while True:
if datetime.now().hour in SEND_HOURS:
try:
for rss_url in RSS_FEEDS:
news_items = get_rss_news(rss_url)
for title, link, source in news_items:
message = f"📡 *[{source}]*\n🔗 {title}\n🔗 [기사보기]({link})"
await bot.send_message(chat_id=CHAT_ID, text=safe_text(message), parse_mode='Markdown')
except Exception as e:
print(f"❌ 전송 실패: {e}")
await asyncio.sleep(60) # 1분 간격
🔄 전체 RSS 순회 – 하나도 빠짐없이!
등록된 RSS 피드가 5개든, 50개든, 매번 일일이 수동으로 확인할 수는 없습니다.
따라서 다음과 같은 자동화 순회 방식이 중요합니다:
- 모든 RSS URL을 일정 간격으로 순회하며 새 게시글 탐색
- 이전에 전송한 링크는 저장(예: sent_links)하여 중복 방지
- 새로운 항목이 있을 경우에만 알림 또는 전송
이 과정을 자동화하면 정보 누락 없이 안정적인 뉴스 수집이 가능합니다.
⏰ 전송 시간 설정 – ‘언제’가 가장 효과적인가?
수집된 정보를 언제 전송할지도 중요한 전략입니다.
- 너무 자주 전송하면 수신자가 피로감을 느낄 수 있고,
- 너무 늦으면 정보 가치가 떨어질 수 있습니다.
전송시간대 | 목적 |
오전 7~9시 | 출근길 핵심 뉴스 전달 |
오후 12시 | 오전 뉴스 요약 및 점심시간 콘텐츠 |
오후 6~8시 | 하루 마무리 요약, 속보 정리 |
심야 전송 (선택) | 하루 데이터 요약 백업, 관리자 통계 발송 |
💡 팁: 전송과 분석을 분리하라
- 전송 로직은 사용자가 받는 정보 제공
- 분석 로직은 키워드 통계, 클릭률, 소스별 비율 등 추적 용도
분리해서 운영하면 유지 관리가 쉬워지고, 기능 확장도 유연해집니다.
5. 일간 주간 뉴스 통계 리포트 설정
async def send_report(bot, period='daily'):
now = datetime.now()
if period == 'daily':
from_time = now - timedelta(days=1)
title = "📅 *일간 뉴스 통계 리포트*"
else:
from_time = now - timedelta(days=7)
title = "📆 *주간 뉴스 통계 리포트*"
filtered_log = [log for log in news_log if log[0] > from_time]
if not filtered_log:
return
keyword_counter = Counter()
source_counter = Counter()
top_news = []
for dt, title_txt, link, source in filtered_log:
keyword_counter.update(re.findall(r"\w+", title_txt))
source_counter[source] += 1
top_news.append((dt, title_txt, link))
top_keywords = ', '.join([f"`{kw}`" for kw, _ in keyword_counter.most_common(5)])
top_sources = '\n'.join([f"- {src}: {cnt}건" for src, cnt in source_counter.most_common(3)])
top_articles = '\n'.join([f"[{t}]({l})" for _, t, l in top_news[:3]])
report = f"{title}\n\n"
report += f"- 총 수집 뉴스: *{len(filtered_log)}*건\n"
report += f"- 📈 상위 키워드: {top_keywords}\n"
report += f"- 📚 주요 소스:\n{top_sources}\n\n"
report += f"- 📃 TOP 3 기사:\n{top_articles}"
await bot.send_message(chat_id=CHAT_ID, text=safe_text(report), parse_mode='Markdown')
단순히 뉴스를 수집하는 것을 넘어서, 수집된 정보를 분석하는 것이 중요합니다.
하루 또는 일주일 단위로 주요 키워드, 기사 수, 인기 출처 등을 정리한 통계 리포트를 생성하면 다음과 같은 이점이 있습니다:
- ✅ 어떤 이슈가 반복적으로 등장했는지 파악
- ✅ 가장 활발했던 미디어 소스 확인
- ✅ 자동 요약을 통한 정보 소비 시간 절약
Python이나 자동화 툴을 활용하면, Markdown 또는 PDF 형태로 매일 아침, 매주 월요일 자동 리포트 전송 받아 볼 수 있도록 설계
수집된 정보를 활용하여 2차 수익화 하는 방법은 다음 글에서 소개해보도록 하겠습니다.
6. 실행화면
코드 실행시 설정된 시간에 맞춰서 자동 전동해주는 모습을 확인 했습니다. 실행하면서 몇 가지 의문이 들었고 다음코딩시 반영해서 문제를 해결해 보겠습니다.
'자기개발' 카테고리의 다른 글
기획이란 무엇인가? 기본 개념부터 알아보기 (1편) (5) | 2025.08.10 |
---|---|
[K코딩] 텔레그렘 뉴스 크롤링 봇 채널에 추가하기(V2) (3) | 2025.07.21 |
[K코딩] 텔레그렘 뉴스 크롤링 봇 만들기 (4) | 2025.07.18 |
나만의 지피티 프롬프트 만들기 (3) | 2025.06.06 |
다양한 스타일의 버튼을 무료로! 블로그 분위기를 바꾸는 HTML 버튼 서식 공유 (2) | 2025.05.19 |