반응형
import os
import requests
from jinja2 import Template
from dotenv import load_dotenv
import ssl
# SSL 컨텍스트 설정 (인증서 검증 우회)
ssl._create_default_https_context = ssl._create_unverified_context
def fetch_stock_data(api_key, symbol='SPY'):
"""Alpha Vantage API로 주식 데이터 가져오기"""
try:
url = f'https://www.alphavantage.co/query?function=TIME_SERIES_DAILY&symbol={symbol}&apikey={api_key}'
response = requests.get(url).json()
daily_data = response['Time Series (Daily)']
latest_date = list(daily_data.keys())[0] # 최근 거래일 선택
return {
'date': latest_date,
'open': daily_data[latest_date]['1. open'],
'close': daily_data[latest_date]['4. close'],
'volume': daily_data[latest_date]['5. volume']
}
except Exception as e:
print(f"데이터 수집 오류: {e}")
return None
def generate_report(stock_data):
"""Jinja2 템플릿 기반 리포트 생성"""
template = Template('''
{{date}} 미국 주식 시장 분석 리포트
📊 주요 지표:
- 시가: ${{open}}
- 종가: ${{close}}
- 거래량: {{volume}} 주
{% if close|float > open|float %}
📈 상승 마감: 전일 대비 {{ ((close|float - open|float)/open|float * 100)|round(2) }}% 상승
{% else %}
📉 하락 마감: 전일 대비 {{ ((open|float - close|float)/open|float * 100)|round(2) }}% 하락
{% endif %}
''')
return template.render(**stock_data)
def post_to_blog(stock_data, content):
"""WordPress API로 포스팅"""
try:
response = requests.post(
f'https://{os.getenv("WP_DOMAIN")}/wp-json/wp/v2/posts',
auth=(os.getenv('WP_USER'), os.getenv('WP_PASSWORD')),
json={
'title': f"{stock_data['date']} 주식 시장 분석",
'content': content,
'status': 'publish'
},
verify=False # SSL 검증 임시 해제
)
return response.status_code == 201
except requests.exceptions.SSLError:
print("SSL 인증서 문제 발생: 워드프레스 도메인을 확인하세요")
return False
if __name__ == "__main__":
load_dotenv() # .env 파일 로드
# 데이터 처리 파이프라인
if stock_data := fetch_stock_data(os.getenv('ALPHA_VANTAGE_KEY')):
report_content = generate_report(stock_data)
if post_to_blog(stock_data, report_content):
print("성공적으로 게시되었습니다")
else:
print("게시 실패 - 서버 설정 확인 필요")
반응형