NewsAPI.org에서 미국, 한국 주식시황 및 주요 관심 Category 뉴스 Summary하기
AI주식자동매매2025. 7. 4. 17:12
반응형
파이썬 프로그램 로직 분석 문서
1. 프로그램 개요
이 문서는 make_summary.py 파이썬 스크립트의 내부 로직과 구조를 설명합니다. 이 스크립트는 NewsAPI.org를 활용하여 미국 및 한국 주식 시장과 관련된 주요 뉴스 기사를 수집하고, 수집된 기사들을 OpenAI의 o4-mini 모델을 사용하여 요약합니다. 최종적으로 요약된 내용은 JSON 형식으로 저장되며, 필요에 따라 외부 백엔드 API로 업로드될 수 있습니다.
주요 기능:
•뉴스 수집: NewsAPI를 통해 비즈니스 헤드라인 및 특정 키워드(경제 지표, AI 소프트웨어, AI 반도체, 양자 컴퓨팅, 항공우주, 소형 원전, 스테이블 코인 등)와 관련된 뉴스 기사를 수집합니다.
•기사 내용 보완: 수집된 기사 중 이미지 URL이 없거나 스니펫이 불완전한 경우, 웹 크롤링을 통해 이미지 및 본문 내용을 보완합니다.
•AI 기반 요약: OpenAI 모델을 사용하여 수집된 뉴스 기사들을 종합적으로 분석하고, 미국 또는 한국 시장 동향 및 각 분야별 주요 소식을 요약합니다. 요약 시 호재 및 악재 종목 심볼(또는 종목 코드)을 식별하여 포함합니다.
•JSON 저장: 요약된 결과를 구조화된 JSON 파일로 로컬에 저장합니다.
•백엔드 연동: (선택 사항) 생성된 JSON 요약 파일을 외부 백엔드 서버로 업로드하거나, 추천 시스템을 초기화하는 기능을 포함합니다.
사용 목적:
이 스크립트는 금융 시장 분석가, 투자자 또는 관련 분야 연구자들이 매일 업데이트되는 뉴스 기사를 효율적으로 요약하고 분석하는 데 도움을 주기 위해 설계되었습니다. 자동화된 뉴스 수집 및 AI 요약 기능을 통해 시장 동향을 빠르게 파악하고 의사 결정에 필요한 정보를 얻을 수 있습니다.
개발 환경 및 의존성:
•Python 3: 스크립트의 기본 실행 환경입니다.
•외부 라이브러리: requests, BeautifulSoup4, PyYAML, pandas, newspaper3k, python-dateutil, pytz, openai, urllib3 등이 사용됩니다. 이 라이브러리들은 pip install 명령어를 통해 설치할 수 있습니다.
•API 키: NewsAPI 및 OpenAI API를 사용하기 위한 유효한 API 키가 config.yaml 파일에 설정되어 있어야 합니다.
파일 구조:
•make_summary.py: 본 스크립트 파일.
•config.yaml: API 키와 같은 환경 설정 정보를 저장하는 파일.
•summaries/: 생성된 JSON 요약 파일이 저장될 디렉토리.
2. 주요 기능 설명
2.1. 환경 설정 및 API 키 로드
프로그램은 config.yaml 파일에서 OPENAI_SEC_KEY와 NEWS_API_KEY를 로드하여 사용합니다. 이 키들은 NewsAPI와 OpenAI 서비스에 접근하기 위한 인증 정보로 사용됩니다. 키가 없거나 유효하지 않은 경우 프로그램은 실행을 중단합니다.
Python
with open(\'config.yaml\', encoding=\'UTF-8\') as f: _cfg = yaml.load(f, Loader=yaml.FullLoader) OPENAI_API_KEY = _cfg.get(\'OPENAI_SEC_KEY\', "") NEWS_API_KEY = _cfg.get(\'NEWS_API_KEY\', "") if not OPENAI_API_KEY or not NEWS_API_KEY or OPENAI_API_KEY.startswith("<") or NEWS_API_KEY.startswith("<"): print("🔴 API 키를 설정해주세요. efriendly_config.yaml 내부에 OPENAI_SEC_KEY, NEWS_API_KEY를 입력해야 합니다.") sys.exit(1)
2.2. 날짜 계산
get_target_and_start_dates() 함수는 현재 뉴욕 시간과 서울 시간을 기준으로 뉴스 수집에 필요한 target_date_str (대상 날짜), curr_datetime_kr (현재 한국 시간), start_date_str (시작 날짜)를 계산합니다. 이는 뉴스 API 호출 시 from 및 to 파라미터로 사용됩니다.
Python
def get_target_and_start_dates(): ny_tz = timezone(\'America/New_York\') kr_tz = timezone(\'Asia/Seoul\') now_ny = datetime.datetime.now(ny_tz) now_kr = datetime.datetime.now(kr_tz) target_date_str = now_ny.strftime("%Y-%m-%d") start_date_str = (now_ny - datetime.timedelta(days=5)).strftime("%Y-%m-%d") curr_datetime_kr = now_kr.strftime("%Y-%m-%d %H:%M") return target_date_str, curr_datetime_kr, start_date_str, now_ny
2.3. 뉴스 수집 및 처리
뉴스 수집은 fetch_headlines() 함수를 통해 이루어지며, 이는 NewsAPI의 top-headlines (미국) 또는 everything (한국 및 키워드 기반) 엔드포인트를 호출합니다. API 호출 시 429 Too Many Requests 오류에 대한 재시도 로직이 포함되어 있어 안정성을 높였습니다.
Python
def fetch_headlines(category, country, page_size=20, max_retries=3): # ... (생략) ... # NewsAPI 호출 로직 # ... (생략) ...
수집된 기사 중 이미지 URL이 없거나 스니펫이 불완전한 경우, fetch_og_image()와 fetch_top_image_newspaper() 함수를 사용하여 이미지 URL을 보완하고, fetch_full_text() 함수를 사용하여 기사 본문을 크롤링하여 스니펫을 보완합니다. 이는 fetch_headlines_with_fallback() 함수에서 통합적으로 처리됩니다.
Python
def fetch_full_text(url: str, max_chars: int=5000) -> str: # ... (생략) ... def fetch_og_image(url, timeout=10): # ... (생략) ... def fetch_top_image_newspaper(url): # ... (생략) ... def fetch_headlines_with_fallback(category, country, page_size=20): # ... (생략) ...
2.4. OpenAI를 이용한 뉴스 요약
수집된 모든 뉴스 기사는 OpenAI 모델에 전달될 프롬프트로 구성됩니다. system_msg는 모델의 역할을 정의하고, user_msg는 실제 뉴스 기사 내용과 함께 요약 요청 및 출력 JSON 형식을 지정합니다. 이 프로그램은 o4-mini 모델을 사용하며, 미국 또는 한국 시장에 맞춰 다른 시스템 메시지를 사용합니다.
Python
# ... (생략) ... if country_code == \'us\': system_msg = { "role": "system", "content": ( f"당신은 미국 금융 시장 리포터입니다. 오늘({curr_datetime_kr}) 기준으로 아래 데이터를 참고하여 " "🇺🇸미국 주식시장 동향, 📊주요 경제지표, 🤖AI 소프트웨어, 💽AI 반도체, ⚛양자 컴퓨팅·네트워킹, " "🤖AI 로보틱스, 🚀항공우주·방산, ☢소형 원전, ₿스테이블 코인, 분야 주요 기업 소식을 " "각 섹션별 최소 3개씩 뽑고, 각각의 소식에서 호재에 해당되는 종목과 악재에 해당되는 종목을 goodSymbol과 badSymbol 리스트로 구분하여 만들어 넣고, 전체 2000자 이내로 요약해 주세요." ) } else: system_msg = { "role": "system", "content": ( f"당신은 한국 금융 시장 리포터입니다. 오늘({curr_datetime_kr}) 기준으로 아래 데이터를 참고하여 " "🇰🇷국내 주식시장 동향, 📊주요 경제지표, 🤖AI 소프트웨어, 💽AI 반도체, ⚛양자 컴퓨팅·네트워킹, " "🤖AI 로보틱스, 🚀항공우주·방산, ☢소형 원전, ₿스테이블 코인, 분야 주요 기업 소식을 " "각 섹션별 최소 3개씩 뽑고, 각각의 소식에서 KOSPI와 KOSDAQ에 상장된 호재에 해당되는 종목코드와 악재에 해당되는 종목코드를 goodSymbol과 badSymbol 리스트로 구분하여 만들어 넣고, 전체 2000자 이내로 요약해 주세요." ) } # ... (생략) ... resp = client.chat.completions.create( model="o4-mini", messages=[system_msg, user_msg] ) summary_text = resp.choices[0].message.content # ... (생략) ...
2.5. 결과 저장 및 백엔드 연동
OpenAI로부터 받은 요약 결과는 JSON 형식으로 파싱되어 summaries 디렉토리에 [country_code]_market_summary_YYYY-MM-DD.json 파일명으로 저장됩니다. 또한, backend_api_send() 함수를 통해 이 JSON 파일을 외부 서버로 업로드하거나, reset_recommendations() 함수를 통해 추천 시스템을 초기화할 수 있는 기능이 포함되어 있습니다. 이 두 함수는 현재 주석 처리되어 있어 필요 시 활성화하여 사용할 수 있습니다.
Python
def backend_api_send(country_code: str): # ... (생략) ... def reset_recommendations(): # ... (생략) ... # ... (생략) ... save_dir = os.path.join(os.getcwd(), "summaries") os.makedirs(save_dir, exist_ok=True) curr_date_kr = curr_datetime_kr[:10] file_path = os.path.join(save_dir, f"{country_code}_market_summary_{curr_date_kr}.json") try: with open(file_path, "w", encoding="utf-8") as f: json.dump(stock_market_summary_json, f, ensure_ascii=False, indent=2) print(f"✅ {country_code} 시황 요약을 파일로 저장했습니다: {file_path}") except Exception as e: print(f"❌ {country_code} 시황 요약 파일 저장 중 오류 발생: {e}")
3. 코드 구조 및 함수별 설명
이 섹션에서는 make_summary.py 스크립트의 전체적인 코드 구조와 각 주요 함수의 역할 및 내부 로직을 상세히 설명합니다.
3.1. 모듈 임포트 및 초기 설정
스크립트는 os, sys, json, datetime, time, traceback, re, dateutil.tz, pytz.timezone, requests, bs4.BeautifulSoup, yaml, pandas, newspaper.Article, dateutil.parser, urllib3 등 다양한 표준 및 외부 라이브러리를 임포트합니다. 이들은 파일 시스템 접근, 날짜/시간 처리, 웹 요청, HTML 파싱, YAML 파일 처리, 데이터 처리, 뉴스 기사 파싱, 예외 처리, 정규 표현식 등에 사용됩니다.
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) 코드는 SSL 인증서 경고를 비활성화하는 데 사용됩니다. 이는 개발 또는 특정 환경에서 SSL 인증서 검증 문제를 회피하기 위함일 수 있으나, 프로덕션 환경에서는 보안상 주의가 필요합니다.
openai 라이브러리가 설치되어 있지 않은 경우, 사용자에게 설치를 안내하고 프로그램을 종료합니다.
Python
import os import sys import json import datetime import time import traceback import re from dateutil import tz from pytz import timezone import requests from bs4 import BeautifulSoup import yaml import pandas as pd from newspaper import Article from dateutil import parser import urllib3 # InsecureRequestWarning 경고 끄기 urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) try: from openai import OpenAI except ImportError: print("Error: openai 라이브러리가 설치되어 있지 않습니다.") print(" pip install openai>=0.27.0 후 다시 실행하세요.") sys.exit(1)
3.2. config.yaml 파일 처리
config.yaml 파일은 API 키와 같은 민감한 정보를 저장하는 데 사용됩니다. 스크립트는 이 파일을 열어 OPENAI_SEC_KEY와 NEWS_API_KEY를 로드합니다. 로드된 키의 유효성을 검사하여, 키가 비어 있거나 기본 플레이스홀더 값("<"로 시작하는 문자열)인 경우 사용자에게 설정을 요청하고 프로그램을 종료합니다.
Python
with open(\'config.yaml\', encoding=\'UTF-8\') as f: _cfg = yaml.load(f, Loader=yaml.FullLoader) OPENAI_API_KEY = _cfg.get(\'OPENAI_SEC_KEY\', "") NEWS_API_KEY = _cfg.get(\'NEWS_API_KEY\', "") if not OPENAI_API_KEY or not NEWS_API_KEY or OPENAI_API_KEY.startswith("<") or NEWS_API_KEY.startswith("<"): print("🔴 API 키를 설정해주세요. efriendly_config.yaml 내부에 OPENAI_SEC_KEY, NEWS_API_KEY를 입력해야 합니다.") sys.exit(1) client = OpenAI(api_key=OPENAI_API_KEY) pd.options.mode.chained_assignment = None # pandas 경고 비활성화
pd.options.mode.chained_assignment = None는 pandas 라이브러리에서 발생하는 SettingWithCopyWarning 경고를 비활성화하는 설정입니다. 이는 데이터프레임의 복사본에 대한 연산 시 발생할 수 있는 경고를 무시하도록 합니다.
3.3. get_target_and_start_dates() 함수
이 함수는 현재 시간을 기준으로 뉴욕과 서울의 시간대를 고려하여 뉴스 수집 기간을 설정합니다. target_date_str은 뉴욕 시간대의 현재 날짜를, start_date_str은 뉴욕 시간대의 현재 날짜로부터 5일 전의 날짜를 나타냅니다. curr_datetime_kr은 현재 서울 시간대의 날짜와 시간을 반환합니다.
Python
def get_target_and_start_dates(): ny_tz = timezone(\'America/New_York\') kr_tz = timezone(\'Asia/Seoul\') now_ny = datetime.datetime.now(ny_tz) now_kr = datetime.datetime.now(kr_tz) target_date_str = now_ny.strftime("%Y-%m-%d") start_date_str = (now_ny - datetime.timedelta(days=5)).strftime("%Y-%m-%d") curr_datetime_kr = now_kr.strftime("%Y-%m-%d %H:%M") return target_date_str, curr_datetime_kr, start_date_str, now_ny
3.4. fetch_full_text() 함수 (웹 크롤링)
이 함수는 주어진 URL에서 웹 페이지의 전체 텍스트를 추출합니다. requests 라이브러리를 사용하여 HTTP GET 요청을 보내고, BeautifulSoup를 사용하여 응답받은 HTML을 파싱합니다. 모든 <p> 태그의 텍스트를 추출하여 합치고, max_chars로 지정된 길이만큼만 반환합니다. 에러 발생 시 빈 문자열을 반환합니다.
Python
def fetch_full_text(url: str, max_chars: int=5000) -> str: try: resp = requests.get(url, headers={"User-Agent":"Mozilla/5.0"}, verify="C:\Windows\Temp\LGCNS_CA_v3.crt") soup = BeautifulSoup(resp.text, "html.parser") paragraphs = soup.find_all("p") text = "\n".join(p.get_text(strip=True) for p in paragraphs) return text[:max_chars] except: return ""
3.5. fetch_headlines() 함수 (NewsAPI 호출)
이 함수는 NewsAPI를 통해 뉴스 헤드라인을 가져옵니다. country 인수에 따라 미국(us)인 경우 top-headlines 엔드포인트를, 그 외의 경우(kr) everything 엔드포인트를 사용합니다. 한국 뉴스의 경우 query_keywords (경제, 경제지표, 주식시황)를 사용하여 여러 쿼리를 수행하고 결과를 합칩니다. API 호출 실패 시 (특히 429 Too Many Requests) 지수 백오프 방식으로 재시도합니다. SSL 인증서 검증을 위해 verify="C:\Windows\Temp\LGCNS_CA_v3.crt" 경로의 인증서를 사용합니다.
Python
def fetch_headlines(category, country, page_size=20, max_retries=3): query_keywords = ["경제", "경제지표", "주식시황"] all_articles = [] for attempt in range(1, max_retries + 1): if country.lower() == \'us\': # ... (top-headlines 호출 로직) ... else: # ... (everything 호출 로직 및 중복 제거) ... print("🔴 NewsAPI 호출 실패: 429 rate limit or other error.") return []
3.6. 이미지 추출 보조 함수 (fetch_og_image, fetch_top_image_newspaper)
이 두 함수는 뉴스 기사의 대표 이미지를 추출하는 데 사용됩니다. fetch_og_image()는 웹 페이지의 Open Graph (og:image) 또는 Twitter (twitter:image) 메타 태그를 파싱하여 이미지 URL을 찾습니다. fetch_top_image_newspaper()는 newspaper3k 라이브러리를 사용하여 기사의 본문에서 가장 적합한 이미지를 추출합니다. 이들은 fetch_headlines_with_fallback() 함수에서 이미지 URL이 없는 기사를 보완하는 데 활용됩니다.
Python
def fetch_og_image(url, timeout=10): # ... (생략) ... def fetch_top_image_newspaper(url): # ... (생략) ...
3.7. fetch_headlines_with_fallback() 함수
이 함수는 fetch_headlines()를 호출하여 뉴스를 가져온 후, 각 기사에 urlToImage 필드가 없는 경우 fetch_og_image()와 fetch_top_image_newspaper()를 순차적으로 사용하여 이미지 URL을 찾아 보완합니다. 이는 요약 결과에 시각적 정보를 포함하기 위함입니다.
Python
def fetch_headlines_with_fallback(category, country, page_size=20): print(f"{country} fetch_headlines_with_fallback..") articles = fetch_headlines(category, country, page_size) for art in articles: if not art.get("urlToImage"): img = fetch_og_image(art["url"]) if not img: img = fetch_top_image_newspaper(art["url"]) art["urlToImage"] = img return articles
3.8. backend_api_send() 및 reset_recommendations() 함수
이 함수들은 외부 백엔드 API와 통신하는 역할을 합니다. backend_api_send()는 생성된 JSON 요약 파일을 https://howardkim.pythonanywhere.com/summaries 엔드포인트로 POST 요청을 통해 업로드합니다. reset_recommendations()는 https://howardkim.pythonanywhere.com/reset_recommendations 엔드포인트로 POST 요청을 보내 추천 시스템을 초기화합니다. 현재 코드에서는 이 함수들이 if __name__ == "__main__" 블록에서 주석 처리되어 있어 기본적으로는 실행되지 않습니다.
Python
def backend_api_send(country_code: str): # ... (생략) ... def reset_recommendations(): # ... (생략) ...
3.9. main() 함수 (핵심 로직)
main() 함수는 스크립트의 전체적인 실행 흐름을 제어합니다. 주요 단계는 다음과 같습니다.
1.날짜 설정: get_target_and_start_dates()를 호출하여 현재 날짜 및 뉴스 검색 기간을 설정합니다. 주말 여부에 따라 조회 대상 날짜를 조정하는 로직이 있으나, 현재는 주석 처리되어 항상 현재 날짜를 기준으로 합니다.
2.뉴스 수집: fetch_headlines_with_fallback()를 사용하여 비즈니스 헤드라인 뉴스를 가져옵니다. 또한, country_code에 따라 미국 또는 한국의 주요 분야별 키워드(topic_queries 또는 CATEGORIES)를 사용하여 NewsAPI의 everything 엔드포인트에서 추가 뉴스를 수집합니다.
3.기사 통합 및 필터링: 수집된 모든 기사를 all_articles 리스트에 통합하고, publishedAt 날짜를 기준으로 정렬합니다. start_date 이전의 기사는 필터링하여 제외합니다. snippet이 짧은 기사는 fetch_full_text()를 통해 본문을 크롤링하여 보완합니다.
4.OpenAI 프롬프트 구성: 수집된 기사들을 바탕으로 OpenAI 모델에 전달할 system_msg와 user_msg를 동적으로 생성합니다. 이 프롬프트는 요약 요청과 함께 원하는 JSON 출력 형식을 상세히 정의합니다.
5.OpenAI API 호출: client.chat.completions.create()를 호출하여 OpenAI 모델로부터 요약된 텍스트를 받습니다.
6.JSON 파싱 및 저장: OpenAI 응답에서 JSON 문자열을 추출하고 json.loads()를 사용하여 Python 딕셔너리로 변환합니다. 이 딕셔너리는 summaries 디렉토리에 [country_code]_market_summary_YYYY-MM-DD.json 파일로 저장됩니다.
7.예외 처리: 전체 main 함수는 try-except 블록으로 감싸져 있어, 실행 중 발생하는 예외를 catch하고 traceback을 출력하여 디버깅에 도움을 줍니다.
Python
def main(country_code: str): try: # ... (생략) ... target_date, curr_datetime_kr, start_date, now_ny = get_target_and_start_dates() # ... (생략) ... biz_raw = fetch_headlines_with_fallback("business", country_code, page_size=20) # ... (생략) ... if country_code == \'us\': # ... (미국 토픽 쿼리) ... else: # ... (한국 카테고리 쿼리) ... # ... (생략) ... all_articles = sorted(all_articles, key=lambda x: x["date"], reverse=True) # ... (생략) ... resp = client.chat.completions.create( model="o4-mini", messages=[system_msg, user_msg] ) summary_text = resp.choices[0].message.content # ... (생략) ... stock_market_summary_json = summary_json # ... (생략) ... with open(file_path, "w", encoding="utf-8") as f: json.dump(stock_market_summary_json, f, ensure_ascii=False, indent=2) # ... (생략) ... except Exception: print("❌ 예외 발생:") traceback.print_exc()
3.10. if __name__ == "__main__": 블록
이 블록은 스크립트가 직접 실행될 때 호출되는 부분입니다. 현재는 미국(us)과 한국(kr) 두 국가에 대해 main() 함수를 순회하며 실행합니다. 각 국가별 요약 생성 후에는 API rate limit을 고려하여 1초의 지연(time.sleep(1))을 둡니다. backend_api_send()와 reset_recommendations() 호출은 주석 처리되어 있습니다.
Python
if __name__=="__main__": for code in [\'us\', \'kr\']: try: main(code) # backend_api_send(code) # API rate limit 대비 지연 time.sleep(1) except Exception as e: print(f"Error building summary for {code}: {e}") # # recommendations 초기화 # reset_recommendations()
4. 사용 방법 및 설정 가이드
이 스크립트를 실행하기 위한 단계별 가이드와 필요한 설정에 대해 설명합니다.
4.1. 사전 준비 사항
1.Python 설치: Python 3.x 버전이 시스템에 설치되어 있어야 합니다.
2.필수 라이브러리 설치: 다음 명령어를 사용하여 필요한 Python 라이브러리를 설치합니다.
3.NewsAPI.org 계정 및 API 키: NewsAPI.org 웹사이트에서 계정을 생성하고 API 키를 발급받아야 합니다.
4.OpenAI 계정 및 API 키: OpenAI 웹사이트에서 계정을 생성하고 API 키를 발급받아야 합니다.
4.2. config.yaml 파일 설정
스크립트와 동일한 디렉토리에 config.yaml 파일을 생성하고, 발급받은 NewsAPI 및 OpenAI API 키를 다음과 같이 입력합니다. OPENAI_SEC_KEY와 NEWS_API_KEY는 실제 키 값으로 대체해야 합니다.
YAML
OPENAI_SEC_KEY: "YOUR_OPENAI_API_KEY_HERE" NEWS_API_KEY: "YOUR_NEWSAPI_API_KEY_HERE"
4.3. 스크립트 실행
터미널 또는 명령 프롬프트에서 스크립트가 있는 디렉토리로 이동한 후 다음 명령어를 실행합니다.
Bash
python make_summary.py
4.4. 실행 결과
스크립트가 성공적으로 실행되면, 현재 디렉토리에 summaries라는 새로운 디렉토리가 생성되고 그 안에 요약된 JSON 파일이 저장됩니다. 파일명은 [country_code]_market_summary_YYYY-MM-DD.json 형식입니다. 예를 들어, 2025년 7월 4일에 실행했다면 summaries/us_market_summary_2025-07-04.json 및 summaries/kr_market_summary_2025-07-04.json 파일이 생성됩니다.
4.5. SSL 인증서 설정 (선택 사항)
코드 내에서 verify="C:\Windows\Temp\LGCNS_CA_v3.crt"와 같이 특정 경로의 SSL 인증서 파일을 참조하는 부분이 있습니다. 만약 이 경로에 해당 인증서 파일이 없거나 SSL 관련 오류가 발생한다면, 다음 중 하나의 조치를 취해야 합니다.
•인증서 파일 확보: 지정된 경로에 LGCNS_CA_v3.crt 파일을 배치합니다.
•인증서 검증 비활성화 (권장하지 않음): 보안 위험을 감수하고 SSL 인증서 검증을 완전히 비활성화하려면, requests.get() 호출 시 verify=False로 변경하거나 urllib3.disable_warnings() 호출을 제거하고 requests 호출 시 verify=False를 명시적으로 추가합니다. 이 방법은 보안상 취약점을 야기할 수 있으므로 프로덕션 환경에서는 권장되지 않습니다.
4.6. 백엔드 API 연동 활성화 (선택 사항)
만약 생성된 JSON 파일을 외부 백엔드 서버로 업로드하거나 추천 시스템을 초기화하는 기능을 사용하고 싶다면, if __name__ == "__main__": 블록 내의 해당 함수 호출 주석을 해제해야 합니다.
Python
if __name__=="__main__": for code in [\'us\', \'kr\']: try: main(code) backend_api_send(code) # 이 줄의 주석을 해제 time.sleep(1) except Exception as e: print(f"Error building summary for {code}: {e}") reset_recommendations() # 이 줄의 주석을 해제
5. 결론
make_summary.py 스크립트는 NewsAPI와 OpenAI를 효과적으로 결합하여 금융 시장 뉴스를 자동으로 수집, 요약 및 저장하는 강력한 도구입니다. 이 문서는 스크립트의 주요 기능, 데이터 흐름, 코드 구조 및 사용 방법을 상세히 설명하여 사용자가 프로그램을 이해하고 활용하는 데 필요한 정보를 제공합니다. 적절한 API 키 설정과 의존성 설치를 통해 이 스크립트를 즉시 실행하고 시장 분석에 활용할 수 있습니다.
4. 데이터 흐름 다이어그램
다음 다이어그램은 make_summary.py 스크립트의 주요 데이터 흐름을 시각적으로 보여줍니다.

5. 사용 방법 및 설정 가이드
이 스크립트를 실행하기 위한 단계별 가이드와 필요한 설정에 대해 설명합니다.
5.1. 사전 준비 사항
1.Python 설치: Python 3.x 버전이 시스템에 설치되어 있어야 합니다.
2.필수 라이브러리 설치: 다음 명령어를 사용하여 필요한 Python 라이브러리를 설치합니다.
3.NewsAPI.org 계정 및 API 키: NewsAPI.org 웹사이트에서 계정을 생성하고 API 키를 발급받아야 합니다.
4.OpenAI 계정 및 API 키: OpenAI 웹사이트에서 계정을 생성하고 API 키를 발급받아야 합니다.
5.2. config.yaml 파일 설정
스크립트와 동일한 디렉토리에 config.yaml 파일을 생성하고, 발급받은 NewsAPI 및 OpenAI API 키를 다음과 같이 입력합니다. OPENAI_SEC_KEY와 NEWS_API_KEY는 실제 키 값으로 대체해야 합니다.
YAML
OPENAI_SEC_KEY: "YOUR_OPENAI_API_KEY_HERE" NEWS_API_KEY: "YOUR_NEWSAPI_API_KEY_HERE"
5.3. 스크립트 실행
터미널 또는 명령 프롬프트에서 스크립트가 있는 디렉토리로 이동한 후 다음 명령어를 실행합니다.
Bash
python make_summary.py
5.4. 실행 결과
스크립트가 성공적으로 실행되면, 현재 디렉토리에 summaries라는 새로운 디렉토리가 생성되고 그 안에 요약된 JSON 파일이 저장됩니다. 파일명은 [country_code]_market_summary_YYYY-MM-DD.json 형식입니다. 예를 들어, 2025년 7월 4일에 실행했다면 summaries/us_market_summary_2025-07-04.json 및 summaries/kr_market_summary_2025-07-04.json 파일이 생성됩니다.
5.5. SSL 인증서 설정 (선택 사항)
코드 내에서 verify="C:\Windows\Temp\LGCNS_CA_v3.crt"와 같이 특정 경로의 SSL 인증서 파일을 참조하는 부분이 있습니다. 만약 이 경로에 해당 인증서 파일이 없거나 SSL 관련 오류가 발생한다면, 다음 중 하나의 조치를 취해야 합니다.
•인증서 파일 확보: 지정된 경로에 LGCNS_CA_v3.crt 파일을 배치합니다.
•인증서 검증 비활성화 (권장하지 않음): 보안 위험을 감수하고 SSL 인증서 검증을 완전히 비활성화하려면, requests.get() 호출 시 verify=False로 변경하거나 urllib3.disable_warnings() 호출을 제거하고 requests 호출 시 verify=False를 명시적으로 추가합니다. 이 방법은 보안상 취약점을 야기할 수 있으므로 프로덕션 환경에서는 권장되지 않습니다.
5.6. 백엔드 API 연동 활성화 (선택 사항)
만약 생성된 JSON 파일을 외부 백엔드 서버로 업로드하거나 추천 시스템을 초기화하는 기능을 사용하고 싶다면, if __name__ == "__main__": 블록 내의 해당 함수 호출 주석을 해제해야 합니다.
Python
if __name__=="__main__": for code in [\"us\", \"kr\"]: try: main(code) backend_api_send(code) # 이 줄의 주석을 해제 time.sleep(1) except Exception as e: print(f\"Error building summary for {code}: {e}\") reset_recommendations() # 이 줄의 주석을 해제
6. 결론
make_summary.py 스크립트는 NewsAPI와 OpenAI를 효과적으로 결합하여 금융 시장 뉴스를 자동으로 수집, 요약 및 저장하는 강력한 도구입니다. 이 문서는 스크립트의 주요 기능, 데이터 흐름, 코드 구조 및 사용 방법을 상세히 설명하여 사용자가 프로그램을 이해하고 활용하는 데 필요한 정보를 제공합니다. 적절한 API 키 설정과 의존성 설치를 통해 이 스크립트를 즉시 실행하고 시장 분석에 활용할 수 있습니다.
반응형
'AI주식자동매매' 카테고리의 다른 글
미국 주식시장 뉴스API를 통한 Daily 증시 시황정리 프로그램 (2) | 2025.06.03 |
---|---|
뉴스요약 시스템 구축 (0) | 2025.06.02 |
ImportError: DLL load failed while importing QtWidgets (4) | 2024.10.12 |
GPT 4o Vision 활용하기(3) (3) | 2024.10.06 |
GPT 4o Vision 활용하기(2) (0) | 2024.10.06 |
댓글()