import gradio as gr from fastapi import FastAPI, Request from youtube_transcript_api import YouTubeTranscriptApi from youtube_transcript_api.proxies import WebshareProxyConfig from pydantic import BaseModel # FastAPI app app = FastAPI() # Initialize YouTubeTranscriptApi with proxy ytt_api = YouTubeTranscriptApi( proxy_config=WebshareProxyConfig( proxy_username="tlaukrdr", # Replace with real credentials proxy_password="mc1aumn9xbhb" ) ) # API input schema class VideoIDInput(BaseModel): video_id: str # API Endpoint @app.post("/api/transcript") async def get_transcript(payload: VideoIDInput): try: transcript_obj = ytt_api.fetch(payload.video_id) full_text = " ".join([snippet.text for snippet in transcript_obj.snippets]) return {"transcript": full_text} except Exception as e: return {"error": str(e)}, 500 # Gradio function def fetch_transcript(video_id: str): try: transcript_obj = ytt_api.fetch(video_id) full_text = " ".join([snippet.text for snippet in transcript_obj.snippets]) return full_text except Exception as e: return f"Error fetching transcript: {str(e)}" # Gradio UI demo = gr.Interface( fn=fetch_transcript, inputs=gr.Textbox(label="Enter YouTube Video ID"), outputs=gr.Textbox(label="Transcript"), live=True, title="YouTube Transcript Fetcher" ) # Mount Gradio at root app = gr.mount_gradio_app(app, demo, path="/") # Run Locally if __name__ == "__main__": import uvicorn uvicorn.run(app, host="0.0.0.0", port=7860)