Rivalcoder
eDIT
466968e
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)