Spaces:
Running
Running
File size: 1,585 Bytes
c6f2536 466968e 5b9992a adb03d1 466968e aa1df32 466968e adb03d1 466968e adb03d1 28868d4 466968e adb03d1 c6f2536 ab498f8 3befc55 c6f2536 adb03d1 5b9992a 466968e adb03d1 5b9992a 466968e 5b9992a c6f2536 466968e |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
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)
|