Skip to content

gaab0418/SpotDown

MIT License Educational Purpose Python 3.9+ FastAPI Contributions Welcome

Spotify Downloader API

⚠️ AVISO IMPORTANTE: Este projeto é destinado EXCLUSIVAMENTE para fins educacionais e de aprendizado sobre Python e desenvolvimento de APIs. NÃO deve ser usado para download de conteúdo protegido por direitos autorais.

Uma API RESTful para estudo de download de músicas e playlists do Spotify, utilizando FastAPI e processamento paralelo para gerenciar downloads simultâneos.

🎓 Propósito Educacional

Este projeto foi desenvolvido com o objetivo de:

  • Aprender e demonstrar conceitos de desenvolvimento de APIs com Python
  • Explorar o uso de bibliotecas e ferramentas modernas do ecossistema Python
  • Estudar padrões de arquitetura de software e boas práticas
  • Experimentar com processamento paralelo e gerenciamento de filas
  • Compreender sistemas de autenticação e autorização

⚖️ Responsabilidade Legal: O usuário é responsável por garantir que qualquer uso deste código esteja em conformidade com as leis locais e termos de serviço das plataformas utilizadas.

🛠️ Tecnologias e Ferramentas Utilizadas

Backend & Framework

  • FastAPI - Framework web moderno e rápido para Python
  • Uvicorn - Servidor ASGI para aplicações Python
  • Pydantic - Validação de dados e configurações
  • SQLAlchemy - ORM para Python
  • PyMySQL - Driver MySQL para Python

Autenticação & Segurança

  • python-jose - Implementação JWT para Python
  • passlib - Biblioteca para hash de senhas
  • bcrypt - Função de hash criptográfica

Integração de APIs

  • Spotipy - Biblioteca cliente para API do Spotify
  • requests - Biblioteca HTTP para Python

Processamento de Mídia

  • yt-dlp - Ferramenta para download de vídeos/áudios
  • FFmpeg - Processamento e conversão de áudio (requisito externo)

Utilitários

  • python-dotenv - Carregamento de variáveis de ambiente
  • python-multipart - Suporte para dados multipart/form-data

Banco de Dados

  • MySQL - Sistema de gerenciamento de banco de dados

Características

  • 🎵 Sistema de estudo para download de faixas e playlists
  • 👥 Sistema de usuários com autenticação JWT
  • 🔄 Gerenciamento de fila de downloads com processamento paralelo
  • 📊 Acompanhamento de progresso em tempo real
  • 🧩 Extração automática de ID de URL do Spotify
  • 🔍 Busca integrada no Spotify
  • 🛡️ Sistema de permissões para usuários e administradores

Requisitos

  • Python 3.9+
  • MySQL
  • FFmpeg (para processamento de áudio)
  • Credenciais de API do Spotify (client_id e client_secret)

Instalação

  1. Clone o repositório:

    git clone https://github.com/gaab0418/SpotDown.git
    cd spotify-downloader-api
  2. Crie um ambiente virtual e ative-o:

    python -m venv venv
    source venv/bin/activate  # Linux/macOS
    # ou
    venv\Scripts\activate  # Windows
  3. Instale as dependências:

    pip install -r requirements.txt
  4. Configure o arquivo .env na raiz do projeto:

    # Configuração do MySQL
    MYSQL_HOST=<host> # Exemplo: localhost
    MYSQL_PORT=<porta> # Exemplo: 3306
    MYSQL_USER=<usuario> # Exemplo: root
    MYSQL_PASSWORD=<senha> # Exemplo: root
    MYSQL_DATABASE=<banco_de_dados> # Exemplo: musicDb
    
    # Configuração JWT
    JWT_SECRET_KEY=<chave> # Exemplo: He4l0W0rld
    
    # Configuração do Spotify
    SPOTIFY_CLIENT_ID=<client_id> # Exemplo: 123456789abcd0123456789abcd
    SPOTIFY_CLIENT_SECRET=<client_secret> # Exemplo: 123456789abcd0123456789abcd
    SPOTIFY_REDIRECT_URI=<redirect_uri> # Exemplo: http://127.0.0.1:8888/callback
    
    # Configuração da API
    API_HOST=<host> # Exemplo: 0.0.0.0
    API_PORT=<porta> # Exemplo: 8801
    
    # Configuração de downloads
    DOWNLOAD_PATH=<caminho> # Exemplo: ./arqvs/download
    MAX_CONCURRENT_DOWNLOADS=<limite> # Exemplo: 10
    
  5. Crie o banco de dados MySQL:

    CREATE DATABASE musicDb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
  6. Execute a aplicação:

    python main.py

Primeiros Passos

  1. Acesse a documentação Swagger da API em: http://localhost:8801/docs

  2. Crie um usuário:

    curl -X POST "http://localhost:8801/users/" \
      -H "Content-Type: application/json" \
      -d '{"username": "seunome", "email": "seu@email.com", "password": "suasenha"}'
  3. Obtenha um token de acesso:

    curl -X POST "http://localhost:8801/token" \
      -H "Content-Type: application/x-www-form-urlencoded" \
      -d "username=seunome&password=suasenha"
  4. Configure suas credenciais do Spotify:

    curl -X POST "http://localhost:8801/spotify/config" \
      -H "Authorization: Bearer seu_token" \
      -H "Content-Type: application/json" \
      -d '{
        "client_id": "seu_client_id_spotify",
        "client_secret": "seu_client_secret_spotify",
        "redirect_uri": "http://127.0.0.1:8888/callback",
        "download_path": "./downloads"
      }'
  5. Inicie um download de teste:

    curl -X POST "http://localhost:8801/downloads" \
      -H "Authorization: Bearer seu_token" \
      -H "Content-Type: application/json" \
      -d '{
        "spotify_id": "id_da_musica_ou_playlist",
        "type": "track",
        "priority": 5
      }'

Estrutura do Projeto

spotify-downloader-api/
├── auth.py                # Autenticação e controle de acesso
├── config.py              # Configurações da aplicação
├── database.py            # Conexão com o banco de dados
├── download_queue.py      # Gerenciamento da fila de downloads
├── downloader.py          # Funções de download do Spotify
├── main.py                # Aplicação FastAPI principal
├── models.py              # Modelos SQLAlchemy e esquemas Pydantic
├── requirements.txt       # Dependências do projeto
├── .env                   # Variáveis de ambiente (não versionado)
├── .env.example           # Exemplo de configuração
├── README.md              # Documentação do projeto
├── LICENSE.md             # Licença
├── CONTRIBUTING.md        # Contribuições educacionais
├── SECURITY.md            # Informações de Segurança
└── CODE_OF_CONDUCT.md.md  # Guia de contribuição

Fluxo de Funcionamento

  1. O usuário autentica-se e recebe um token JWT
  2. O usuário configura suas credenciais do Spotify
  3. O usuário solicita um download de faixa ou playlist
  4. O download é adicionado à fila com uma prioridade
  5. O gerenciador de downloads processa os downloads em paralelo
  6. O usuário pode acompanhar o progresso do download
  7. Ao finalizar, o arquivo fica disponível para download

Endpoints Principais

Autenticação

  • POST /users/ - Criar novo usuário
  • POST /token - Obter token de acesso
  • GET /users/me - Dados do usuário atual

Spotify

  • POST /spotify/config - Configurar credenciais do Spotify
  • GET /spotify/config - Obter configuração atual
  • GET /search - Pesquisar no Spotify
  • POST /extract-id - Extrair ID do Spotify de uma URL

Downloads

  • POST /downloads - Iniciar novo download
  • GET /downloads - Listar downloads do usuário
  • GET /downloads/{download_id} - Status de um download específico
  • DELETE /downloads/{download_id} - Cancelar um download
  • GET /queue/status - Status da fila de downloads
  • GET /files/{file_path} - Baixar arquivo

Admin

  • GET /admin/users - Listar todos os usuários
  • PUT /admin/users/{user_id} - Atualizar usuário
  • DELETE /admin/users/{user_id} - Excluir usuário

📚 Conceitos Aprendidos

Este projeto demonstra diversos conceitos importantes:

  • Arquitetura de APIs REST com FastAPI
  • Autenticação JWT e controle de acesso
  • ORM com SQLAlchemy para interação com banco de dados
  • Processamento assíncrono e gerenciamento de filas
  • Integração com APIs externas (Spotify API)
  • Validação de dados com Pydantic
  • Middleware e CORS para aplicações web
  • Estruturação de projetos Python profissionais
  • Documentação automática com OpenAPI/Swagger

⚠️ Disclaimers Importantes

  • Este projeto é apenas para fins educacionais e de aprendizado
  • Não incentivamos ou apoiamos o uso para download de conteúdo protegido por direitos autorais
  • Os usuários são responsáveis por cumprir todas as leis aplicáveis e termos de serviço
  • Este projeto não tem afiliação oficial com o Spotify

🗒️ A fazer

  • Criar um frontend

Contribuições

Contribuições educacionais são bem-vindas! Por favor, leia o arquivo CODE_OF_CONDUCT.md para mais informações sobre como contribuir de forma educativa para este projeto.

Licença

Este projeto está licenciado sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.


Lembre-se: Este é um projeto educacional. Use-o para aprender sobre desenvolvimento Python, APIs e arquitetura de software. Sempre respeite os direitos autorais e termos de serviço das plataformas utilizadas.

About

No description, website, or topics provided.

Resources

License

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages