O objectivo global deste trabalho é proporcionar uma forma de experimentar a aplicação de software de comunicações, no desenvolvimento de um Web Crawler. Um Web Crawler é uma aplicação cliente que visita URLs e executa diversas tarefas, tais como descarga de conteúdos de um URL, verificação da validade das ligações de uma página HTML, construção de um índice para um motor de busca, etc.
O trabalho decompõe-se em cinco partes, cada uma das quais a ser desenvolvida no prazo de uma semana:
parte I: versão simplificada do WebCrawler
parte II: extensão de validação de URL's e capacidade visita recursiva
parte III: extensão com possibilidade de definir ordem de visita dos URL's encontrados
parte IV: evolução para arquitectura cliente/servidor
parte V: evolução do servidor para suportar multithreading
Numa primeira parte do trabalho, será desenvolvido um Web Crawler muito simples que apenas descarrega os conteúdos de um URL e visualiza-os no dispositivo de sáida (standard output). Durante o trabalho, diversos componentes e aspectos da linguagem Java terão de ser aprofundados, bem como alguns padrões de software terão de ser aprendidos.
Para começar, escrever-se-á um programa: um cliente Web Crawler.
O cliente Web Crawler deve realizar as seguintes actividades:
Ler o URL HTTP da linha de comandos. Criar uma conexão ao servidor na máquina e porto dados (p.e., HTTP porto 8080).
Enviar para o servidor o URL pretendido, ler todo o conteúdo, i.e., tanto o cabeçalho HTTP como o corpo que é enviado através da ligação HTTP, e escrever o conteúdo num ficheiro temporário criado pelo Web Crawler na máquina local. Por forma a assegurar nomes únicos para os ficheiros, é recomendada a utilização de métodos que permitam criar ficheiros temporários únicos.
Visualizar os conteúdos do ficheiro no terminal.
O cliente deve imprimir as mensagens de erro apropriadas e abortar com um código de valor 1, se alguma das chamadas ao sistema não trabalharem adequadamente. Se tudo corre normalmente, o programa deve retornar um valor de 0.
Sugere-se que se garanta que o cliente não fica bloqueado indefinidamente, caso o servidor não obedeça ao protocolo HTTP ou algum dos computadores falhe. Assegurar por exemplo que todas as chamadas de sistema (connect, send, recv) são canceladas caso num determinado período de tempo pré-definido o servidor falhar em responder prontamente.
Na segunda parte do trabalho, será desenvolvida uma versão mais sofisticada do Web Crawler que visita um URL para determinar se é válido ou não. Diversas partes do trabalho anteriormente desenvolvido poderão e deverão ser reutilizadas.
Ao programa Cliente Web Crawler adicionar-se-á um verificador de URL's.
O cliente Web Crawler deve realizar as seguintes actividades:
Ler o URL HTTP da linha de comandos. Criar uma conexão ao servidor na máquina e porto dados (p.e., HTTP porto 8080).
Enviar para o servidor o URL pretendido, e começar por processar o cabeçalho que é enviado através da ligação HTTP, determinar o tipo de resposta (reply status) dado para o URL enviado, e escrever esta informação no terminal. Se a opção "-r" (recursiva) não tiver sido activada o programa deve terminar neste ponto.
Se (1) o tipo de resposta é válido, p.e., status == 200, (2) o tipo de conteúdo do ficheiro é "text/html", e (3) a opção "-r" estiver activa, o corpo todo do ficheiro HTML deve ser descarregado e todos os links HREF nele incluídos devem ser validados.
Para evitar ciclos infinitos no caso de existirem ciclos no grafo de URL's, deve-se usar uma cache de URL's que detecte os ciclos e devolva o tipo de resposta armazenado.
Nesta fase, não é necessário ter a preocupação de validar os URL's por uma determinada ordem. Sugere-se uma pesquisa em profundidade (depth-first) atendendo a que a forma recursiva é a mais fácil para validar os URL's. Na parte III do trabalho, explorar-se-ão outras abordagens.
Na terceira parte do trabalho, pretende-se evoluir o Web Crawler da parte II por forma a se poder visitar todos os links a partir de um URL inicial numa ordem FIFO para determinar se é válido ou não.
O cliente Web Crawler deve realizar as seguintes actividades:
Ler o URL HTTP da linha de comandos. Criar uma conexão ao servidor na máquina e porto dados (p.e., HTTP porto 8080).
Enviar para o servidor o URL pretendido, e começar por processar o cabeçalho que é enviado através da ligação HTTP, determinar o tipo de resposta (reply status) dado para o URL enviado, e escrever esta informação no terminal. Se a opção "-r" (recursiva) não tiver sido activada o programa deve terminar neste ponto.
Se (1) o tipo de resposta é válido, p.e., status == 200, (2) o tipo de conteúdo do ficheiro é "text/html", e (3) a opção "-r" estiver activa, o corpo todo do ficheiro HTML deve ser descarregado e todos os links HREF nele incluídos devem ser validados por ordem FIFO ou LIFO. Utilizar a opção "-o" para seleccionar uma das alternativas:
[-o FIFO|LIFO]
Para este trabalho, não ter preocupações com optimizações para manipulação de ficheiros HTML muito grandes. Estas optimizações poderão ser feitas posteriormente.
Para o desenvolvimento desta parte do trabalho sugere-se a aplicação do Command Pattern por forma a armazenar e processar os pedidos em FIFO ou ordem LIFO.
Na quarte parte do trabalho, pretende-se evoluir o Web Crawler por forma a poder ser utilizado em cliente/servidor.
Adicionalmente às funcionalidades já suportadas anteriormente, o Web Crawler deve realizar as seguintes actividades:
Permitir ser invocado em modo autónomo (opção "-standalone"), modo cliente (opção "-client") ou modo servidor (opção "-server"). Se nenhum modo for indicado na linha de comandos, assume-se por defeito o modo autónomo.
[-standalone | -server | -client]
Na quinta parte do trabalho, pretende-se evoluir a parte servidor do Web Crawler para suportar 'multithreading' por forma a poder servir diversos clientes em simultâneo.
Voltar à pagina Web de PC.