import subprocess # 필요한 라이브러리 설치 및 업데이트 subprocess.run(["pip", "install", "--upgrade", "pip"]) subprocess.run(["pip", "install", "--upgrade", "openai", "yfinance", "gradio", "matplotlib", "Pillow"]) import os import matplotlib.font_manager as fm import matplotlib.pyplot as plt import yfinance as yf import numpy as np import re # 한글, 숫자, 기호를 남기기 위한 정규 표현식에 사용 import gradio as gr import io from PIL import Image from datetime import datetime, timedelta from openai import OpenAI # ... (중간 코드는 그대로 유지) # Gradio 인터페이스 생성 (3열 레이아웃) with gr.Blocks() as demo: gr.Markdown("## 주가 그래프와 뉴스 요약") # CSS로 3열 뉴스 요약 타이틀이 달린 회색 네모 칸 생성 demo.css("#news_output_box { background-color: #f0f0f0; padding: 20px; }") with gr.Row(): with gr.Column(): # 입력값을 담을 첫 번째 열 input_value = gr.Textbox(label="종목명 또는 티커 입력", placeholder="예: SK바이오팜, AAPL") change_type = gr.Dropdown(choices=["상승", "하락"], label="상승 또는 하락 선택", value="상승") percent_change = gr.Textbox(label="변동 퍼센트 (%)", placeholder="예: 10", value="10") submit_btn = gr.Button("Submit") # 예제 (이전 레이아웃으로 복원) examples = [["SK바이오팜"], ["나스닥 시총 1위"], ["나스닥 헬스케어 시총 1위"], ["나스닥 바이오텍 시총 1위"], ["코스피 시총 1위"], ["코스닥 시총 1위"]] gr.Examples(examples=examples, inputs=[input_value]) with gr.Column(): # 그래프를 출력할 두 번째 열 plot = gr.Image(label="주가 그래프") date_dropdown = gr.Dropdown(label="조건에 해당하는 날짜 선택", choices=[]) with gr.Column(): # 뉴스 요약을 출력할 세 번째 열 # news_output을 gr.Markdown으로 변경, 빈 칸을 회색 배경으로 설정 news_output = gr.Markdown(label="뉴스 요약", value="", elem_id="news_output_box") # Submit 버튼 클릭 시 그래프 및 날짜 드롭다운 업데이트 submit_btn.click( fn=display_stock_with_highlight, inputs=[input_value, change_type, percent_change], outputs=[plot, date_dropdown] ) # 날짜 선택 시 뉴스 요약 업데이트 date_dropdown.change( fn=update_news, inputs=[input_value, date_dropdown], outputs=[news_output] ) # Gradio 실행 demo.launch()