import io import tempfile import os import streamlit as st from markitdown import MarkItDown st.set_page_config( page_title="MarkItDown", page_icon="๐Ÿ“„", layout="wide", ) st.title("๐Ÿ“„ MarkItDown") st.caption("ํŒŒ์ผ์„ Markdown์œผ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค") SUPPORTED_EXTENSIONS = [ "pdf", "docx", "pptx", "xlsx", "xls", "jpg", "jpeg", "png", "mp3", "wav", "html", "htm", "csv", "json", "xml", "ipynb", "epub", "zip", "msg", ] # Sidebar with st.sidebar: st.header("์„ค์ •") show_preview = st.toggle("Markdown ๋ Œ๋”๋ง ๋ฏธ๋ฆฌ๋ณด๊ธฐ", value=True) st.divider() st.markdown("**์ง€์› ํฌ๋งท**") st.markdown( "PDF ยท DOCX ยท PPTX ยท XLSX ยท XLS\n\n" "JPG ยท PNG ยท MP3 ยท WAV\n\n" "HTML ยท CSV ยท JSON ยท XML\n\n" "IPYNB ยท EPUB ยท ZIP ยท MSG" ) # URL ๋ณ€ํ™˜ url_tab, file_tab = st.tabs(["URL ๋ณ€ํ™˜", "ํŒŒ์ผ ์—…๋กœ๋“œ"]) md = MarkItDown() with url_tab: url = st.text_input("URL ์ž…๋ ฅ", placeholder="https://example.com ๋˜๋Š” YouTube URL") if st.button("๋ณ€ํ™˜", key="url_btn", disabled=not url): with st.spinner("๋ณ€ํ™˜ ์ค‘..."): try: result = md.convert(url) st.session_state["url_result"] = result.text_content st.session_state["url_filename"] = "output.md" except Exception as e: st.error(f"๋ณ€ํ™˜ ์‹คํŒจ: {e}") if "url_result" in st.session_state: _content = st.session_state["url_result"] col1, col2 = st.columns([1, 1]) if show_preview else (st.container(), None) with col1: st.subheader("Markdown ์›๋ฌธ") st.code(_content, language="markdown") if show_preview and col2: with col2: st.subheader("๋ฏธ๋ฆฌ๋ณด๊ธฐ") st.markdown(_content) st.download_button( "โฌ‡๏ธ .md ํŒŒ์ผ ๋‹ค์šด๋กœ๋“œ", data=_content, file_name=st.session_state["url_filename"], mime="text/markdown", ) with file_tab: uploaded = st.file_uploader( "ํŒŒ์ผ์„ ๋Œ์–ด๋‹ค ๋†“๊ฑฐ๋‚˜ ํด๋ฆญํ•ด์„œ ์„ ํƒํ•˜์„ธ์š”", type=SUPPORTED_EXTENSIONS, ) if uploaded is not None: if st.button("๋ณ€ํ™˜", key="file_btn"): with st.spinner("๋ณ€ํ™˜ ์ค‘..."): try: suffix = os.path.splitext(uploaded.name)[1] with tempfile.NamedTemporaryFile(delete=False, suffix=suffix) as tmp: tmp.write(uploaded.getvalue()) tmp_path = tmp.name result = md.convert(tmp_path) os.unlink(tmp_path) st.session_state["file_result"] = result.text_content st.session_state["file_filename"] = os.path.splitext(uploaded.name)[0] + ".md" except Exception as e: st.error(f"๋ณ€ํ™˜ ์‹คํŒจ: {e}") if "file_result" in st.session_state: _content = st.session_state["file_result"] if show_preview: col1, col2 = st.columns([1, 1]) with col1: st.subheader("Markdown ์›๋ฌธ") st.code(_content, language="markdown") with col2: st.subheader("๋ฏธ๋ฆฌ๋ณด๊ธฐ") st.markdown(_content) else: st.subheader("Markdown ์›๋ฌธ") st.code(_content, language="markdown") st.download_button( "โฌ‡๏ธ .md ํŒŒ์ผ ๋‹ค์šด๋กœ๋“œ", data=_content, file_name=st.session_state["file_filename"], mime="text/markdown", )