Skip to main content

A modular and extensible Python library to fetch video stream URLs and metadata from various platforms.

Project description

TubeFetcherLib

Python Version License PyPI version

A TubeFetcherLib é uma biblioteca Python modular e extensível projetada para extrair URLs de stream de vídeo e metadados de várias plataformas, começando com YouTube e Instagram. O objetivo é fornecer uma interface unificada para acessar informações de vídeo de diferentes provedores, permitindo fácil expansão para novas fontes no futuro.

Funcionalidades

  • Extração de URL de Stream: Obtenha a URL direta do stream de vídeo para diferentes qualidades (quando disponível).
  • Extração de Metadados: Recupere informações detalhadas sobre o vídeo, como título, autor, duração, visualizações e URL da thumbnail.
  • Suporte a Múltiplos Provedores: Atualmente suporta YouTube e Instagram.
  • Design Extensível: Facilmente adiciona novos provedores de vídeo através de uma arquitetura baseada em Strategy Pattern.
  • Configuração Flexível: Gerenciamento centralizado de configurações como timeouts, retries e proxies.
  • Tratamento de Erros Robusto: Exceções personalizadas para diferentes cenários de falha.
  • Logging Integrado: Utiliza o módulo logging do Python para mensagens informativas e de depuração.

Instalação

Você pode instalar TubeFetcherLib via pip:

pip install tubefetcherlib

Uso

Extraindo URL de Stream e Informações do Vídeo

from tubefetcher import get_video_stream_url, get_video_info, get_available_qualities, StreamQuality, Config

# Exemplo de uso com YouTube
youtube_url = "https://www.youtube.com/watch?v=LXb3EKWsInQ" # Exemplo de vídeo de domínio público

try:
    # Obter a URL do stream na qualidade mais alta
    stream_url = get_video_stream_url(youtube_url, quality=StreamQuality.HIGHEST)
    print(f"YouTube Stream URL (Highest): {stream_url}")

    # Obter informações do vídeo
    video_info = get_video_info(youtube_url)
    print(f"YouTube Video Info: {video_info['title']} by {video_info['author']}")

    # Obter qualidades disponíveis
    available_qualities = get_available_qualities(youtube_url)
    print(f"YouTube Available Qualities: {[q.value for q in available_qualities]}")

except Exception as e:
    print(f"Erro ao processar vídeo do YouTube: {e}")

print("-" * 30)

# Exemplo de uso com Instagram (para conteúdo público)
# Note: O Instagram pode ter restrições de acesso sem autenticação.
instagram_url = "https://www.instagram.com/p/C71_y_1o_1o/" # Substitua por uma URL de vídeo real

try:
    # Obter a URL do stream (Instagram geralmente oferece apenas uma qualidade)
    stream_url_ig = get_video_stream_url(instagram_url)
    print(f"Instagram Stream URL: {stream_url_ig}")

    # Obter informações do vídeo
    video_info_ig = get_video_info(instagram_url)
    print(f"Instagram Video Info: {video_info_ig['title']} by {video_info_ig['author']}")

    # Obter qualidades disponíveis (Instagram geralmente retorna apenas HIGHEST)
    available_qualities_ig = get_available_qualities(instagram_url)
    print(f"Instagram Available Qualities: {[q.value for q in available_qualities_ig]}")

except Exception as e:
    print(f"Erro ao processar vídeo do Instagram: {e}")

print("-" * 30)

# Exemplo de uso com configurações personalizadas (para Instagram com credenciais)
# É ALTAMENTE RECOMENDADO usar variáveis de ambiente ou um gerenciador de segredos
# para credenciais em ambientes de produção.
# Ex: export INSTAGRAM_USERNAME="seu_usuario"
#     export INSTAGRAM_PASSWORD="sua_senha"

import os

my_username = os.environ.get("INSTAGRAM_USERNAME")
my_password = os.environ.get("INSTAGRAM_PASSWORD")

if my_username and my_password:
    custom_config = Config(
        instagram_session_dir="./sessions", # Onde salvar/carregar a sessão do Instaloader
        timeout=90,
        retries=10,
        proxies={"http": "http://your.proxy.com:8080", "https": "https://your.proxy.com:8080"}
    )
    
    try:
        print("Tentando acessar Instagram com credenciais...")
        stream_url_ig_auth = get_video_stream_url(
            instagram_url,
            instagram_username=my_username,
            instagram_password=my_password,
            config=custom_config
        )
        print(f"Instagram Stream URL (Authenticated): {stream_url_ig_auth}")
    except Exception as e:
        print(f"Erro ao processar vídeo do Instagram com credenciais: {e}")
else:
    print("Variáveis de ambiente INSTAGRAM_USERNAME e INSTAGRAM_PASSWORD não definidas. Pulando teste de autenticação do Instagram.")

Tratamento de Erros

A biblioteca levanta exceções personalizadas para diferentes cenários de erro:

  • VideoFetcherError: Classe base para todas as exceções da biblioteca.
  • VideoNotFoundError: Vídeo não encontrado ou indisponível.
  • ProviderAuthenticationError: Problemas de autenticação com o provedor (ex: Instagram).
  • StreamUnavailableError: O stream solicitado não está disponível.
  • UnsupportedQualityError: Qualidade de stream solicitada não suportada pelo provedor.
  • InvalidURLError: URL fornecida é inválida ou não pode ser processada por nenhum provedor conhecido.

Você deve envolver as chamadas da biblioteca em blocos try-except para lidar com esses erros.

from tubefetcher.exceptions import VideoNotFoundError, InvalidURLError

try:
    # ... seu código de uso da biblioteca ...
    pass
except VideoNotFoundError as e:
    print(f"O vídeo não foi encontrado: {e}")
except InvalidURLError as e:
    print(f"A URL fornecida é inválida: {e}")
except Exception as e:
    print(f"Ocorreu um erro inesperado: {e}")

Contribuição

Contribuições são bem-vindas! Se você deseja contribuir para o TubeFetcherLib, por favor, siga estas diretrizes:

  1. Faça um fork do repositório.
  2. Crie uma nova branch para sua feature (git checkout -b feature/AmazingFeature).
  3. Faça suas alterações e certifique-se de que os testes passem.
  4. Commite suas alterações (git commit -m 'Add some AmazingFeature').
  5. Envie para a branch (git push origin feature/AmazingFeature).
  6. Abra um Pull Request.

Licença

Este projeto está licenciado sob a Licença MIT - veja o arquivo LICENSE para detalhes.

Contato

Para dúvidas ou suporte, por favor, abra uma issue no repositório do GitHub.

Desenvolvido por: heyjunin

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

tubefetcherlib-0.1.0.tar.gz (12.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

tubefetcherlib-0.1.0-py3-none-any.whl (8.4 kB view details)

Uploaded Python 3

File details

Details for the file tubefetcherlib-0.1.0.tar.gz.

File metadata

  • Download URL: tubefetcherlib-0.1.0.tar.gz
  • Upload date:
  • Size: 12.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.3

File hashes

Hashes for tubefetcherlib-0.1.0.tar.gz
Algorithm Hash digest
SHA256 cc66288be6c60adeb083f8edb5f8b7d09770af70bacf28fadd6c76d6f39c6aca
MD5 c64568dbf0bc319e3e8c796b8425f7ee
BLAKE2b-256 ccd8ea8f4c54105f1ed53df2b71ef5f7c10ac3616a85b216bcef483a2c895a0c

See more details on using hashes here.

File details

Details for the file tubefetcherlib-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: tubefetcherlib-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 8.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.3

File hashes

Hashes for tubefetcherlib-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 82a516cbe44d487e729e8c20414df80bae872d28453abe9c8b5eddd6505cb01c
MD5 b1de35152aff50de2ee332dedf771202
BLAKE2b-256 1bc48a0e75063147be6205dc23646992fb8f6f98a1ed47f531a5b2a11e2f7ce0

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page