반응형
매일 쏟아지는 수많은 뉴스들, 다 읽기엔 시간이 부족하죠? 오늘은 Python을 사용해서 뉴스를 자동으로 수집하고 요약해주는 시스템을 만들어보겠습니다. 무료 API를 활용한 실전 프로젝트로, 개발 초보자도 쉽게 따라할 수 있어요!
🎯 이런 분들께 추천해요
- 뉴스를 효율적으로 소비하고 싶은 분
- Python API 활용 실습을 원하는 개발자
- 자동화 도구에 관심이 있는 분
- 텍스트 처리 프로젝트를 해보고 싶은 분
📰 NewsData.io API를 선택한 이유
뉴스 API는 여러 종류가 있지만, NewsData.io를 선택한 이유는 다음과 같아요:
✅ 장점
- 무료 플랜 제공: 하루 200회 API 호출 가능
- 한국어 뉴스 지원: 국내 뉴스도 잘 수집됨
- 다양한 필터링: 카테고리, 키워드, 국가별 검색 가능
- 실시간 업데이트: 최신 뉴스를 빠르게 제공
- 간단한 사용법: REST API로 쉽게 연동
⚠️ 무료 플랜 제한사항
- 일일 200회 호출 제한
- 한 번에 최대 10개 기사
- 과거 데이터 제한
하지만 개인 프로젝트나 학습용으로는 충분해요!
🛠️ 개발 환경 설정하기
1. 필요한 패키지 설치
pip install requests python-dotenv
2. NewsData.io API 키 발급
- NewsData.io 사이트 접속
- 무료 계정 생성
- 대시보드에서 API 키 복사
3. 환경변수 설정
프로젝트 폴더에 .env 파일을 만들고:
NEWSDATA_API_KEY=your_actual_api_key_here
💡 꿀팁: .gitignore에 .env를 추가해서 API 키가 실수로 공개되지 않도록 하세요!
💻 핵심 코드 구현
뉴스 수집 클래스 만들기
NewsData.io API의 주요 매개변수들을 정리하면:
- country: 국가 코드 (kr=한국, us=미국 등)
- language: 언어 코드 (ko=한국어, en=영어 등)
- category: 카테고리 (technology, sports, business 등)
- q: 검색 키워드
- size: 가져올 기사 수 (최대 10개)
def get_news(self, country="kr", language="ko", category=None, q=None, size=10):
params = {
"apikey": self.api_key,
"country": country,
"language": language,
"size": min(size, 10) # 무료 플랜 제한
}
if category:
params["category"] = category
if q:
params["q"] = q
텍스트 요약 알고리즘
간단하지만 효과적인 요약 방법을 구현했어요:
- 문장 분리: 정규표현식으로 정확한 문장 구분
- 점수 계산: 문장 길이 + 키워드 가중치
- 중요 문장 선별: 상위 점수 문장들만 추출
- 순서 유지: 원본 순서대로 재배열
# 한국어 뉴스 키워드 가중치
important_keywords = ['발표', '예정', '계획', '정부', '대통령', '기업', '투자']
for keyword in important_keywords:
if keyword in sentence:
score += 5
🔧 실제 사용해보기
1. 일반 뉴스 요약
summaries = summarizer.process_news(country="kr", language="ko", size=5)
2. 카테고리별 뉴스
tech_summaries = summarizer.process_news(
country="kr",
language="ko",
category="technology",
size=3
)
3. 키워드 검색
ai_summaries = summarizer.process_news(
language="ko",
q="인공지능",
size=3
)
📊 실행 결과 예시
================================================================================
📰 뉴스 요약 결과
================================================================================
[1] 국내 AI 스타트업, 글로벌 투자 유치 성공
📅 발행일: 2025-06-28T10:30:00Z
📰 출처: tech_news
🔗 링크: https://example.com/news/1
📝 요약:
국내 AI 스타트업 A사가 실리콘밸리 투자사로부터 100억원 규모의 투자를 유치했다고 발표했다.
이번 투자로 글로벌 시장 진출을 가속화할 계획이다.
A사는 자연어 처리 기술 분야에서 독자적인 알고리즘을 보유하고 있다.
🚀 더 나아가기 - 고도화 아이디어
1. AI 기반 요약 업그레이드
# OpenAI GPT API 연동 예시
import openai
def ai_summarize(self, text):
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[
{"role": "system", "content": "뉴스 기사를 3문장으로 요약해주세요."},
{"role": "user", "content": text}
]
)
return response.choices[0].message.content
2. 데이터베이스 연동
import sqlite3
def save_to_db(self, summaries):
conn = sqlite3.connect('news_summary.db')
cursor = conn.cursor()
for summary in summaries:
cursor.execute('''
INSERT INTO news (title, summary, link, published_date)
VALUES (?, ?, ?, ?)
''', (summary['title'], summary['summary'],
summary['link'], summary['published_date']))
conn.commit()
conn.close()
3. 스케줄링 자동화
import schedule
import time
def run_daily_summary():
summarizer = NewsDataSummarizer(API_KEY)
summaries = summarizer.process_news(size=5)
# 이메일 발송 또는 슬랙 알림
send_notification(summaries)
# 매일 오전 9시에 실행
schedule.every().day.at("09:00").do(run_daily_summary)
while True:
schedule.run_pending()
time.sleep(1)
🎨 실용적인 활용 방안
1. 개인용 뉴스 디제스트
- 관심 키워드로 맞춤형 뉴스 수집
- 이메일이나 메신저로 자동 발송
2. 업무용 모니터링 시스템
- 특정 업계 뉴스 추적
- 경쟁사 동향 파악
3. 콘텐츠 제작 도구
- 블로그 소재 발굴
- 트렌드 분석 자료
⚡ 성능 최적화 팁
1. API 호출 최적화
# 호출 간격 조절로 제한 회피
time.sleep(0.5)
# 배치 처리로 효율성 증대
def batch_process(self, queries, batch_size=5):
results = []
for i in range(0, len(queries), batch_size):
batch = queries[i:i+batch_size]
# 배치 처리 로직
return results
2. 캐싱 시스템
import json
from datetime import datetime, timedelta
def cache_results(self, key, data, hours=1):
cache_file = f"cache_{key}.json"
cache_data = {
'timestamp': datetime.now().isoformat(),
'data': data
}
with open(cache_file, 'w', encoding='utf-8') as f:
json.dump(cache_data, f, ensure_ascii=False)
🔒 보안 및 에러 처리
1. API 키 보안
- 환경변수 사용 필수
- .gitignore에 .env 추가
- 배포 시 서버 환경변수 설정
2. 견고한 에러 처리
def safe_api_call(self, params, max_retries=3):
for attempt in range(max_retries):
try:
response = requests.get(self.base_url, params=params, timeout=10)
response.raise_for_status()
return response.json()
except requests.exceptions.RequestException as e:
if attempt == max_retries - 1:
print(f"API 호출 실패: {e}")
return None
time.sleep(2 ** attempt) # 지수 백오프
📈 결과 분석 및 개선점
현재 버전의 한계점
- 단순한 요약 알고리즘: 문장 길이 기반의 기초적 방법
- 언어별 최적화 부족: 한국어 특성을 충분히 반영하지 못함
- 문맥 이해 부족: 문장 간 연관성 고려 안 함
개선 방향
- 머신러닝 모델 도입: BERT, KoBERT 등 사용
- 감정 분석 추가: 기사의 톤 분석
- 중복 제거: 유사한 뉴스 필터링
- 개인화: 사용자 선호도 학습
🎉 마무리
Python과 NewsData.io API를 활용해서 나만의 뉴스 요약 시스템을 만들어봤어요. 코드는 간단하지만 실용성이 높고, 여러 방향으로 확장 가능한 프로젝트입니다.
이 프로젝트를 통해 배운 점들:
- API 연동의 기본기: REST API 사용법과 에러 처리
- 텍스트 처리 기법: 자연어 처리의 기초
- 환경변수 관리: 보안을 고려한 개발 방법
- 자동화 시스템 구축: 실무에서 활용 가능한 도구 제작
📚 참고 자료
💡 다음 프로젝트 예고: 이번에 만든 뉴스 요약기에 GPT API를 연동해서 더 정교한 요약 시스템을 만들어보는 튜토리얼을 준비 중이에요. 많은 관심 부탁드려요!
궁금한 점이나 개선 아이디어가 있으시면 댓글로 공유해주세요. 함께 더 나은 도구를 만들어나가요! 🚀
반응형
'코드리뷰 > chatGPT(Python)코드' 카테고리의 다른 글
제휴 마케팅, 더 쉽게! 자동화로 블로그 똑똑하게 운영하기 (0) | 2025.06.29 |
---|---|
초보자도 쉽게 만들 수 있는 유튜브 음악방송 7단계 (2) | 2025.06.19 |
AI 이용해 유튜브 명상 채널 만들기 (0) | 2025.06.14 |
댓글