Skip to content

Crawler

André da Silva Freitas edited this page Jun 4, 2023 · 1 revision

Crawler bot

Rest API

  1. Construtor: O controlador recebe uma instância de um logger (ILogger) e uma instância do ciclo de vida da aplicação (IHostApplicationLifetime) por meio do construtor.

  2. Endpoint POST /task/create: Este endpoint permite criar um novo trabalho de rastreamento. Ele recebe uma solicitação CrawlerRequest como entrada, que contém as URLs a serem rastreadas. O método cria uma instância de CrawlerJob com o status Waiting e inicia um serviço de rastreamento (CrawlerService) para processar o trabalho. O trabalho é adicionado à lista de trabalhos em execução (TaskJobs.GetInstance().AddJob(jobTask)) e o serviço de rastreamento é iniciado assincronamente.

  3. Endpoint GET /task/list: Este endpoint retorna uma lista de todos os trabalhos de rastreamento em andamento. Ele obtém a lista de trabalhos da instância de TaskJobs e retorna a lista em formato JSON.

  4. Endpoint GET /task/{jobId}: Este endpoint retorna o status de um trabalho de rastreamento específico com base no ID fornecido. Ele busca o trabalho na instância de TaskJobs usando o ID fornecido e verifica se o trabalho está em execução ou foi cancelado. Se o trabalho estiver em execução, seu status é atualizado para Running e o trabalho é retornado em formato JSON. Caso contrário, apenas o trabalho é retornado.

  5. Endpoint POST /task/{jobId}/cancel: Este endpoint permite cancelar um trabalho de rastreamento específico com base no ID fornecido. Ele busca o trabalho na instância de TaskJobs, verifica se o trabalho não foi cancelado anteriormente e, em seguida, cancela o token de cancelamento associado ao trabalho. O status do trabalho é atualizado para Canceled e uma mensagem indicando o cancelamento é definida. O trabalho é retornado em formato JSON.

  6. Endpoint POST /task/cancel: Este endpoint permite cancelar todos os trabalhos de rastreamento em andamento. Ele obtém a lista de trabalhos da instância de TaskJobs e percorre cada trabalho, cancelando o token de cancelamento associado e atualizando o status para Canceled. Ao final, a lista de trabalhos cancelados é retornada em formato JSON.

Essas são as principais funcionalidades do controlador ApiController, que permite iniciar, listar, verificar o status e cancelar trabalhos de rastreamento por meio de uma API RESTful.

Obs*: Lembrando que você está usando a /swagger para acessar todos os endpoint com mais facilidade.

Metadados coletados

Aqui estão os passos detalhados para a coleta de dados e persistência do crawler bot, com base no código fornecido:

  1. Obtenção do nome da classe do tipo EventCrawler:

    • A variável typeName recebe o valor do nome completo da classe EventCrawler usando a propriedade FullName da classe typeof(EventCrawler).
  2. Obtenção da URL:

    • A variável url é obtida a partir do conteúdo dos elementos <meta> com os atributos property igual a 'og:url' ou 'twitter:url'. Caso não seja encontrado nenhum desses elementos, a URL é obtida a partir da propriedade RequestUri do objeto context.Request. Se a propriedade RequestUri também for nula, a variável url recebe uma string vazia.
  3. Obtenção do nome:

    • A variável name é obtida a partir do conteúdo dos elementos <meta> com os atributos property igual a 'og:site_name', 'al:android:app_name', 'twitter:app:name:googleplay', 'al:iphone:app_name' ou 'al:ipad:app_name'. Se nenhum desses elementos for encontrado, a variável name recebe uma string vazia.
  4. Obtenção do título:

    • A variável title é obtida a partir do conteúdo dos elementos <title> ou dos elementos <meta> com os atributos name igual a 'title', property igual a 'og:title' ou 'twitter:title'. Se nenhum desses elementos for encontrado, a variável title recebe uma string vazia.
  5. Obtenção do favicon:

    • A variável favicon é obtida a partir do conteúdo do atributo href dos elementos <link> com os atributos rel igual a 'icon', 'shortcut icon' ou 'apple-touch-icon'. Se nenhum desses elementos for encontrado, a variável favicon recebe uma string vazia.
  6. Obtenção da descrição:

    • A variável description é obtida a partir do conteúdo dos elementos <meta> com os atributos name igual a 'description', property igual a 'twitter:description' ou 'og:description'. Se nenhum desses elementos for encontrado, a variável description recebe uma string vazia.
  7. Obtenção do tipo:

    • A variável type é obtida a partir do conteúdo do atributo content dos elementos <meta> com o atributo property igual a 'og:type'. Se nenhum desses elementos for encontrado, a variável type recebe uma string vazia.
  8. Obtenção da imagem:

    • A variável image é obtida a partir do conteúdo do atributo content dos elementos <meta> com os atributos property igual a 'og:image' ou 'twitter:image'. Se nenhum desses elementos for encontrado, a variável image recebe uma string vazia.
  9. Obtenção do local:

    • A variável locale é obtida a partir do conteúdo do atributo content dos elementos <meta> com o atributo property igual a 'og:locale'. Se nenhum desses elementos for encontrado, a variável locale recebe uma string vazia.

Após a conclusão desses passos, os dados obtidos nas variáveis podem ser utilizados para a persistência do crawler bot, de acordo com as necessidades do sistema.

Persistência

Usamos o MongoDB para executar essas operações:

  1. Encontre e exclua: O método verifica se já existe um evento com a mesma URL do evento que está sendo inserido. Se existir, o evento existente é excluído.

  2. Inserir: O método insere o novo evento na coleção de eventos.

  3. Atualização paralela: O método percorre em paralelo uma lista de termos associados ao evento e os atualiza no dicionário de termos.

Em resumo, o método realiza a inserção do evento na coleção e atualiza o dicionário de termos relacionados. Ele garante que eventos duplicados sejam removidos e que o dicionário esteja atualizado com os termos mais recentes.

Essas operações são importantes para garantir a integridade e precisão dos dados coletados pelo crawler bot.

BugSearch drawio

BugSearch V2

Repo UI

Interface gráfica feita em flutter https://github.com/1mrschneider/bug_search_ui

Repo V1

Projeto depreciado desenvolvido com typescript https://github.com/andrrff/ifma-webcrawler

Clone this wiki locally