Spaces:
Running
Running
Update src/streamlit_app.py
Browse files- src/streamlit_app.py +41 -10
src/streamlit_app.py
CHANGED
|
@@ -96,19 +96,41 @@ menu = st.sidebar.radio(
|
|
| 96 |
["뉴스 기사 크롤링", "기사 분석하기", "새 기사 생성하기", "뉴스 기사 예약하기"]
|
| 97 |
)
|
| 98 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 99 |
# 저장된 기사를 불러오는 함수
|
| 100 |
def load_saved_articles():
|
| 101 |
-
|
| 102 |
-
|
| 103 |
-
|
| 104 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 105 |
return []
|
| 106 |
|
| 107 |
# 기사를 저장하는 함수
|
| 108 |
def save_articles(articles):
|
| 109 |
-
|
| 110 |
-
|
| 111 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 112 |
|
| 113 |
@st.cache_data
|
| 114 |
def crawl_naver_news(keyword, num_articles=5):
|
|
@@ -387,12 +409,21 @@ def perform_news_task(task_type, keyword, num_articles, file_prefix):
|
|
| 387 |
time.sleep(0.5) # 서버 부하 방지
|
| 388 |
|
| 389 |
# 결과 저장
|
| 390 |
-
|
|
|
|
|
|
|
|
|
|
| 391 |
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
|
| 392 |
filename = os.path.join(SCHEDULED_NEWS_DIR, f"{file_prefix}_{task_type}_{timestamp}.json")
|
| 393 |
|
| 394 |
-
|
| 395 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 396 |
|
| 397 |
global_scheduler_state.last_run = datetime.now()
|
| 398 |
print(f"{datetime.now()} - {task_type} 뉴스 기사 수집 완료: {keyword}")
|
|
|
|
| 96 |
["뉴스 기사 크롤링", "기사 분석하기", "새 기사 생성하기", "뉴스 기사 예약하기"]
|
| 97 |
)
|
| 98 |
|
| 99 |
+
# 디렉토리 생성 함수
|
| 100 |
+
def ensure_directory(directory):
|
| 101 |
+
try:
|
| 102 |
+
os.makedirs(directory, mode=0o777, exist_ok=True)
|
| 103 |
+
# 디렉토리 권한 설정
|
| 104 |
+
os.chmod(directory, 0o777)
|
| 105 |
+
except Exception as e:
|
| 106 |
+
st.error(f"디렉토리 생성 중 오류 발생: {str(e)}")
|
| 107 |
+
return False
|
| 108 |
+
return True
|
| 109 |
+
|
| 110 |
# 저장된 기사를 불러오는 함수
|
| 111 |
def load_saved_articles():
|
| 112 |
+
try:
|
| 113 |
+
ensure_directory(TMP_DIR)
|
| 114 |
+
if os.path.exists(SAVED_ARTICLES_PATH):
|
| 115 |
+
with open(SAVED_ARTICLES_PATH, 'r', encoding='utf-8') as f:
|
| 116 |
+
return json.load(f)
|
| 117 |
+
except Exception as e:
|
| 118 |
+
st.error(f"기사 로드 중 오류 발생: {str(e)}")
|
| 119 |
+
return []
|
| 120 |
return []
|
| 121 |
|
| 122 |
# 기사를 저장하는 함수
|
| 123 |
def save_articles(articles):
|
| 124 |
+
try:
|
| 125 |
+
ensure_directory(TMP_DIR)
|
| 126 |
+
with open(SAVED_ARTICLES_PATH, 'w', encoding='utf-8') as f:
|
| 127 |
+
json.dump(articles, f, ensure_ascii=False, indent=2)
|
| 128 |
+
# 파일 권한 설정
|
| 129 |
+
os.chmod(SAVED_ARTICLES_PATH, 0o666)
|
| 130 |
+
except Exception as e:
|
| 131 |
+
st.error(f"기사 저장 중 오류 발생: {str(e)}")
|
| 132 |
+
return False
|
| 133 |
+
return True
|
| 134 |
|
| 135 |
@st.cache_data
|
| 136 |
def crawl_naver_news(keyword, num_articles=5):
|
|
|
|
| 409 |
time.sleep(0.5) # 서버 부하 방지
|
| 410 |
|
| 411 |
# 결과 저장
|
| 412 |
+
if not ensure_directory(SCHEDULED_NEWS_DIR):
|
| 413 |
+
print(f"스케줄된 뉴스 디렉토리 생성 실패")
|
| 414 |
+
return
|
| 415 |
+
|
| 416 |
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
|
| 417 |
filename = os.path.join(SCHEDULED_NEWS_DIR, f"{file_prefix}_{task_type}_{timestamp}.json")
|
| 418 |
|
| 419 |
+
try:
|
| 420 |
+
with open(filename, 'w', encoding='utf-8') as f:
|
| 421 |
+
json.dump(articles, f, ensure_ascii=False, indent=2)
|
| 422 |
+
# 파일 권한 설정
|
| 423 |
+
os.chmod(filename, 0o666)
|
| 424 |
+
except Exception as e:
|
| 425 |
+
print(f"파일 저장 중 오류 발생: {e}")
|
| 426 |
+
return
|
| 427 |
|
| 428 |
global_scheduler_state.last_run = datetime.now()
|
| 429 |
print(f"{datetime.now()} - {task_type} 뉴스 기사 수집 완료: {keyword}")
|