본문 바로가기
코드리뷰/chatGPT(Python)코드

🚀 Python으로 실시간 뉴스 요약 시스템 만들기 - NewsData.io API 완벽 활용법

by 디마드 2025. 6. 28.
반응형

매일 쏟아지는 수많은 뉴스들, 다 읽기엔 시간이 부족하죠? 오늘은 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 키 발급

  1. NewsData.io 사이트 접속
  2. 무료 계정 생성
  3. 대시보드에서 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

텍스트 요약 알고리즘

간단하지만 효과적인 요약 방법을 구현했어요:

  1. 문장 분리: 정규표현식으로 정확한 문장 구분
  2. 점수 계산: 문장 길이 + 키워드 가중치
  3. 중요 문장 선별: 상위 점수 문장들만 추출
  4. 순서 유지: 원본 순서대로 재배열
# 한국어 뉴스 키워드 가중치
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)  # 지수 백오프

📈 결과 분석 및 개선점

현재 버전의 한계점

  1. 단순한 요약 알고리즘: 문장 길이 기반의 기초적 방법
  2. 언어별 최적화 부족: 한국어 특성을 충분히 반영하지 못함
  3. 문맥 이해 부족: 문장 간 연관성 고려 안 함

개선 방향

  1. 머신러닝 모델 도입: BERT, KoBERT 등 사용
  2. 감정 분석 추가: 기사의 톤 분석
  3. 중복 제거: 유사한 뉴스 필터링
  4. 개인화: 사용자 선호도 학습

🎉 마무리

Python과 NewsData.io API를 활용해서 나만의 뉴스 요약 시스템을 만들어봤어요. 코드는 간단하지만 실용성이 높고, 여러 방향으로 확장 가능한 프로젝트입니다.

이 프로젝트를 통해 배운 점들:

  • API 연동의 기본기: REST API 사용법과 에러 처리
  • 텍스트 처리 기법: 자연어 처리의 기초
  • 환경변수 관리: 보안을 고려한 개발 방법
  • 자동화 시스템 구축: 실무에서 활용 가능한 도구 제작

📚 참고 자료


💡 다음 프로젝트 예고: 이번에 만든 뉴스 요약기에 GPT API를 연동해서 더 정교한 요약 시스템을 만들어보는 튜토리얼을 준비 중이에요. 많은 관심 부탁드려요!

궁금한 점이나 개선 아이디어가 있으시면 댓글로 공유해주세요. 함께 더 나은 도구를 만들어나가요! 🚀

 

반응형

댓글