Este projeto, construído em Python, é o backend do projeto MOVIE-SEARCH. Está dividido em duas partes/etapas:
-
Ingestão de Dados
- Scripts contendo o processo de ingestão dos dados do IMDB Dataset para o MongoDB.
- Dados divididos em dois conjuntos principais:
- Title Basics (id + metadados dos filmes: ano, título, duração, gêneros, etc)
- Title Ratings (id + avaliações da comunidade)
-
Módulo API
- API RESTful para servir dados de filmes e avaliações
- Endpoints para busca e filtragem avançada
- Integração com serviços externos (Spotify, OpenAI)
- Recursos para:
- Busca de filmes por diversos critérios
- Gerenciamento de favoritos
- Geração de reviews usando IA
- Recomendações personalizadas
- Integração com playlists do Spotify
São scripts ETL (Extract, Transform, Load) que processam em batelada os dados do IMDB Dataset para alimentar a base de consulta no MongoDB. Os dados são divididos em duas coleções:
- Metadados essenciais dos filmes:
- 🎬 Título original e alternativo
- 📅 Ano de lançamento
- ⏱️ Duração
- 🎭 Gêneros
- 📝 Descrição
- 🎯 Tipo de mídia (filme, série, etc)
- Dados de avaliação da comunidade IMDB:
- ⭐ Média de avaliações
- 📊 Número de votos
- Extração: Leitura dos arquivos TSV do IMDB
- Transformação:
- Limpeza e formatação dos dados
- Validação de campos
- Estruturação para otimizar consultas
- Carga:
- Inserção otimizada no MongoDB
- Criação de índices para performance
- Validação de integridade
📌 Nota: Os scripts podem ser executados independentemente, mas recomenda-se primeiro carregar os dados básicos (Title Basics) seguido das avaliações (Title Ratings).
A documentação interativa da API está disponível através do Swagger UI:
- Acesse
/docs
após iniciar o servidor - Interface interativa para testar endpoints
- Documentação detalhada dos parâmetros e respostas
- Exemplos de uso para cada rota
-
Acesse a documentação Swagger em
http://localhost:5001/docs
-
Localize o endpoint que deseja testar (ex:
/movies/search
) -
Para testar o endpoint de busca de filmes:
- Clique no endpoint
/movies/search
- Clique no botão "Try it out"
- No corpo da requisição (Request body), insira um JSON com os parâmetros desejados:
{ "filters": { "startYear": {"$gt": 1990} }, "page": 1, "page_size": 10, "search_term": "Matrix" }
- Clique em "Execute" para enviar a requisição
- Os resultados aparecerão abaixo, incluindo:
- Código de resposta
- Headers da resposta
- Corpo da resposta
- Curl command equivalente
- Clique no endpoint
-
Exemplos de filtros úteis:
// Buscar filmes após 1990 {"filters": {"startYear": {"$gt": 1990}}} // Buscar filmes com termo específico {"search_term": "Matrix"} // Buscar com paginação {"page": 2, "page_size": 20}
Crie e ative um ambiente virtual e instale as dependências:
# Para o data_ingestion
cd data_ingestion
python -m venv venv # criar ambiente virtual
source venv/bin/activate # No Windows: venv\Scripts\activate # ativar ambiente virtual
pip install -r requirements.txt # instalar dependências
# Para a API (em outro terminal)
cd api
python -m venv venv
source venv/bin/activate # No Windows: venv\Scripts\activate
pip install -r requirements.txt
Configure as variáveis de ambiente: crie um arquivo .env na raiz do projeto com as variáveis de ambiente necessárias (env.example).
# No diretório data_ingestion/
python ingest.title_basics.py # Carrega metadados dos filmes
python ingest.title_ratings.py # Carrega avaliações
# No diretório api/
python app.py
A API estará disponível em http://localhost:5001
📌 Nota: Certifique-se de que a ingestão de dados foi concluída antes de subir a API.
Flask: framework web para a construção da API.
Flask-RESTX: Extensão para APIs RESTful com Swagger UI integrado.
MongoDB: Banco de dados NoSQL para armazenar as informações dos filmes.
pandas: Biblioteca para manipulação e análise de dados.
pymongo: Biblioteca para interação com MongoDB.
OpenAI: Biblioteca para interação com a API da OpenAI.
Spotify: Biblioteca para interação com a API do Spotify.
📁 ./
├── 📄 README.md
├── 📁 assets/
├── 📄 swagger.png
├── 📁 api/
│ ├── 📄 app.py
│ ├── 📄 config.py
│ ├── 📁 favorites/
│ │ ├── 📄 controller.py
│ │ ├── 📄 routes.py
│ │ └── 📄 scrapper.py
│ ├── 📁 generate_review/
│ │ ├── 📄 controller.py
│ │ └── 📄 routes.py
│ ├── 📁 movies/
│ │ ├── 📄 controller.py
│ │ └── 📄 routes.py
│ ├── 📄 requirements.txt
│ ├── 📁 spotify/
│ │ └── 📄 controller.py
│ ├── 📁 suggestion/
│ │ ├── 📄 controller.py
│ │ └── 📄 routes.py
│ ├── 📄 utils.py
│ └── 📁 write_review/
│ ├── 📄 controller.py
│ └── 📄 routes.py
└── 📁 data_ingestion/
├── 📄 ingest.title_basics.py
└── 📄 requirements.txt