{"id":23191573,"url":"https://github.com/vicktorms/rio_event_scraper","last_synced_at":"2025-04-05T06:44:00.476Z","repository":{"id":265799582,"uuid":"896649525","full_name":"VicktorMS/Rio_Event_Scraper","owner":"VicktorMS","description":null,"archived":false,"fork":false,"pushed_at":"2024-12-01T00:41:58.000Z","size":116,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-10T14:35:14.145Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/VicktorMS.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-11-30T23:33:05.000Z","updated_at":"2024-12-01T00:42:01.000Z","dependencies_parsed_at":"2024-12-03T09:15:17.970Z","dependency_job_id":null,"html_url":"https://github.com/VicktorMS/Rio_Event_Scraper","commit_stats":null,"previous_names":["vicktorms/rio_event_scraper"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/VicktorMS%2FRio_Event_Scraper","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/VicktorMS%2FRio_Event_Scraper/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/VicktorMS%2FRio_Event_Scraper/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/VicktorMS%2FRio_Event_Scraper/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/VicktorMS","download_url":"https://codeload.github.com/VicktorMS/Rio_Event_Scraper/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247299789,"owners_count":20916186,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-12-18T12:17:38.919Z","updated_at":"2025-04-05T06:44:00.440Z","avatar_url":"https://github.com/VicktorMS.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Event Scraper\n\nO **Event Scraper** é uma aplicação console desenvolvida em Python que coleta, armazena e permite a consulta de eventos culturais do Rio de Janeiro. Utilizando técnicas de scraping e uma interface de menu interativa, o projeto visa fornecer uma ferramenta eficiente para explorar eventos, suas datas, locais e outros metadados relevantes.\n\n---\n\n## 🚀 Funcionalidades\n\n- **Scraping de Dados**: Coleta informações de eventos diretamente de uma fonte online.\n- **Armazenamento de Dados**: Utiliza SQLite para armazenar dados de eventos e seus metadados.\n- **Interface de Menu**: Oferece uma interface interativa para executar scraping e realizar consultas.\n- **Consultas Avançadas**:\n  - Exibir todos os eventos.\n  - Mostrar os dois eventos mais próximos de iniciar.\n  - Listar eventos que ocorrem no Rio de Janeiro.\n  - Exibir eventos ao ar livre.\n  - Mostrar metadados por evento.\n- **Logs Detalhados**: Registra todas as operações para facilitar a depuração e monitoramento.\n\n---\n\n## 🛠️ Tecnologias Utilizadas\n\n- **Linguagem de Programação**: Python 3.12\n- **ORM**: Peewee\n- **Banco de Dados**: SQLite\n- **Bibliotecas de Scraping**: `requests`, `urlib`,`beautifulsoup4`\n- **Gerenciamento de Logs**: `logging`\n- **Ambiente Virtual**: `venv`\n\n---\n\n## ⚙️ Pré-requisitos\n\nAntes de começar, certifique-se de ter instalado as seguintes ferramentas em seu sistema:\n\n- **Python 3.12** ou superior\n- **Git** (para clonagem do repositório)\n- **Ambiente Virtual** (opcional, mas recomendado)\n\n---\n\n## 🔧 Instalação\n\n### 1. Clone o Repositório\n\nAbra o terminal e execute o seguinte comando para clonar o repositório:\n\n```bash\ngit clone https://github.com/VicktorMS/Rio_Event_Scraper.git\ncd Rio_Event_Scraper\n```\n\n### 2. Crie um Ambiente Virtual\n\nÉ recomendado utilizar um ambiente virtual para isolar as dependências do projeto.\n\n```bash\npython3 -m venv venv\n```\n\n### 3. Ative o Ambiente Virtual\n\n- **No Linux/macOS:**\n\n  ```bash\n  source venv/bin/activate\n  ```\n\n- **No Windows:**\n\n  ```bash\n  venv\\Scripts\\activate\n  ```\n\n### 4. Instale as Dependências\n\nCom o ambiente virtual ativado, instale as dependências necessárias:\n\n```bash\npip install -r requirements.txt\n```\n\n---\n\n## 📋 Estrutura do Projeto\n\nA seguir, uma visão geral da estrutura de diretórios e arquivos do projeto:\n\n```\nRio_Event_Scraper/\n├── src/\n│   ├── main.py\n│   ├── config.py\n│   ├── scraper/\n│   │   └── scraper.py\n│   ├── db/\n│   │   ├── database.py\n│   │   └── models/\n│   │       ├── event.py\n│   │       ├── event_data.py\n│   │       └── metadata.py\n│   ├── queries/\n│   │   └── database_queries.py\n│   └── menu/\n│       └── menu.py\n├── logs/\n│   └── scraper.log\n├── requirements.txt\n└── README.md\n```\n\n- **src/**: Contém todo o código fonte do projeto.\n  - **main.py**: Ponto de entrada da aplicação.\n  - **config.py**: Configurações do projeto, como caminhos de arquivos e URLs.\n  - **scraper/**: Módulo responsável por coletar dados de eventos.\n    - **scraper.py**: Implementação do scraper.\n  - **db/**: Configuração do banco de dados e modelos.\n    - **database.py**: Configuração da conexão com o banco de dados.\n    - **models/**: Definição dos modelos ORM.\n      - **event.py**: Modelo do Evento.\n      - **event_data.py**: Modelo dos Dados do Evento.\n      - **metadata.py**: Modelo de Metadados.\n  - **queries/**: Módulo contendo funções para consultas SQL.\n    - **database_queries.py**: Implementação das consultas.\n  - **menu/**: Implementação da interface de menu.\n    - **menu.py**: Classes e funções relacionadas ao menu interativo.\n- **logs/**: Diretório onde os logs da aplicação são armazenados.\n  - **scraper.log**: Arquivo de log principal.\n- **requirements.txt**: Lista de dependências do projeto.\n- **README.md**: Este arquivo de documentação.\n\n---\n\n## 🎯 Como Utilizar\n\n### 1. Ative o Ambiente Virtual\n\nCaso ainda não tenha ativado o ambiente virtual, faça-o agora:\n\n- **No Linux/macOS:**\n\n  ```bash\n  source venv/bin/activate\n  ```\n\n- **No Windows:**\n\n  ```bash\n  venv\\Scripts\\activate\n  ```\n\n### 2. Execute a Aplicação\n\nCom o ambiente virtual ativo, inicie a aplicação executando o módulo `main.py`:\n\n```bash\npython3 -m src.main\n```\n\n### 3. Interaja com o Menu\n\nAo iniciar, você verá o seguinte menu no console:\n\n```\n=== Menu Principal ===\n1. Executar Scraper\n2. Mostrar Todos os Eventos\n3. Mostrar os 2 Eventos Mais Próximos de Iniciar\n4. Mostrar Eventos no Rio de Janeiro\n5. Mostrar Eventos ao Ar Livre\n6. Mostrar Metadados por Evento\n7. Ver Logs\n8. Sair\n=======================\nSelecione uma opção:\n```\n\n#### 3.1. Executando o Scraper\n\n**Opção 1: Executar Scraper**\n\nEsta opção coleta dados de eventos a partir da fonte especificada e os armazena no banco de dados.\n\n**Exemplo de Uso:**\n\n```\nSelecione uma opção: 1\n```\n\n**Saída Esperada:**\n\n```\nIniciando scraping...\nScraping concluído. Retornando ao menu principal.\n```\n\n#### 3.2. Mostrar Todos os Eventos\n\n**Opção 2: Mostrar Todos os Eventos**\n\nExibe uma lista completa de todos os eventos armazenados, incluindo datas, localizações e tipos.\n\n**Exemplo de Uso:**\n\n```\nSelecione uma opção: 2\n```\n\n**Saída Esperada:**\n\n```\n--- Todos os Eventos ---\nNome: Festival de Música\nTipo: Música\nDescrição: Festival anual de música ao vivo.\nData: 2024-12-20\nLocalização: Parque Central\n---------------------------\nNome: Exposição de Arte Moderna\nTipo: Arte\nDescrição: Exposição de obras contemporâneas.\nData: 2024-12-25\nLocalização: Museu de Arte do Rio\n---------------------------\n...\n```\n\n#### 3.3. Mostrar os 2 Eventos Mais Próximos de Iniciar\n\n**Opção 3: Mostrar os 2 Eventos Mais Próximos de Iniciar**\n\nExibe os dois eventos que estão mais próximos de ocorrer, com base na data atual.\n\n**Exemplo de Uso:**\n\n```\nSelecione uma opção: 3\n```\n\n**Saída Esperada:**\n\n```\n--- 2 Eventos Mais Próximos de Iniciar ---\nNome: Festival de Música\nTipo: Música\nDescrição: Festival anual de música ao vivo.\nData: 2024-12-20\nLocalização: Parque Central\n---------------------------\nNome: Concerto de Jazz\nTipo: Música\nDescrição: Concerto de jazz ao ar livre.\nData: 2024-12-22\nLocalização: Praça Mauá\n---------------------------\n```\n\n#### 3.4. Mostrar Eventos no Rio de Janeiro\n\n**Opção 4: Mostrar Eventos no Rio de Janeiro**\n\nLista todos os eventos que ocorrem no Rio de Janeiro.\n\n**Exemplo de Uso:**\n\n```\nSelecione uma opção: 4\n```\n\n**Saída Esperada:**\n\n```\n--- Eventos no Rio de Janeiro ---\nNome: Exposição de Arte Moderna\nTipo: Arte\nDescrição: Exposição de obras contemporâneas.\nData: 2024-12-25\nLocalização: Museu de Arte do Rio\n---------------------------\nNome: Concerto de Jazz\nTipo: Música\nDescrição: Concerto de jazz ao ar livre.\nData: 2024-12-22\nLocalização: Praça Mauá, Rio de Janeiro\n---------------------------\n...\n```\n\n#### 3.5. Mostrar Eventos ao Ar Livre\n\n**Opção 5: Mostrar Eventos ao Ar Livre**\n\nExibe todos os eventos que são realizados ao ar livre.\n\n**Exemplo de Uso:**\n\n```\nSelecione uma opção: 5\n```\n\n**Saída Esperada:**\n\n```\n--- Eventos ao Ar Livre ---\nNome: Festival de Música\nTipo: Música\nDescrição: Festival anual de música ao vivo.\nData: 2024-12-20\nLocalização: Parque Central\nTipo de Evento: Ao ar livre\n---------------------------\nNome: Concerto de Jazz\nTipo: Música\nDescrição: Concerto de jazz ao ar livre.\nData: 2024-12-22\nLocalização: Praça Mauá, Rio de Janeiro\nTipo de Evento: Ao ar livre\n---------------------------\n...\n```\n\n#### 3.6. Mostrar Metadados por Evento\n\n**Opção 6: Mostrar Metadados por Evento**\n\nApresenta todos os metadados associados a cada evento, organizados por nome do evento.\n\n**Exemplo de Uso:**\n\n```\nSelecione uma opção: 6\n```\n\n**Saída Esperada:**\n\n```\n--- Metadados por Evento ---\nEvento: Festival de Música\n  event_type: Ao ar livre\n  organizer: XYZ Eventos\n  sponsors: ABC Corp\n---------------------------\nEvento: Exposição de Arte Moderna\n  event_type: Indoor\n  organizer: ArteRio\n  sponsors: ArteCorp\n---------------------------\n...\n```\n\n#### 3.7. Ver Logs\n\n**Opção 7: Ver Logs**\n\nExibe o conteúdo do arquivo de log para monitorar as operações da aplicação.\n\n**Exemplo de Uso:**\n\n```\nSelecione uma opção: 7\n```\n\n**Saída Esperada:**\n\n```\n--- Logs do Scraper ---\n2024-12-01 10:15:30,123 - INFO - main - Iniciando o aplicativo...\n2024-12-01 10:15:30,124 - INFO - menu - Opção selecionada: Mostrar Todos os Eventos\n2024-12-01 10:15:30,125 - INFO - queries.database_queries - Total de eventos: 2\n2024-12-01 10:15:30,126 - INFO - queries.database_queries - Total de dados de eventos: 2\n2024-12-01 10:15:30,127 - INFO - menu - Consulta 'Mostrar Todos os Eventos' concluída.\n...\n--- Fim dos Logs ---\n```\n\n#### 3.8. Sair\n\n**Opção 8: Sair**\n\nEncerra a aplicação.\n\n**Exemplo de Uso:**\n\n```\nSelecione uma opção: 8\n```\n\n**Saída Esperada:**\n\n```\nEncerrando o aplicativo. Até logo!\n```\n\n---\n\n## 📂 Estrutura do Banco de Dados\n\nO banco de dados utilizado é o **SQLite**, organizado em duas principais tabelas: `event` e `event_data`. Além disso, há uma tabela de `metadata` para armazenar informações adicionais sobre os eventos.\n\n### 1. Tabela `event`\n\nArmazena informações básicas sobre cada evento.\n\n| Campo        | Tipo           | Descrição                            |\n|--------------|----------------|--------------------------------------|\n| `id`         | AutoField      | Identificador único do evento.       |\n| `name`       | CharField      | Nome do evento.                       |\n| `type`       | TextField      | Tipo do evento (e.g., Música, Arte). |\n| `description`| CharField (Null)| Descrição do evento.                  |\n| `created_at` | DateTimeField  | Data e hora de criação do registro.   |\n\n### 2. Tabela `event_data`\n\nArmazena informações específicas de cada ocorrência de um evento.\n\n| Campo      | Tipo          | Descrição                                   |\n|------------|---------------|---------------------------------------------|\n| `id`       | AutoField     | Identificador único dos dados do evento.    |\n| `event_id` | ForeignKeyField | Referência ao `id` da tabela `event`.      |\n| `date`     | DateTimeField | Data e hora do evento.                      |\n| `location` | TextField     | Localização do evento.                      |\n\n### 3. Tabela `metadata`\n\nArmazena metadados adicionais para cada evento.\n\n| Campo      | Tipo          | Descrição                        |\n|------------|---------------|----------------------------------|\n| `id`       | AutoField     | Identificador único do metadado. |\n| `event_id` | ForeignKeyField | Referência ao `id` da tabela `event`. |\n| `key`      | CharField     | Chave do metadado (e.g., `event_type`). |\n| `value`    | TextField     | Valor do metadado (e.g., `Ao ar livre`). |\n\n---\n\n## 📝 Consultas Disponíveis\n\n### 1. Mostrar Todos os Eventos\n\n**Descrição**: Exibe uma lista completa de todos os eventos armazenados, incluindo suas datas, localizações e tipos.\n\n**Função**: `get_all_events()`\n\n### 2. Mostrar os 2 Eventos Mais Próximos de Iniciar\n\n**Descrição**: Exibe os dois eventos que estão mais próximos de ocorrer, com base na data atual.\n\n**Função**: `get_upcoming_events(limit=2)`\n\n### 3. Mostrar Eventos no Rio de Janeiro\n\n**Descrição**: Lista todos os eventos que ocorrem no Rio de Janeiro.\n\n**Função**: `get_events_in_rio()`\n\n### 4. Mostrar Eventos ao Ar Livre\n\n**Descrição**: Exibe todos os eventos que são realizados ao ar livre.\n\n**Função**: `get_outdoor_events()`\n\n### 5. Mostrar Metadados por Evento\n\n**Descrição**: Apresenta todos os metadados associados a cada evento, organizados por nome do evento.\n\n**Função**: `get_metadata_per_event()`\n\n---\n\n## 📈 Logs\n\nA aplicação utiliza a biblioteca `logging` para registrar informações importantes sobre a execução do scraper e das consultas. Os logs são armazenados no arquivo `src/logs/scraper.log`.\n\n**Tipos de Logs:**\n\n- **INFO**: Informações gerais sobre a execução.\n- **WARNING**: Avisos sobre condições inesperadas que não impedem a execução.\n- **ERROR**: Erros que impedem a conclusão de uma operação.\n- **DEBUG**: Informações detalhadas para depuração (opcional, dependendo da configuração).\n\n**Exemplo de Entrada de Log:**\n\n```\n2024-12-01 10:15:30,123 - INFO - main - Iniciando o aplicativo...\n2024-12-01 10:15:30,124 - INFO - menu - Opção selecionada: Mostrar Todos os Eventos\n2024-12-01 10:15:30,125 - INFO - queries.database_queries - Total de eventos: 2\n2024-12-01 10:15:30,126 - INFO - queries.database_queries - Total de dados de eventos: 2\n2024-12-01 10:15:30,127 - INFO - menu - Consulta 'Mostrar Todos os Eventos' concluída.\n...\n```\n\n---\n\n## 🔍 Depuração\n\nEm caso de problemas durante a execução das consultas ou do scraper, os logs fornecem informações detalhadas que podem auxiliar na identificação e resolução de erros.\n\n### Passos para Depuração:\n\n1. **Verifique os Logs:**\n\n   Abra o arquivo de log para identificar mensagens de erro ou avisos.\n\n   ```bash\n   cat src/logs/scraper.log\n   ```\n\n2. **Analise as Mensagens de Erro:**\n\n   As mensagens de erro geralmente incluem o tipo de erro e a linha do código onde ocorreu, facilitando a localização do problema.\n\n3. **Verifique a Estrutura do Banco de Dados:**\n\n   Assegure-se de que as tabelas e os relacionamentos estão corretamente configurados.\n\n4. **Teste Individualmente as Funções:**\n\n   Execute as funções de consulta individualmente para isolar o problema.\n\n5. **Revisite as Definições dos Modelos:**\n\n   Garanta que os modelos ORM (`Event`, `EventData`, `Metadata`) estão corretamente definidos com os relacionamentos adequados.\n\n\n## 📄 Licença\n\nEste projeto está licenciado sob a [MIT License](LICENSE).\n\n---","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvicktorms%2Frio_event_scraper","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvicktorms%2Frio_event_scraper","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvicktorms%2Frio_event_scraper/lists"}