File size: 2,180 Bytes
47cb94a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
58
59
60
61
62
import os
from googleapiclient.discovery import build

# Obter a chave da API
YOUTUBE_API_KEY = os.getenv("YOUTUBE_API_KEY")
if not YOUTUBE_API_KEY:
    raise ValueError("A chave da API do YouTube não foi encontrada nas variáveis de ambiente.")

# Inicializar o cliente YouTube
def get_youtube_client(chave_api):
    return build("youtube", "v3", developerKey=chave_api)

youtube_client = get_youtube_client(YOUTUBE_API_KEY)

def pesquisar_videos_youtube(consulta, num_resultados=5):
    """

    Pesquisa vídeos no YouTube e retorna os resultados, excluindo Shorts.



    Args:

        consulta (str): A consulta de pesquisa.

        num_resultados (int, opcional): Número máximo de vídeos. Padrão: 5.



    Returns:

        list: Lista de dicionários contendo título, descrição, URL e canal.

    """
    try:
        requisicao = youtube_client.search().list(
            part="snippet",
            maxResults=num_resultados * 2,  # Solicita mais para compensar filtros
            q=consulta,
            type="video",
            videoDuration="medium",  # Filtra vídeos com pelo menos 4 minutos
            order="relevance"
        )
        resposta = requisicao.execute()
    except Exception as e:
        print(f"Erro ao buscar vídeos no YouTube: {e}")
        return []

    videos = []
    for item in resposta.get("items", []):
        if item["id"]["kind"] == "youtube#video":
            titulo = item["snippet"]["title"]
            descricao = item["snippet"]["description"]
            url = f"https://www.youtube.com/watch?v={item['id']['videoId']}"
            canal = item["snippet"]["channelTitle"]

            # Remover Shorts pelo título e descrição
            if "Shorts" not in titulo and "Shorts" not in descricao:
                videos.append({
                    "Título": titulo,
                    "Descrição": descricao,
                    "URL": url,
                    "Canal": canal
                })

            # Para evitar retornar menos vídeos do que o necessário
            if len(videos) >= num_resultados:
                break

    return videos