Skip to content

Site que agrega filmes em cartaz em algumas das diversas salas de cinema de Porto Alegre.

License

Notifications You must be signed in to change notification settings

sylvester-96/cinemaempoa

 
 

Repository files navigation

CINEMA EM POA

CINEMA EM POA é um portal agregador de filmes das casas de cinema de Porto Alegre.

Está rodando em https://cinemaempoa.com.br.

Home page do site - b4252b9c824a4ba5d068e40144ea8d7d6c79a74f

O conteúdo é agregado realizando web scrapping em quatro diferentes sites:

O projeto encoraja contribuições (veja Contribuições).

Desenvolvimento

O projeto é composto de dois módulos: scrapers/, que contém a lógica para coleção de dados e flask_backend/, onde fica o código do portal.

O projeto foi desenvolvido em Python 3.10 e funciona com qualquer versão superior.

A instalação recomendada é usando um ambiente virtual (venv).

python3 -m venv .venv
source .venv/bin/activate
pip3 install -r requirements.txt

O banco de dados utilizado é o sqlite3.

Após fazer suas alterações, rode os comandos abaixo no seu terminal para validar e formatar o código:

ruff check # roda o linter para código python
ruff format # roda o formatter para código python
djlint flask_backend/templates --lint --profile=jinja # roda o linter para os arquivos .html
djlint --reformat flask_backend/templates --format-css --format-js # roda o formatter para os arquivos .html

Opcionalmente, o pre-commit pode automatizar a formatação do código quando você rodar um git commit.

Para utilizá-lo, instale com:

pre-commit install

Rodando o projeto

Para rodar o portal, você vai precisar de três comando (todos rodados a partir da raíz do projeto):

flask --app flask_backend init-db # inicializa as tabelas no banco de dados
flask --app flask_backend seed-db # optional: popula o banco com dados iniciais
flask --app flask_backend run --debug # inicia o projeto em modo desenvolvimento

O projeto vai rodar em http://localhost:5000.

Se você rodou o comando para popular o banco de dados, vai ter um usuário admin criado com login: cinemaempoa e senha: 123123.

Você pode fazer login via http://localhost:5000/auth/login.

Utilizando os scrappers

Os scrappers podem ser disparados através da interface web na URL http://127.0.0.1:5000/screening/import, clicando no botão "Fazer Scrapping dos cinemas selecionados".

Alternativamente, os scrappers também podem ser rodados via linha de comandos, com o script

./cinemaempoa.py -h

usage: cinemaempoa [-h] [-b] [--deploy] [--date DATE] [-r ROOMS [ROOMS ...] | -j JSON]

Grab the schedule for Porto Alegre's finest features

options:
-h, --help            show this help message and exit
-b, --build           Builds scrapped json as an html file
--deploy              Saves generated html at docs/index.html - saves the old index file in YYYY-MM-DD.html format
--date DATE           Runs the scrapper as if the current date is the given YYYY-MM-DD value
-r ROOMS [ROOMS ...], --rooms ROOMS [ROOMS ...]
                        Filter specific rooms. Available: capitolio, sala-redencao, cinebancarios, paulo-amorim
-j JSON, --json JSON  JSON filepath to build index.html from

Para disparar os scrappers e conseguir os filmes em cartaz em formato json (que pode ser importado no portal), rode o comando com a flag r, listando as salas de cinema desejadas, e direcione a saída para um arquivo.

./cinemaempoa.py -r capitolio sala-redencao cinebancarios paulo-amorim > import.json

Você pode inspecionar o arquivo import.json resultante para entender melhor a estrutura de saída dos scrappers.

Importando dados no portal

Caso você tenha rodado os scrappers via linha de comando, você vai precisar importar o arquivo .json resultante no portal.

Após logar, vá para a página http://localhost:5000/screening/import.

Lá, selecione o arquivo gerado na etapa anterior e clique em Enviar.

As sessões importadas vão estar disponíveis na home.

Contribuições

Veja nossos issues pra entender o que está sendo feito no projeto.

Implementações mais simples estão marcadas com good first issue.

Deploy (produção)

Atualmente o projeto (em https://cinemaempoa.com.br) está hospedado em uma máquina virtual no hetzner.

Os arquivos usados para o deployment são:

  • .env (deve ser criado a partir do example.env).
  • docker-compose.production.yml
  • Dockerfile.prod

A cada novo merge no branch principal, eu entro na máquina virtual, puxo as alterações e depois reinicio o servidor.

About

Site que agrega filmes em cartaz em algumas das diversas salas de cinema de Porto Alegre.

Resources

License

Code of conduct

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • CSS 44.5%
  • HTML 38.2%
  • Python 16.6%
  • JavaScript 0.7%