| import streamlit as st |
| import streamlit.components.v1 as components |
| from bs4 import BeautifulSoup |
| import markdown |
| import re |
|
|
| |
| st.set_page_config( |
| page_title="Lexical Tools", |
| page_icon="⚡", |
| layout="centered", |
| initial_sidebar_state="expanded" |
| ) |
|
|
| |
| st.sidebar.title("Navigation") |
| query_params = st.query_params |
| default_index = 1 if query_params.get("mode") == "downloader" else 0 |
|
|
| app_mode = st.sidebar.radio( |
| "Choose Tool:", |
| ["Webmaster Toolkit", "YouTube Downloader"], |
| index=default_index |
| ) |
|
|
| |
| |
| |
| if app_mode == "YouTube Downloader": |
| |
| |
| |
|
|
| import os |
| import uuid |
| from fastapi import FastAPI |
| from fastapi.responses import FileResponse |
| import yt_dlp |
| import gradio as gr |
|
|
| OUTPUT_DIR = "downloads" |
| os.makedirs(OUTPUT_DIR, exist_ok=True) |
|
|
| app = FastAPI() |
|
|
|
|
| def download_mp3(youtube_url: str): |
| uid = str(uuid.uuid4()) |
| out_file = os.path.join(OUTPUT_DIR, f"{uid}.mp3") |
|
|
| ydl_opts = { |
| 'format': 'bestaudio/best', |
| 'outtmpl': out_file.replace('.mp3', '.%(ext)s'), |
| 'postprocessors': [{ |
| 'key': 'FFmpegExtractAudio', |
| 'preferredcodec': 'mp3', |
| 'preferredquality': '192', |
| }], |
| 'quiet': True, |
| 'noplaylist': True, |
| } |
|
|
| with yt_dlp.YoutubeDL(ydl_opts) as ydl: |
| ydl.download([youtube_url]) |
|
|
| return out_file |
|
|
|
|
| |
| @app.get("/mp3") |
| def mp3_api(url: str): |
| mp3_path = download_mp3(url) |
| return FileResponse(mp3_path, filename="audio.mp3", media_type="audio/mpeg") |
|
|
|
|
| |
| def ui_download(url): |
| mp3_path = download_mp3(url) |
| return mp3_path |
|
|
| ui = gr.Interface( |
| fn=ui_download, |
| inputs=gr.Textbox(label="YouTube URL"), |
| outputs=gr.File(label="Download MP3"), |
| title="YouTube → MP3 Converter", |
| description="Paste YouTube link and get MP3 audio" |
| ) |
|
|
|
|
| if __name__ == "__main__": |
| ui.launch(server_name="0.0.0.0", server_port=7860) |
|
|
| |
| |
| |
| |
| |
| |
| |
|
|
| |
| components.html(html_code, height=350) |
|
|
| |
| |
| |
| elif app_mode == "Webmaster Toolkit": |
| st.title("⚡ Webmaster's Toolkit") |
| |
| tab1, tab2 = st.tabs(["📝 Text Cleaner", "🖼️ Media Optimizer"]) |
| |
| with tab1: |
| st.write("Text Cleaner Active") |