#app.py import gradio as gr import info_blog import travel_blog import product_blog # 래퍼 함수들 - 5개 반환값을 4개로 조정 def generate_info_blog_wrapper(query, style): try: html_result, ref1, ref2, ref3, char_count = info_blog.generate_blog_post(query, style) return html_result, ref1, ref2, ref3 except Exception as e: return f"
오류 발생: {str(e)}
", "오류", "오류", "오류" def generate_travel_blog_wrapper(query, style): try: html_result, ref1, ref2, ref3, char_count = travel_blog.generate_blog_post(query, style) return html_result, ref1, ref2, ref3 except Exception as e: return f"오류 발생: {str(e)}
", "오류", "오류", "오류" def generate_product_blog_wrapper(query, style): try: html_result, ref1, ref2, ref3, char_count = product_blog.generate_blog_post(query, style) return html_result, ref1, ref2, ref3 except Exception as e: return f"오류 발생: {str(e)}
", "오류", "오류", "오류" # Gradio 인터페이스 설계 def interface(): with gr.Blocks(theme=gr.themes.Soft()) as demo: # 대제목: 자동 블로그 포스팅 gr.Markdown("# 자동 블로그 포스팅", elem_classes="text-center text-2xl font-bold mb-6") # 첫 번째 탭: 일반정보 with gr.Tab("일반정보"): with gr.Row(): with gr.Column(scale=3): query_1 = gr.Textbox( label="키워드", placeholder="밤 껍질 까는 법, 강아지 메론, 옥수수 삶는 법, 운빨존많겜 티어, 하츄핑 테스트", elem_classes="text-lg" ) with gr.Column(scale=1): style_1 = gr.Radio( choices=['친근한', '일반적인', '전문적인'], label="포스팅 스타일", value='친근한', elem_classes="text-lg" ) generate_button_1 = gr.Button("블로그 글 생성", variant="primary", size="lg") blog_post_1 = gr.HTML(label="생성된 블로그 글") # 참고글 추가 with gr.Accordion("참고 글", open=False): reference_1 = gr.Textbox(label="참고글 1") reference_2 = gr.Textbox(label="참고글 2") reference_3 = gr.Textbox(label="참고글 3") # 수정된 버튼 클릭 이벤트 generate_button_1.click( generate_info_blog_wrapper, inputs=[query_1, style_1], outputs=[blog_post_1, reference_1, reference_2, reference_3] ) # 두 번째 탭: 여행 with gr.Tab("여행"): with gr.Row(): with gr.Column(scale=3): query_2 = gr.Textbox( label="키워드", placeholder="안동국제탈춤페스티벌, 2024금산인삼축제, 계룡 군 문화축제, 대전 성심당, 10월 경주 여행 코스, 부산 아이와 함께 가볼만한 곳, 10월 제주도 핑크뮬리", elem_classes="text-lg" ) with gr.Column(scale=1): style_2 = gr.Radio( choices=['친근한', '일반적인', '전문적인'], label="포스팅 스타일", value='친근한', elem_classes="text-lg" ) generate_button_2 = gr.Button("블로그 글 생성", variant="primary", size="lg") blog_post_2 = gr.HTML(label="생성된 블로그 글") # 참고글 추가 with gr.Accordion("참고 글", open=False): reference_4 = gr.Textbox(label="참고글 1") reference_5 = gr.Textbox(label="참고글 2") reference_6 = gr.Textbox(label="참고글 3") # 수정된 버튼 클릭 이벤트 generate_button_2.click( generate_travel_blog_wrapper, inputs=[query_2, style_2], outputs=[blog_post_2, reference_4, reference_5, reference_6] ) # 세 번째 탭: 상품리뷰 with gr.Tab("상품리뷰"): with gr.Row(): with gr.Column(scale=3): query_3 = gr.Textbox( label="키워드", placeholder="레노버 k10 pro, 갤럭시워치 울트라 스펙, 아이폰16 pro 추천, 다이소 방수팩, 여행용 샤워필터, 브롤스타즈 시리얼, 신라면 툼바", elem_classes="text-lg" ) with gr.Column(scale=1): style_3 = gr.Radio( choices=['친근한', '일반적인', '전문적인'], label="포스팅 스타일", value='친근한', elem_classes="text-lg" ) generate_button_3 = gr.Button("블로그 글 생성", variant="primary", size="lg") blog_post_3 = gr.HTML(label="생성된 블로그 글") # 참고글 추가 with gr.Accordion("참고 글", open=False): reference_7 = gr.Textbox(label="참고글 1") reference_8 = gr.Textbox(label="참고글 2") reference_9 = gr.Textbox(label="참고글 3") # 수정된 버튼 클릭 이벤트 generate_button_3.click( generate_product_blog_wrapper, inputs=[query_3, style_3], outputs=[blog_post_3, reference_7, reference_8, reference_9] ) # 푸터 추가 gr.Markdown("---") gr.Markdown("© 2025 자동 블로그 포스팅 시스템", elem_classes="text-center text-sm") return demo # 인터페이스 실행 if __name__ == "__main__": demo = interface() demo.launch(server_name="0.0.0.0", share=True, show_error=True)