A modular and extensible Python library to fetch video stream URLs and metadata from various platforms.
Project description
TubeFetcherLib
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
loggingdo 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:
- Faça um fork do repositório.
- Crie uma nova branch para sua feature (
git checkout -b feature/AmazingFeature). - Faça suas alterações e certifique-se de que os testes passem.
- Commite suas alterações (
git commit -m 'Add some AmazingFeature'). - Envie para a branch (
git push origin feature/AmazingFeature). - 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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cc66288be6c60adeb083f8edb5f8b7d09770af70bacf28fadd6c76d6f39c6aca
|
|
| MD5 |
c64568dbf0bc319e3e8c796b8425f7ee
|
|
| BLAKE2b-256 |
ccd8ea8f4c54105f1ed53df2b71ef5f7c10ac3616a85b216bcef483a2c895a0c
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
82a516cbe44d487e729e8c20414df80bae872d28453abe9c8b5eddd6505cb01c
|
|
| MD5 |
b1de35152aff50de2ee332dedf771202
|
|
| BLAKE2b-256 |
1bc48a0e75063147be6205dc23646992fb8f6f98a1ed47f531a5b2a11e2f7ce0
|