Metadata-Version: 2.4
Name: tubefetcherlib
Version: 0.1.0
Summary: A modular and extensible Python library to fetch video stream URLs and metadata from various platforms.
Author-email: heyjunin <your.email@example.com>
Project-URL: Homepage, https://github.com/heyjunin/tubefetcherlib
Project-URL: Bug Tracker, https://github.com/heyjunin/tubefetcherlib/issues
Keywords: youtube,instagram,video,stream,metadata,fetcher
Classifier: Programming Language :: Python :: 3
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Topic :: Multimedia :: Video
Requires-Python: >=3.8
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: pytubefix
Requires-Dist: instaloader
Requires-Dist: pytest
Dynamic: license-file

# TubeFetcherLib

![Python Version](https://img.shields.io/badge/python-3.8%2B-blue.svg)
![License](https://img.shields.io/badge/license-MIT-green.svg)
[![PyPI version](https://badge.fury.io/py/tubefetcherlib.svg)](https://badge.fury.io/py/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 `logging` do Python para mensagens informativas e de depuração.

## Instalação

Você pode instalar `TubeFetcherLib` via pip:

```bash
pip install tubefetcherlib
```

## Uso

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

```python
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.

```python
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](LICENSE) para detalhes.

## Contato

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

**Desenvolvido por:** heyjunin
