From 711c28a8947072864b84e40fa1569c86490303d3 Mon Sep 17 00:00:00 2001 From: Leonardo Mortari Date: Fri, 1 Aug 2025 01:30:12 -0300 Subject: [PATCH] Adjusts --- docker-compose.yml | 11 +++++------ main.py | 36 ++++++++++++++++++------------------ 2 files changed, 23 insertions(+), 24 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 659ae82..04e52bd 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -12,9 +12,8 @@ services: - .:/app environment: - PYTHONUNBUFFERED=1 - networks: - - dokploy-network - -networks: - dokploy-network: - external: true + # networks: + # - dokploy-network +# networks: +# dokploy-network: +# external: true diff --git a/main.py b/main.py index 97b275d..e767214 100644 --- a/main.py +++ b/main.py @@ -1,7 +1,8 @@ from typing import Optional from fastapi import FastAPI, HTTPException, Query -from youtube_transcript_api import YouTubeTranscriptApi, \ - TranscriptsDisabled, NoTranscriptFound +from youtube_transcript_api import YouTubeTranscriptApi +from youtube_transcript_api.formatters import SRTFormatter +from youtube_transcript_api._errors import TranscriptsDisabled, NoTranscriptFound from yt_dlp import YoutubeDL app = FastAPI( @@ -11,12 +12,9 @@ app = FastAPI( def extract_video_id(url: str) -> str: import re - match = re.search(r"(?:v=|youtu\.be/)([A-Za-z0-9_-]{11})", url) - if not match: raise ValueError("URL inválida do YouTube") - return match.group(1) @app.get("/get-transcript") @@ -32,23 +30,27 @@ def get_transcript( except ValueError as e: raise HTTPException(status_code=400, detail=str(e)) else: - video_id = videoId + video_id = videoId + try: - transcript_list = YouTubeTranscriptApi.get_transcript(video_id, languages=['pt', 'en']) - except TranscriptsDisabled: - raise HTTPException(status_code=404, detail="Transcrição desativada para este vídeo") - except NoTranscriptFound: - raise HTTPException(status_code=404, detail="Nenhuma transcrição encontrada") - except Exception as e: - raise HTTPException(status_code=500, detail=f"Erro ao obter transcrição: {e}") + ytt_api = YouTubeTranscriptApi() + result = ytt_api.fetch(video_id, languages=['pt']) + formatter = SRTFormatter() + + if not result: + raise NoTranscriptFound("Nenhuma transcrição encontrada para este vídeo") + except TranscriptsDisabled: + raise HTTPException(status_code=404, error="Transcrição desativada para este vídeo") + except NoTranscriptFound: + raise HTTPException(status_code=404, error="Nenhuma transcrição encontrada") + except Exception as e: + raise HTTPException(status_code=500, error=f"Erro ao obter transcrição: {e}") - full_text = " ".join(item["text"] for item in transcript_list) return { "video_id": video_id, - "transcript": transcript_list, - "full_text": full_text + "transcript": formatter.format_transcript(result), } @app.get("/get-video-metadata") @@ -79,5 +81,3 @@ def get_video_metadata( raise HTTPException(status_code=500, detail=f"Erro ao extrair metadata: {e}") return info - -# Para executar via: uvicorn main:app --reload --host 0.0.0.0 --port 8000