-
Notifications
You must be signed in to change notification settings - Fork 0
Crawler
-
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. -
Endpoint
POST /task/create: Este endpoint permite criar um novo trabalho de rastreamento. Ele recebe uma solicitaçãoCrawlerRequestcomo entrada, que contém as URLs a serem rastreadas. O método cria uma instância deCrawlerJobcom o statusWaitinge 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. -
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 deTaskJobse retorna a lista em formato JSON. -
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 deTaskJobsusando 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 paraRunninge o trabalho é retornado em formato JSON. Caso contrário, apenas o trabalho é retornado. -
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 deTaskJobs, 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 paraCancelede uma mensagem indicando o cancelamento é definida. O trabalho é retornado em formato JSON. -
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 deTaskJobse percorre cada trabalho, cancelando o token de cancelamento associado e atualizando o status paraCanceled. 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.
Aqui estão os passos detalhados para a coleta de dados e persistência do crawler bot, com base no código fornecido:
-
Obtenção do nome da classe do tipo
EventCrawler:- A variável
typeNamerecebe o valor do nome completo da classeEventCrawlerusando a propriedadeFullNameda classetypeof(EventCrawler).
- A variável
-
Obtenção da URL:
- A variável
urlé obtida a partir do conteúdo dos elementos<meta>com os atributospropertyigual a'og:url'ou'twitter:url'. Caso não seja encontrado nenhum desses elementos, a URL é obtida a partir da propriedadeRequestUrido objetocontext.Request. Se a propriedadeRequestUritambém for nula, a variávelurlrecebe uma string vazia.
- A variável
-
Obtenção do nome:
- A variável
nameé obtida a partir do conteúdo dos elementos<meta>com os atributospropertyigual 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ávelnamerecebe uma string vazia.
- A variável
-
Obtenção do título:
- A variável
titleé obtida a partir do conteúdo dos elementos<title>ou dos elementos<meta>com os atributosnameigual a'title',propertyigual a'og:title'ou'twitter:title'. Se nenhum desses elementos for encontrado, a variáveltitlerecebe uma string vazia.
- A variável
-
Obtenção do favicon:
- A variável
faviconé obtida a partir do conteúdo do atributohrefdos elementos<link>com os atributosreligual a'icon','shortcut icon'ou'apple-touch-icon'. Se nenhum desses elementos for encontrado, a variávelfaviconrecebe uma string vazia.
- A variável
-
Obtenção da descrição:
- A variável
descriptioné obtida a partir do conteúdo dos elementos<meta>com os atributosnameigual a'description',propertyigual a'twitter:description'ou'og:description'. Se nenhum desses elementos for encontrado, a variáveldescriptionrecebe uma string vazia.
- A variável
-
Obtenção do tipo:
- A variável
typeé obtida a partir do conteúdo do atributocontentdos elementos<meta>com o atributopropertyigual a'og:type'. Se nenhum desses elementos for encontrado, a variáveltyperecebe uma string vazia.
- A variável
-
Obtenção da imagem:
- A variável
imageé obtida a partir do conteúdo do atributocontentdos elementos<meta>com os atributospropertyigual a'og:image'ou'twitter:image'. Se nenhum desses elementos for encontrado, a variávelimagerecebe uma string vazia.
- A variável
-
Obtenção do local:
- A variável
localeé obtida a partir do conteúdo do atributocontentdos elementos<meta>com o atributopropertyigual a'og:locale'. Se nenhum desses elementos for encontrado, a variávellocalerecebe uma string vazia.
- A variável
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.
Usamos o MongoDB para executar essas operações:
-
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.
-
Inserir: O método insere o novo evento na coleção de eventos.
-
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.
Este projeto está licenciado nos termos da licença APACHE. Consulte o arquivo LICENSE para obter mais informações.
Interface gráfica feita em flutter https://github.com/1mrschneider/bug_search_ui
Projeto depreciado desenvolvido com typescript https://github.com/andrrff/ifma-webcrawler